Matlab 用向前欧拉法、向后欧拉法、改进的欧拉法、经典的四阶Runge-Kutta法、四阶Adams方法计算下列微分方程初值问题的解

使用下面的例子来进行代码展示:

在这里插入图片描述
向前欧拉法
在这里插入图片描述

 a = 1;b = 2;h = 0.1;n = (b-a)/h;x(1) = 1;y(1) = 0.4;
 for i = 1:n
    x(i+1) = x(i) + h;
    y(i+1) = y(i) + h*(x(i)^3-y(i)/x(i));
    end

想输出x,y的值,式子后面就不要加分号。

在这里插入图片描述
向后欧拉法
在这里插入图片描述

这个是一个隐函数,先把隐函数转变成显函数,再进行计算

a = 1;b = 2;h = 0.1;n = (b-a)/h;x(1) = 1;y(1) = 0.4;
for i = 1:n
  x(i+1) = x(i) + h;
  y(i+1) = (y(i)*x(i+1)+h*x(i+1)^4)/(h+x(i+1));
end

改进的欧拉法

在这里插入图片描述可分解成三步
在这里插入图片描述

a = 1;b = 2;h = 0.1;n = (b-a)/h;x(1) = 1;y(1) = 0.4;
for i = 1:n
 K1 = x(i)^3 - y(i)/x(i);
 K2 = (x(i)+h)^3 - (y(i)+h*K1)/(x(i)+h)
 y(i+1) = y(i)+(h/2)*(K1+K2)
end

经典的四阶Runge-Kutta法

在这里插入图片描述

a = 1;b = 2;h = 0.1;n = (b-a)/h;x(1) = 1;y(1) = 0.4;
for i = 1:n
  K1 = x(i)^3 - y(i)/x(i);
  K2 = (x(i)+(h/2))^3 - (y(i)+(h/2)*K1)/(x(i)+(h/2));
  K3 = (x(i)+(h/2))^3 - (y(i)+(h/2)*K2)/(x(i)+(h/2));
  K4 = (x(i)+h)^3 - (y(i)+h*K3)/(x(i)+h);
  y(i+1) = y(i) + (h/6)*(K1+2*K2+2*K3+K4)
end

四阶Adams方法

在这里插入图片描述y2、y3、y4由4阶R-K方法计算。

a = 1;b = 2;h = 0.1;n = (b-a)/h;x(1) = 1;y(1) = 0.4;
x(2)=1.1; x(3)= 1.2;x(4)=1.3; y(2) = 0.475;y(3)= 0.581;y(4)=0.725;
for i = 4:n
  Y(i+1)=y(i)+(h/24)*(55*(x(i)^3-y(i)/x(i))-59*(x(i-1)^3-y(i-1)/x(i-1))+37*(x(i-2)^3-y(i-2)/x(i-2))-9*(x(i-3)^3-y(i-3)/x(i-3)));
  y(i+1)=y(i)+(h/24)*(9*(x(i+1)^3-Y(i+1)/x(i+1))+19*(x(i)^3-y(i)/x(i))-5*(x(i-1)^3-y(i-1)/x(i-1))+(x(i-2)^3-y(i-2)/x(i-2)));
end

计算的时候一定要仔细,不然很容易写错。

看完记得点赞,(づ ̄3 ̄)づ╭❤~

  • 45
    点赞
  • 254
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
四阶Runge-Kuta是一种常用的数值微分方程方法,其求精度比欧拉法高,可以有效地决高阶微分方程的求问题。在MATLAB中,使用四阶Runge-Kuta微分方程只需要简单的一些代码就可以实现。 使用四阶Runge-Kuta微分方程需要先写出微分方程,然后将其转化为一组一阶微分方程。具体而言,需要先将微分方程变形为y'=f(x,y),其中y是未知函数,x是自变量,f(x,y)是已知函数。然后使用四阶Runge-Kuta的公式进行求四阶Runge-Kuta公式如下: k1 = h*f(xn,yn) k2 = h*f(xn + 0.5*h, yn + 0.5*k1) k3 = h*f(xn + 0.5*h, yn + 0.5*k2) k4 = h*f(xn + h, yn + k3) yn+1 = yn + (k1 + 2*k2 + 2*k3 + k4)/6 其中h是步长,k1、k2、k3、k4是计算过程中中间变量,yn和yn+1是相邻两个时刻未知函数y的值,xn是对应的自变量x的值。在MATLAB中可以使用for循环来实现这一过程,具体代码如下: function [x,y] = rk4(f,x0,y0,h,xn) % 使用rk4方法计算微分方程y'=f(x,y)的 x = x0:h:xn; y = zeros(size(x)); y(1) = y0; for i = 1:length(x)-1 k_1 = h*f(x(i),y(i)); k_2 = h*f(x(i)+0.5*h,y(i)+0.5*k_1); k_3 = h*f(x(i)+0.5*h,y(i)+0.5*k_2); k_4 = h*f(x(i)+h,y(i)+k_3); y(i+1) = y(i) + (k_1+2*k_2+2*k_3+k_4)/6; end 其中f是自定义的函数句柄,用于表示微分方程y'=f(x,y),x0和y0是初值,xn是求区间末端点,h是步长。运行rk4函数并指定相应的参数即可求微分方程。 总之,四阶Runge-Kuta是一种实用的方法,通过简单的代码就可以实现高精度求微分方程的功能。在实际应用中,需要根据具体问题进行调整和优化,以达到更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ANAN永不败315

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值