求解微分方程的龙格库塔数值法
用Matlab四阶龙格库塔法求常微分方程可以按照以下方法去实现。
1、首先建立自定义微分方程函数
function f = ode_fun(x,y)
f=y+2*x/y^2;
end
2、然后用四阶龙格库塔法求其数值解
figure(2)
y0=[1]; %初值y(0)=1
h=0.1;
a=0;
b=5;
[x,y] = runge_kutta(@(x,y)ode_fun(x,y),y0,h,a,b);
disp(' x y')
A=[x',y']
plot(x,y,'LineWidth',1.5),grid on
xlabel('x'),ylabel('y(x)');
对于微分方程
通常所说的龙格-库塔法是指四阶而言的,我们可以仿二阶、三阶的情形推导出常用的标准四阶龙格-库塔法公式
在各种龙格-库塔法当中有一个方法十分常用,以至于经常被称为“RK4”或者就是“龙格-库塔法”。该方法主要是在已知方程导数和初值信息,利用计算机仿真时应用,省去求解微分方程的复杂过程。
令 初值问题 表述如下。
则,对于该问题的RK4由如下方程给出:
其中
这样,下一个值( y n +1 )由现在的值( y n )加上时间间隔( h )和一个估算的斜率的乘积所决定。该斜率是以下斜率的加权平均:
当四个斜率取平均时,中点的斜率有更大的权值:
RK4法是四阶方法,也就是说每步的误差是 h 阶 ,而总积累误差为 h 阶。
注意上述公式对于标量或者向量函数( y 可以是向量)都适用。
显式龙格-库塔法是上述RK4法的一个推广。它由下式给出。
2021-11-22 广告