matlab中使用ode方法解范德波尔微分方程的数值解

微分方程的解析解要求比较严苛,只有在特定的条件下才能写出解析解表达式,而在现实的科研问题当中,绝大多数情况我们会采用数值解(numeric solution)的方法来求解微分方程。这个时候就要用到ode方法了,ode是常微分方程英文名ordinary differential equation的缩写。我们将通过范德波尔方程为例演示求解的过程。大致可以分为2步:列方程和解方程。
一、列方程。
范德波尔方程用数学表达式可以写成一下形式:
在这里插入图片描述
由常微分理论可知,列方程需要给出两个条件
1.方程式:即带有未知数的等式
2.初始值:初始值不一样,解也不一样,这是解方程必须给出的数据。理论研究的时候,我们可以用C来表示常量,但是在做数值解的时候,必须给出具体的数值,比如上式中的2,0

如何把上面的数学表达式呢,需要在matlab中编写函数,本例中的范德波尔如下,特别要注意的是y和dy代表的意义,在代码的注释中有详细的解释:

function dy = vdp1000(t,y) %这个似乎是规定的范式,要记住,其中y是代表函数的解,y(1)就是需要求的解y,y(2)是y的微分y',相当于y(n)'=y(n+1)
dy = zeros(2,1); %作为函数返回值的列向量,我猜测里面存储的是解函数的微分,dy和y的区别在于相同索引的dy和y差一个微分d,相当于dy(1)=y(1)'=y(2)
dy(1)=y(2); %dy(1)存储的的是y',可以简单记忆dy(1)=y',dy(2)=y'',y(n)=dy(n-1)=y的n-1个'
dy(2)=1000*(1-y(1)^2)*y(2)-y(1); %注意到方恒的左边都是关于dy(n)的表达式,右边都是关于y(n)的表达式
end

二、解方程
在matlab中,我们使用ode系列方法来解方程,ode方法有很多,对于非刚性问题,我们可以使用ode45/ode23/ode113等方法,对于刚性问题,我们使用ode15s/ode23s/ode23t/ode23t等,对于范德波尔方程,我们使用ode15s来进行求解,代码如下。
注意方法的参数包括:方程@开头的句柄,求解时间范围tspan,以及解的初始值,具体的解释在代码的注释中有详细的说明

[T,Y] = ode15s(@vdp1000,[0 3000],[2,0]); %T和Y表示解,也就是Y关于T的函数,@vdp1000表示微分方程句柄,可以认为是方程的名字,比如这里就是范德波尔方程,[0,3000]代表的是时间范围,也就是限定了区间,显然区间越大,计算量越大,所以要想清楚自己要哪一段的数据,给多了也没用。[2,0]表示的是解的初始值,因为初始值不一样,解也不一样,这是解方程必须给出的数据。这里给出了两个初始值,2表示y的初始值,0表示dy的初始值。
plot(T,Y(:,1),'o')

我们在运行之后可以得到这个方程解的图像如下:
范德波尔方程数值解的图像
这样我们就完成了matlab中使用ode方法解范德波尔微分方程的数值解的任务。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值