数值分析-常微分方程数值解法MATLAB实现

以数值分析教材-李红著

在书本的第五章 常微分方程的数值解法中的 例5.4 为题目的MATLAB实现

题目为带初值的常微分方程\left\{\begin{matrix} {y}'=1-\frac{2xy}{1+x^2},0\leq x\leq 2\\ y(0)=0 \end{matrix}\right.

题目要求使用显式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,曲线会更加光滑

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值