2022 05月22日
作者: 小白哥
  • 浏览: 505
  • 收藏:0
  • 点赞:0
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要替换成如下函数:

求解器(函数)问题类型精度何时使用
ode45非刚性大多数情况下,您应当首先尝试求解器 ode45。
ode15s刚性低到中若 ode45 失败或效率低下并且您怀疑面临刚性问题,请尝试 ode15s。此外,当解算微分代数方程 (DAE) 时,请使用 ode15s。

注: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('数值解','解析解')

1.jpg
可以看到数值解和解析解基本一致。

例2

3.jpg,其中A=1,B=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),'-.')

2.jpg

MATLAB一阶微分方程数值解.rar



  

发表评论

评论列表


没有评论

筛选

文章分类

热门文章

企业招聘网址

2023-12-07  浏览:3028次

BC1.2协议介绍

2023-06-14  浏览:2929次

USB2.0速度识别

2023-10-23  浏览:1355次