MATLAB求一階微分方程數(shù)值解
e小白網(wǎng)址:www.e-xiaobai.com
1.函數(shù)
[t,y]=solver( 'f( t, y )',[t0 tend],y0);
輸入:
-solver:指代所有的?法調(diào)?。
-f(t,y):為M?件定義的微分?程 y' = f(x,y) 右端的函數(shù),即使?不到兩個(gè)參數(shù),也要保留兩個(gè)參數(shù),且返回的結(jié)果應(yīng)是列向量。
-[t0 tend]:為參數(shù)中變量 x / t 的取值范圍。
-y0:為參數(shù)中 y 的初始值,要求為列向量。
輸出:
-t:求值點(diǎn)。
-y:解,以數(shù)組形式返回。y中的每一行都與?t?的相應(yīng)行中返回的值處的解相對(duì)應(yīng)。
注:solver要替換成如下函數(shù):

注:1.為節(jié)省文章篇幅,這里只列舉兩個(gè)常用函數(shù),請(qǐng)根據(jù)下方鏈接查看所有函數(shù)。
https://ww2.mathworks.cn/help/matlab/math/choose-an-ode-solver.html?searchHighlight=ODE&s_tid=srchtitle_ODE_2
? ? ?2.求解出方程組的雅克比矩陣,如果矩陣中元素相差較大,則是剛性微分方程,否則就不是?;蛘呖梢岳L制出自變量和因變量的二維平面圖,觀察圖是否有發(fā)生突變,如果存在突變,則是剛性微分方程。
2.示例
例1
%例1
%求y+y'=3*x的數(shù)值解,初始值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);%數(shù)值解%這里創(chuàng)建微分方程用的是函數(shù)句柄的方法,也可新建.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('數(shù)值解','解析解')

例2

首先新建一個(gè)aaa.m文件(函數(shù)名可自定義)
function dydx=aaa(t,y)
dydx=zeros(2,1);
dydx(1)=y(2);
dydx(2)=1/2*t*y(1);
end
再調(diào)用
%例2
%A=1,B=2
[t,y]=ode45('aaa',[0,5],[0,0.01]);%數(shù)值解
plot(t,y(:,1),'-o',t,y(:,2),'-.')

標(biāo)簽: