MATLAB学习笔记:常微分方程的数值解

常微分方程数值求解的命令:

求常微分方程的数值解,MATLAB的命令格式为:

[t,y]=solver('odefun',tspan,y0,options)

其中solver选择ode45等函数名,odefun为根据待解方程或方程组编写的m文件名,tspan为自变量的区间[t0,tf],即准备在那个区间上求解,y0表示初始值,options用于设定误差限制。命令格式为:

options=odeset('reltol',rt,'abstol',at)

rt输入相对误差,at输入绝对误差。

常用的函数:

函数名简介适用对象
ode45单步,4/5阶龙格库塔法大部分ODE
ode23单步,2/3阶龙格库塔法快速、精度不高的求解
0de113多步,Adams算法误差要求严格或计算复杂

注:上述函数仅适用于非刚性方程(组)。

函数名简介适用对象
ode23t采用梯形算法具有一定的刚性特点
ode15s多步,反向数值积分法ode45失效时可以使用
ode23s单步,2阶Rosebrock算法精度设定较低时,速度快
ode23tb采用梯形算法精度设定较低时,速度快


例1:

函数的M文件:

function dx=human(t,x)
dx=0.05*x;

使用命令:

>> [t,x]=ode45('human',[0,100],1000);
>> plot(t,x)
>> hold on
>> x=1000*exp(0.05*t);
>> plot(t,x,'*')

绘图比较真实解和数值解。

例2:

函数的M文件:

function dx=compete(t,x)
dx=zeros(2,1);
dx(1)=0.01*x(1)*(1-x(1)/50000-0.1*x(2)/60000);
dx(2)=0.02*x(2)*(1-0.2*x(1)/50000-x(2)/60000);

使用命令:
 

>> [t,x]=ode45('compete',[0,500],[10,10]);
>> plot(t,x(:,1),t,x(:,2))
>> plot(x(:,1),x(:,2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Encarta1993

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

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

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

打赏作者

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

抵扣说明:

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

余额充值