当前位置:首页 » 运动资讯 » 龙格库塔法可以求三维运动轨迹吗
扩展阅读
试管婴儿什么时候可以做 2024-11-07 00:28:07
手机u盘怎样互传 2024-11-07 00:16:23

龙格库塔法可以求三维运动轨迹吗

发布时间: 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