学习笔记2 微分方程的求解

常微分方程的求解——符号解和数值解,大多数常微分方程符号解不可求,更多的是求解数值解


前言

文章包含常微分方程的数值解和符号解以及画图的简单代码


一、常微分方程的符号解

使用函数dsolve()进行求解,对于画图,直接plot()就好

1.一阶微分方程

clc,clear,syms y(x)%此处定义函数y(x)
%假设求解的函数是y'=y+x^2
y=dsolve(diff(y)==y+x^2,y(0)==1);%注意给函数赋初值

2.二阶线性微分方程

高阶微分方程求法与该处方法相似,定义各阶导数即可

clc,clear,syms y(x)%此处定义函数y(x),与上面相同
%假设求解的函数是y''-2y'+y=exp(x)
dy=diff(y);%定义一阶导数,为了赋初值
y=dsolve(diff(y,2)-2*diff(y)+y==exp(x),y(0)==1,dy(0)==-1);%注意一定要赋初值,此外diff(y,2)是指其二阶导数

最后补充一点,如果想要在求符号解时引入pi,最好将其写为sym(pi)以得到理想结果

3.微分方程组

%列举一个简单的方程组其他的类似
clc,clear,syms f(x) g(x)%注意定义函数
df=diff(f);%还是那句话,这一步是为了赋初值,g'(x)没有初值,不必设置
[s1,s2]=dsolve(diff(f,2)+g==3,diff(g)+diff(f)==1,df(1)==0,f(0)==0,g(0)==0)
%其中s1,s2分别为解

二、常微分方程的数值解

有刚性方程和非刚性方程,日后再补充
采用ode45()求解

1.一阶微分方程

clc,clear,close all
%采用前面的求数值解时使用的函数y'=y+x^2
dy=@(x,y) y+x^2;%定义匿名函数
[sx,sy]=ode45(dy,[0,0.5],1)%此处[0,0.5]为x的取值范围,1为初值
plot(sx,sy,'.')%plot()绘制函数解的图形

最后再绘图中若想要表明x和y坐标可以加上

xlabel('$x$','Interpreter','Latex');
ylabel('$y$','Interpreter','Latex','Rotetion',0);

2.二阶微分方程

同样的举例说明
对此,引入y(1)=y, y(2)=y’,则前面的求数值解时使用的函数求解如下所示

clc,clear,close all
dy=@(x,y)[y(2),2*y(2)+y(1)+exp(x)];
[x,y]=ode45(dy,[0,0.999999],[1,-1])%注意赋初值
plot(x,y(:,1));%注意y(:,1)
xlabel('$x$','Interpreter','Latex');
ylabel('$y$','Interpreter','Latex','Rotetion',0);

3.微分方程组

使用一个简单的方程组来说明
x’=-x^3-y, x(0)=1
y’=x-y^3, y(0)=0.5
0<=t<=30

clc,clear,close all
eq=@(t,z)[-z(1)^3-z(2);z(1)-z(2)^3];%z(1)=x,z(2)=y
s=ode45(eq,[0,30],[1;0.5])
fplot(@(t)deval(s,t,1),[0,30])%绘制x(t)
hold on
fplot(@(t)deval(s,t,2),[0,30])%绘制y(t)

写在最后

对于微分方程建模,注意Logistic模型和传染病预测模型这两个入门级的模型

总结

本文简单介绍了微分方程的求解及其结果的绘图,亦包括Logistic模型的简单介绍

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值