ZKX's LAB

龙格库塔法与隐式欧拉法的区别 四阶五级龙格库塔法是什么意思 阶和级分别是怎么定义的?

2020-07-27知识11

四阶五级龙格库塔法是什么意思 阶和级分别是怎么定义的? 初值为[1 2][T,x]=ode15s(@vdp1000,[0 10],[1 2]);plot(T,x(:,1),'-');hold on;plot(T,x(:,2),'-.');hold on;legend('x1','x2');子函数为:function dx=vdp1000(t,x)dx=。用四阶龙格库塔法求解 初值给一下。br/>;在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存%function dxdt=ode_Miss_ghost(t,x)%分别用x(1),x(2)。龙格库塔法的基本原理 该算法是构建在数学支持的基础之上的。对于一阶精度的拉格朗日中值定理有:对于微分方程:y'=f(x,y)y(i+1)=y(i)+h*K1K1=f(xi,yi)当用点xi处的斜率近似值K1与右端点xi+1处的斜率K2的算术平均值作为平均斜率K*的近似值,那么就会得到二阶精度的改进拉格朗日中值定理:y(i+1)=y(i)+[h*(K1+K2)/2]K1=f(xi,yi)K2=f(x(i)+h,y(i)+h*K1)依次类推,如果在区间[xi,xi+1]内多预估几个点上的斜率值K1、K2、…Km,并用他们的加权平均数作为平均斜率K*的近似值,显然能构造出具有很高精度的高阶计算公式。经数学推导、求解,可以得出四阶龙格-库塔公式,也就是在工程中应用广泛的经典龙格-库塔算法:y(i+1)=y(i)+h*(K1+2*K2+2*K3+K4)/6K1=f(x(i),y(i))K2=f(x(i)+h/2,y(i)+h*K1/2)K3=f(x(i)+h/2,y(i)+h*K2/2)K4=f(x(i)+h,y(i)+h*K3)通常所说的龙格-库塔法是指四阶而言的,我们可以仿二阶、三阶的情形推导出常用的标准四阶龙格-库塔法公式MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程 function Euler欧拉法和龙格库塔算法解一阶常微分方程源代码例子dy/dx=-y+x+1f=inline('-y+x+1','x','y');微分方程的右边项dx=0.5;x方向步长xleft=0;区域的左边界xright=10;区域的右边界xx=xleft:dx:xright;一系列离散的点n=length(xx);点的个数y0=1;(1)欧拉法Euler=y0;for i=2:nEuler(i)=Euler(i-1)+dx*f(xx(i-1),Euler(i-1));end(2)龙格库塔法RK=y0;for i=2:nk1=f(xx(i-1),RK(i-1));k2=f(xx(i-1)+dx/2,RK(i-1)+k1*dx/2);k3=f(xx(i-1)+dx/2,RK(i-1)+k2*dx/2);k4=f(xx(i-1)+dx,RK(i-1)+k3*dx);RK(i)=RK(i-1)+dx*(k1+2*k2+2*k3+k4)/6;endEuler和Rk法结果比较plot(xx,Euler,xx,RK)hold on精确解用作图syms xrightsolve=dsolve('Dy=-y+x+1','y(0)=1','x');求出解析解rightdata=subs(rightsolve,xx);将xx代入解析解,得到解析解对应的数值plot(xx,rightdata,'r*')legend('Euler','Runge-Kutta','analytic')

随机阅读

qrcode
访问手机版