MATLAB求解一阶微分方程数值解的方法

1.函数

[t,y]=solver( 'f( t, y )',[t0 tend],y0);

输入:

-solver:指代所有的⽅法调⽤。

-f(t,y):为M⽂件定义的微分⽅程 y' = f(x,y) 右端的函数,即使⽤不到两个参数,也要保留两个参数,且返回的结果应是列向量。

-[t0 tend]:为参数中变量 x / t 的取值范围。

-y0:为参数中 y 的初始值,要求为列向量。

输出:

-t:求值点。

-y:解,以数组形式返回。y中的每一行都与 t 的相应行中返回的值处的解相对应。

注:solver要替换成如下函数:


注:1.为节省文章篇幅,这里只列举两个常用函数,请根据下方链接查看所有函数。

https://ww2.mathworks.cn/help/matlab/math/choose-an-ode-solver.html?searchHighlight=ODE&s_tid=srchtitle_ODE_2
     2.求解出方程组的雅克比矩阵,如果矩阵中元素相差较大,则是刚性微分方程,否则就不是。或者可以绘制出自变量和因变量的二维平面图,观察图是否有发生突变,如果存在突变,则是刚性微分方程。

2.示例

例1


%例1
%求y+y'=3*x的数值解,初始值y(0)=5,x范围是[0,3]
%解析解为3*x + 8*exp(-x) - 3
%dsolve('y+Dy=3*x','y(0)=5','x')%解析解
[x,y]=ode45(@(x,y) 3*x-y,[0,3],5);%数值解%这里创建微分方程用的是函数句柄的方法,也可新建.m文件,如例2
%[x,y]=ode45(@(x,y) 3*x-y,[0:0.01:3],5);%x取值太少,可自定义x取值间隔
y1=3*x +8*exp(-x)-3;
plot(x,y,'r*',x,y1,'b+')
legend('数值解','解析解')




例2


首先新建一个aaa.m文件(函数名可自定义)


function dydx=aaa(t,y)
dydx=zeros(2,1);
dydx(1)=y(2);
dydx(2)=1/2*t*y(1);
end

再调用


%例2
%A=1,B=2
[t,y]=ode45('aaa',[0,5],[0,0.01]);%数值解
plot(t,y(:,1),'-o',t,y(:,2),'-.')





免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空