[Matlab科学计算] 四阶Runge-Kutta法解常微分方程

四阶Runge-Kutta法格式的详细推导请查找相关数值分析书籍,这里直接给出四阶Runge-Kutta法的经典格式和Matlab代码

                                                    \large {\color{Red} {\color{Red} }\left\{\begin{matrix} y_{n+1}=y_{n}+\frac{h}{6}\left ( K_{1}+2K_{2}+2K_{3}+K_{4} \right )\\ K1=f(x_{n},y_{n})\\ K_{2}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}K_{1}) \\ K_{3}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}K_{2})\\ K_{4}=f(x_{n}+h,y_{n}+hK_{3}) \end{matrix}\right.}

Matlab代码如下:自行修改常微分方程即可

%% 四阶Runge-Kutta法解常微分方程
% 待求解方程 y'= y-2x/y (0<x<1), y(0) = 1;
% 设步长 h = 0.1;
clc,clear
set(0,'defaultfigurecolor','w')
x0 = 0; %自变量初值
xn = 1; %自变量终值
y0 = 1; %因变量初值
h = 0.1; %步长
[x,y] = RungeKutta4(x0, xn, y0, h); %自定义4阶龙格库塔法
[x2,y2] = ode45(@fun, [0,1], y0);   %matlab内部函数
plot(x,y,'r.')
hold on
plot(x2,y2,'b')

function [x,y] = RungeKutta4(x0, xn, y0, h)
n = (xn-x0)/h;
x = zeros(n+1,1);
y = zeros(n+1,1);
x(1) = x0;
y(1) = y0;
for i = 1:n
   x(i+1) = x(i)+h;
   K1 = fun(x(i), y(i));
   K2 = fun(x(i)+h/2, y(i)+K1*h/2);
   K3 = fun(x(i)+h/2, y(i)+K2*h/2);
   K4 = fun(x(i)+h, y(i)+K3*h);
   y(i+1) = y(i)+h/6*(K1+2*K2+2*K3+K4);
end
end

function f = fun(x,y)
f = y-2*x/y;
end

结果如下图所示,可以看出自编函数计算结果与matlab内部函数计算结果基本相同

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值