时间微商龙格库塔
① 跪求用龙格库塔求解微分方程的matlab程序
>> f=inline('1/6-y/30','t','y');
>> [t,y]=ode45(f,[0,5],[0]);
>> plot(t,y)
另外,由高数的知识,可以得到解析解为:y=5-5*e^(-t/30)
把上述的解析值也放到上图中。
>> hold on
>> plot(t,5-5*exp(-t/30),'r*')
可以看到二者相当吻合。
② 龙格库塔的文字介绍
龙格-库塔(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
③ 幂级数法与ode45龙格库塔法哪个更准确
我通过查文献知道这里们要用到四阶龙格库塔法进行ode45函数法拟合,即求取同时满足。
可以给定初值的!数据可以变成这样
t=[0 7 32 57 82 107 187 307 467 607];
x=[0.9748 0.0105 0.0108 0.0039;
0.8088 0.1032 0.0143 0.0737;
0.2481 0.1258 0.0941 0.5103;
0.0771 0.1264 0.1310 0.6655;
0.0307 0.0931 0.1395 0.7367;
0.0000 0.0714 0.1155 0.8131;
0.0000 0.0599 0.0986 0.8415;
0.0000 0.0588 0.0914 0.8498;
0.0000 0.0506 0.0715 0.8798];
x=[0.9919 0.0043 0.0029 0.0008];
④ 求大神用龙格库塔法解一道题
解方程很简单,调用ode45即可
关键是求运动时间,假设z方向坐标变为0即为落至地面运动结束,可求得运动时间的近似值及落地点坐标
代码如下:
clear all
clc
c=0.07;
u0=25;
a=pi/6;
f=@(t,x)([x(2);
-c*sqrt(x(2)^2+(x(4)-7-.35*x(5))^2+x(6)^2)*x(2);
x(4);
-c*sqrt(x(2)^2+(x(4)-7-.35*x(5))^2+x(6)^2)*(x(4)-7-.35*x(5));
x(6);
-9.81-c*sqrt(x(2)^2+(x(4)-7-.35*x(5))^2+x(6)^2)*x(6)]);
[t,Y]=ode45(f,0:.01:2,[0 u0*cos(a) 0 0 1.4 u0*sin(a)]);
n=max(find(Y(:,5)>0));
t_end=t(n)
s=[Y(n,1),Y(n,3),0]
plot3(Y(1:n,1),Y(1:n,3),Y(1:n,5))
其中t_end为运动时间
s为落地点坐标
看了半天,怎么都觉得方程不太对
再检查一下方程吧,尤其是第二个方程等号右边到底有没有负号
最后一个方程等号右边也有问题,请仔细检查
⑤ 求大神指点!matlab编写了一段龙格库塔法求解微分方程,可是为什么运行了会显示输入的参数不足啊
微分在数学中的定义:由函数B=f(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。微分是函数改变量的线性主要部分。微积分的基本概念之一。
设函数y = f(x)在x的邻域内有定义,x及x + Δx在此区间内。如果函数的增量Δy = f(x + Δx) - f(x)可表示为 Δy = AΔx + o(Δx)(其中A是不随Δx改变的常量,但A可以随x改变),而o(Δx)是比Δx高阶的无穷小(注:o读作omicron,希腊字母)那么称函数f(x)在点x是可微的,且AΔx称作函数在点x相应于因变量增量Δy的微分,记作dy,即dy = AΔx。函数的微分是函数增量的主要部分,且是Δx的线性函数,故说函数的微分是函数增量的线性主部(△x→0)。
通常把自变量x的增量 Δx称为自变量的微分,记作dx,即dx = Δx。于是函数y = f(x)的微分又可记作dy = f'(x)dx。函数因变量的微分与自变量的微分之商等于该函数的导数。因此,导数也叫做微商。
当自变量X改变为X+△X时,相应地函数值由f(X)改变为f(X+△X),如果存在一个与△X无关的常数A,使f(X+△X)-f(X)和A·△X之差是△X→0关于△X的高阶无穷小量,则称A·△X是f(X)在X的微分,记为dy,并称f(X)在X可微。一元微积分中,可微可导等价。记A·△X=dy,则dy=f′(X)dX。例如:d(sinX)=cosXdX。
微分概念是在解决直与曲的矛盾中产生的,在微小局部可以用直线去近似替代曲线,它的直接应用就是函数的线性化。微分具有双重意义:它表示一个微小的量,因此就可以把线性函数的数值计算结果作为本来函数的数值近似值,这就是运用微分方法进行近似计算的基本思想。
希望我能帮助你解疑释惑。
⑥ 龙格库塔法的介绍
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,用于数值求解微分方程。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
⑦ 龙格库塔方法求解常微分方程为什么会出现解误差较大
你好,请搜索”VisualC++常微分方程初值问题求解“可以找到相关资料例如:三、使用经典龙格-库塔算法进行高精度求解龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。同前几种算法一样,该算法也是构建在数学支持的基础之上的。对于一阶精度的欧拉公式有:yi+1=yi+h*K1K1=f(xi,yi)当用点xi处的斜率近似值K1与右端点xi+1处的斜率K2的算术平均值作为平均斜率K*的近似值,那么就会得到二阶精度的改进欧拉公式:yi+1=yi+h*(K1+K2)/2K1=f(xi,yi)K2=f(xi+h,yi+h*K1)下面的具体程序实现同改进的欧拉算法类似,只需作些必要的改动,下面将该算法的关键部分代码清单列出:……for(floatx=0;x<0.6;x+=0.1){r=x+expf(-x);K1=x-y[i]+1;file://求K1K2=(x+(float)(0.1/2))-(y[i]+K1*(float)(0.1/2))+1;file://求K2K3=(x+(float)(0.1/2))-(y[i]+K2*(float)(0.1/2))+1;file://求K3K4=(x+0.1)-(y[i]+K3*0.1)+1;file://求K4y[i+1]=y[i]+(float)(0.1*(K1+2*K2+2*K3+K4)/6);file://求yi+1r=fabs(r-y[i]);file://计算误差str.Format("y[%d]=%fr=%f\r\n",i,y[i],r);i++;msg+=str;}AfxMessageBox(msg);file://报告计算结果及误差情况
⑧ 用龙格库塔法求解微分方程时,函数ode45中的函数参数表达方式不一样画出的图也不一样
出现如此图形不一致的错误,其主要原因是:题主想表达的函数不一致而造成的。在自定义的shier1(t,x)函数中错误地把t用x(1)来表示,而把x1和x2用x(2)来表示,这造成该函数与题主先前用句柄函数定义的函数风马不接,所以后面自定义的函数应该这样来写,即
function dy=shier1(t,x)
r=1;d=0.5;a=0.1;b=0.02;
dy=[t*(r-a*x(1));x(2)*(b*t-d)];
修改后运行后,可以得到一致的图形。
⑨ 为什么MATLAB的ode45函数和我按照龙格库塔法解出来的结果不一样
为什么MATLAB的ode45函数和我按照BK4(龙格库塔法)解出来的结果不一样?其根本的原因是时间区间取了太大而造成,因为该微分方程超过【0,1.6】后,ode45法和BK4法得到的图像就失稳。由于ode45法和BK4法虽然都是龙格库塔法的思想,但ode45法是采用变步长进行计算,而BK4法是采用定步长进行计算,所以随着时间区间范围越来越大,其就不完全一样了。
下图为时间区间【0,1.6】时的图像。
⑩ 龙格库塔方法求微分方程的初值问题的前提是初值已知,但请问对给定的一个微分方程如何确定一个初值呢
方程是实际应用是列出来的,列方程的过程要得到一个初值是不难的
各种物理测量都可以应用
比如要列微分方程求某物体的运动轨迹,完全可以人为的设定物体在零时刻处于零位置