當前位置:首頁 » 運動資訊 » 龍格庫塔法可以求三維運動軌跡嗎

龍格庫塔法可以求三維運動軌跡嗎

發布時間: 2022-10-03 09:19:47

1. 簡單介紹什麼龍格-庫塔法

龍格庫塔法的家族中的一個成員如此常用,以至於經常被稱為「RK4」或者就是「龍格庫塔法」。該方法主要是在已知方程導數和初值信息,利用計算機模擬時應用,省去求解微分方程的復雜過程。

2. 龍格庫塔方法求微分方程的初值問題的前提是初值已知,但請問對給定的一個微分方程如何確定一個初值呢

方程是實際應用是列出來的,列方程的過程要得到一個初值是不難的
各種物理測量都可以應用
比如要列微分方程求某物體的運動軌跡,完全可以人為的設定物體在零時刻處於零位置

3. 怎麼用龍格庫塔法求解力學問題,謝謝,題目在圖片里,要詳細的程序,包括畫出圖

要使用RK法,首先要得到問題的常微分方程,具體的分析求解因為題目很簡單,這里就不說了,反正本題有關系
v'=g-k*v^2/m
其中,v'為速度對時間的導數,也就是加速度
採用RK4法,由於常微分方程只與v有關,與t無直接關系,RK4法可以簡單寫為
k1=f(v(n))
k2=f(v(n)+h/2*k1)
k3=f(v(n)+h/2*k2)
k4=f(v(n)+h*k3)
v(n+1)=v(n)+h/6*(k1+2k2+2k3+k4)
根據題目,有初值v(0)=0 (初速度為0),即可求解
由於手頭沒有裝VB,所以我把一下程序用Tcl語言重寫了一遍,Tcl/tk的可以正常運行,反正你可以參照著看,所有的語言編程思路是相似的。
先附上Tcl/Tk寫的:
set g 9.81
set k 29.4
set m 75
#定義常微分函數
Proc f {v} {
global g k m
set f [expr $g-$k*$v**2/$m]
}
#以下是主要計算部分,調用了上面的函數
set h 0.1
set v(0) 0
set n 0
set dv 1
while {$dv > 10**-3} {
set k1 [f $v($n)]
set k2 [f [expr $v($n) + $h / 2 * $k1]]
set k3 [f [expr $v($n) + $h / 2 * $k2]]
set k4 [f [expr $v($n) + $h * $k3]]
set nn [expr $n+1]
set v($nn) [expr $v($n) + $h / 6 * ($k1 + 2 * $k2 + 2 * $k3 + $k4)]
puts [expr $h * $n],$v($nn)
set dv [expr abs($v($n) - $v($nn))]
incr n
}
Tcl/Tk的運行結果:
時間,速度
0.1 0.968603324806
0.2 1.86719840948
0.3 2.64465167179
0.4 3.27770943734
0.5 3.76821957195
0.6 4.13386114838
0.7 4.39864064439
0.8 4.58638649863
0.9 4.71753254441
1.0 4.80818704498
1.1 4.87039891085
1.2 4.9128797342
1.3 4.94178878159
1.4 4.96141640673
1.5 4.97472149869
1.6 4.98373107432
1.7 4.98982752078
1.8 4.99395074243
1.9 4.99673848624
2.0 4.99862288083
2.1 4.99989645764
2.2 5.00075712243
2.3 5.00133870705
2.4 5.00173168802
2.5 5.00199721975
2.6 5.002176632
2.7 5.00229785401
2.8 5.0023797583
2.9 5.002435097
3.0 5.00247248647
3.1 5.00249774851
3.2 5.00251481666
3.3 5.00252634865
3.4 5.00253414015
3.5 5.00253940442
3.6 5.00254296119
3.7 5.00254536429
3.8 5.00254698792
3.9 5.00254808492
4.0 5.00254882609
4.1 5.00254932686
4.2 5.0025496652
4.3 5.0025498938
4.4 5.00255004825
4.5 5.0025501526
4.6 5.0025502231
4.7 5.00255027074
4.8 5.00255030293
4.9 5.00255032467
5.0 5.00255033936
5.1 5.00255034929
5.2 5.002550356
5.3 5.00255036053
5.4 5.00255036359
5.5 5.00255036566
5.6 5.00255036706
5.7 5.002550368
5.8 5.00255036864
5.9 5.00255036907
6.0 5.00255036936
6.1 5.00255036956
6.2 5.00255036969
6.3 5.00255036978
6.4 5.00255036984
6.5 5.00255036988
6.6 5.00255036991
6.7 5.00255036993
6.8 5.00255036994
6.9 5.00255036995
7.0 5.00255036996
7.1 5.00255036996
精確解為最大速度5.002550369969

以下是VB的代碼(未調試):
Private Const g = 9.81
Private Const k = 29.4
Private Const m = 75

Function f(ByVal v) As Long
f = g - k * v ^ 2 / m
End Function

Private Sub RK4()
Dim h, k1, k2, k3, k4, dv As Long
Dim v(100) As Long
h = 0.1
v(0) = 0
n = 0
dv = 1
Do While dv > 10 ^ -5
k1 = f(v(n))
k2 = f(v(n) + h / 2 * k1)
k3 = f(v(n) + h / 2 * k2)
k4 = f(v(n) + h * k3)
v(n + 1) = v(n) + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4)
print v(n + 1)
dv = Abs(v(n) - v(n + 1))
n = n + 1
Loop
End Sub

出圖我覺得直接在Matlab中編寫或者用Excel繪制較簡單,所以就不寫了相關代碼了,畢竟那部分復雜多了

4. matlab的龍格庫塔法

第一個參數是調用的函數名(用來標明微分方程組),第二個參數是求解區域,第三個是初始條件。還可以加一些可選項在後面。
具體你可以在matlab裡面輸入doc ode23查看幫助。

5. matlab-龍格庫塔

你的這個問題不在於龍格庫塔。這是一個邊值問題(BVP),而不是初值問題。
我把程序給你,自己先看看,有問題再問吧。
不用再加分,當作新年禮物了,祝學習進步!

function zd523737127
% 解的初始估計
solinit = bvpinit(linspace(0,4,10),[5 0.5 1 2]);

% BVP問題求解
sol = bvp4c(@ode,@bc,solinit);

% 結果繪圖
t=sol.x;
vars={'x_1', 'x_2', '\lambda_1', '\lambda_2'};
for i=1:length(vars)
subplot(2,2,i);
plot(t,sol.y(i,:));
xlabel('t');
ylabel(vars{i});
end

function dY=ode(t,Y)
x1 = Y(1);
x2 = Y(2);
lambda1 = Y(3);
lambda2 = Y(4);

% 微分方程
dY=[
x2*(lambda1*x1/60+40)-0.02*x1-20;
(lambda2*(1-x2)/30+50)*(1-x2)-20*x2;
0.02*lambda1+50*(x1-0.75);
60*(x2-24)+lambda2*(70+lambda2*(1-x2)/30)-lambda1*(lambda1*x2/60+40)
];

% 邊界條件
function res=bc(ya,yb)
res=[ya(1)-5; ya(2)-0.5; yb(3); yb(4)];

6. 龍格庫塔法matlab編程

用matlab的四、五階龍格庫塔方法(ode45)可以求得其數值解。設定其微分方程組的初始條件X(0)=0,S(0)=0。解決方法:

1、常微分方程組的自定義函數odefun(t,y),其主要內容

dy(1)=3*y(2)/(60+y(2))*y(1)-0.16*y(1);

dy(2)=4*250-4*y(2)-5*y(2)/(60+y(2))*y(1)-0.06*y(1);

2、t、y1、y2的求解

[t,y]=ode45(@odefun,[0 10],y0)

3、計算結果及t與S、X的關系圖,S與X的關系圖

7. 龍格庫塔求解微分方程組

只要理解了龍格庫塔,這就很容易了。
定義函數,
f=func(x,y)
if y(1)>126,
f=[f1(y(1),y(2)), f2(y(1),y(2))];
else
f=[g1(y(1),y(2)), g2(y(1),y(2))];
end

然後就簡單了

8. 龍格庫塔法在內燃機燃燒分析時有哪些方面的運用

龍格-庫塔(Runge-Kutta)法
到目前為止,我們已經學習了多步法,例如:亞當斯-巴什福思(Adams
-Bashorth)法,亞當斯-莫爾頓(Adams-Monlton)法,都是常微分方程的積分
方法。它們需要在每一次迭代時重新計算一遍等式右邊的結果(非線性隱含問
題忽略計算多個 f (ω)值的可能性)
龍格-庫塔(Runge-Kutta)法是一種不同的處理,作為多級方法為人們所知。
它要求對於一個簡單的校正計算多個 f 的值。
下面,我們列出了 3 種最流行的龍格-庫塔(Runge-Kutta)法:
改進的歐拉方法(精度:p=2):
V a = V n + Δtf (V n,tn)
2
Δt)二階格式
V n+1 = V n +Δtf (V a,tn +
2
Hevn』s 方法(p=2):
這是另一種二階格式:
V a = V n +Δtf (V n,tn)
V n = V n +
+1 Δt[ f (V n,tn) + f (V a,tn +Δt)]
2
注意: f (Vn,tn)在運算中應該只被計算一次。
四次龍格-庫塔(Runge-Kutta)法(p=4):
這是一個 4 階格式。這次我們寫的形式有點不同:
a = Δtf (V n,tn)
b = Δtf (V n + 1 a,tn + 1
2 2 Δt)
c = Δtf (V n + 1 b,tn + Δt)
1
2 2
d = Δtf (V n + c,tn +Δt)
V n =V n +
+1 1 (a +2b +2c +d)。
6