经典R-K

yp.m:

function dxdy=yp(x,y)
dxdy=-2*y-4*x;

ExpEulMtd.m:

%Explicit Euler method
%ExpEulMtd

h=0.1;
x=0:h:0.5;
[row,col]=size(x);
y=zeros(row,col);
i=1;
y(i)=2;
for i=2:col
    y(i)=y(i-1)+h*yp(x(i-1),y(i-1));
end
figure
plot(x,y)
y

ClassicRKMtd.m

%Classic R-K method
%ClassicRKMtd
h=0.1;
x=0:h:0.5;
[row,col]=size(x);
y=zeros(row,col);
i=1;
y(i)=2;
for i=2:col
    k1=yp(x(i-1),y(i-1));    
    y_mid=y(i-1)+h*k1/2;
    x_mid=x(i-1)+h/2;
    k2=yp(x_mid,y_mid); 
    y_mid=y(i-1)+h*k2/2;
    k3=yp(x_mid,y_mid); 
    y(i)=y(i-1)+h*k3;
    k4=yp(x(i),y(i));
    k_avg=(k1+2*k2+2*k3+k4)/6;
    y(i)=y(i-1)+h*k_avg;    
end
figure
plot(x,y)
y

trueSovle.m

%trueSovle
h=0.1;
x=0:h:0.5;
[row,col]=size(x);
y=zeros(row,col);
y=exp(-2*x)-2*x+1;
figure
plot(x,y)
y

>> ClassicRKMtd


y =


    2.0000    1.6187    1.2703    0.9488    0.6493    0.3679


>> trueSovle


y =


    2.0000    1.6187    1.2703    0.9488    0.6493    0.3679


>> 


(1) 欧拉方是一种简单的数值求解常微分方程的方。它是通过将微分方程近似为差分方程来求解的。具体来说,欧拉方是通过使用初始条件和微分方程的近似导数来推导出下一个点的近似值,然后将该近似值作为下一个点的初始条件,继续迭代计算,直到达到所需的解的精度。 (2) 改进欧拉方是对欧拉方的改进和优化。它通过使用一个更好的近似导数来提高数值解的精确度。具体来说,改进欧拉方是通过使用初始点和梯度在该点上的加权平均值来计算下一个点的近似值。 (3) 经典R-K(Runge-Kutta)方是一类数值求解常微分方程的方。它通过将微分方程转化为一组代数方程,并使用一系列的步长来逐步逼近解。具体来说,经典R-K方是通过计算每个步长内的一系列中间点和对应的权重,然后将这些中间点的函数值加权平均后作为下一个点的近似值。经典R-K方通常能够提供较高的数值精度,但计算量较大,尤其是在步长较小的情况下。 综上所述,欧拉方是最简单的数值求解常微分方程的方,但精度相对较低。改进欧拉方通过改进近似导数的计算方式来提高精度。经典R-K方是一种更精确的数值求解方,但计算量相对较大。如果对精度要求较高,并且时间允许,可以选择经典R-K方。如果希望在计算量较小的情况下获得相对较好的精度,可以选择改进欧拉方。如果只是需要一个初步的数值解,并且计算量要求较低,可以选择欧拉方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值