以数值分析教材-李红著
在书本的第五章 常微分方程的数值解法中的 例5.4 为题目的MATLAB实现
题目为带初值的常微分方程
题目要求使用显式Eular,隐式Eualr,以及经典的R-K算法实现该带初值的常微分方程的数值解法
下面是MATLAB实现该题目
clc
clear
%% Initial Value
h=0.5;
x=0:h:2;
y=zeros(size(x));
y(1)=0;
%% explict Eular
for i=1:size(y,2)-1
fexEular=ode(x(i),y(i));
y(i+1)=y(i)+h*fexEular;
end
plot(x,y)
hold on
%% implict Eular
for i=1:size(y,2)-1
k1=ode(x(i),y(i));
k2=ode(x(i)+h,y(i)+h*k1);
y(i+1)=y(i)+h*(k1+k2)/2;
end
plot(x,y);
hold on
%% RK4
for i=1:size(y,2)-1
k1=ode(x(i),y(i));
k2=ode(x(i)+0.5*h,y(i)+0.5*h*k1);
k3=ode(x(i)+0.5*h,y(i)+0.5*h*k2);
k4=ode(x(i)+h,y(i)+h*k3);
y(i+1)=y(i)+h*(k1+2*k2+2*k3+k4)/6;
end
plot(x,y);
hold on
%% function -ODE
function f=ode(x,y)
f=1-2*x*y/(1+x^2);
end
下图是绘制的曲线图
若步长减少为0.01,曲线会更加光滑