天天看點

matlab解微分方程

1.dsolve函數

這是最簡單的一種求解微分方程的一種方法-符号解法。一般來說,在matlab中解常微分方程有兩種方法,一種是符号解法,另一種是數值解法。在大學階段的微分數學題,基本上可以通過符号解法解決。

用matlab解決常微分問題的符号解法的關鍵指令是dslove指令。該指令中可以用D表示微分符号,其中D2表示二階微分,D3表示三階微分,以此類推。值得注意的是該微分預設是對自變量t求導,也可以很容易在指令中改為對其他變量求導。

①求解析解

y’‘= a*y+ bx;

s = dsolve('D2y=a*y+b*x','x');

D2y用以表示y的二階導數,預設是以t為自變量的,是以最好指明自變量為x.

②初值問題

y’ = y – 2*t / y , y(0) = 1;

s = dsolve('Dy == y - 2*t / y','y(0) ==1');

③邊值問題

x*y’’ – 3*y’ = x^2 , y(1) = 0 , y(5) = 0;

s = dsolve('x*D2y - 3*Dy ==x^2','y(1)=0','y(5) == 0','x');

函數最後一個參數指明自變量為x.

④高階方程

求解y’’ = cos(2x) – y , y(0) = 1 , y’(0) = 0;

s=dsolve('D2y == cos(2*x) - y','y(0) =1','Dy(0) = 0','x');

simplify(s);

⑤方程組問題

f’ = f + g , g’ = -f + g,f(0) = 1, g(0) =2;

[f,g]= dsolve('Df == f + g','Dg = -f + g','f(0)==1','g(0) == 2','x');

另外,對于常系數線性微分方程,尤其是高階線性常系數微分方程可用特征根法求得相應齊次微分方程的基本解,再用常數變易法求特解。

如:

求x'' + 0.2x' +3.92x = 0的通解

解: 特征方程為:x^2 + 0.2x + 3.92 = 0

roots( [ 1 0.2 3.92 ] )  
           

然後求出來繼續做就好啦。

2.ode45

常用格式 [ t , y ] = ode45( odefun , tspan , y0 )

odefun 用以表示f(t,y)的函數句柄或inline函數i,t是标量,y是标量或向量
tspan 若是二維向量[t0,tf],表示自變量初值t0和終值tf;若是高維向量[t0,t1,...,tn],則表示輸出結點列向量
y0 初值向量y0
t 表示結點列向量(t0,t1,...,tn)^T
y 數值解矩陣,每一列對應y的一個分量

ode是最常用的求解微分方程的指令,它采用變步長四、五階Runge-Kutta-Felhberg法适合高精度問題,ode23與ode45類似,隻是精度低一些。

如:

matlab解微分方程

1. 建立一個函數檔案eq2.m,在函數檔案中描述這個解的微分方程組:

%eq2.m檔案
%描述微分方程組

function dy=eq2(t,y) 
 %說明微分變量是二維的,令y(1)=x,y(2)=y
dy=zeros(2,1); 
%微分方程組
dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2);
dy(2)=5*(1-y(2))/sqrt((1-y(1))^2+(t-y(2))^2);
end
           

2.外部調用ode45函數求解微分方程組:

[t,y]=ode45(@eq2,[0,2],[0,0]);
           

ode45函數說明:第一個參數是方程的名稱,第二個參數是指求解時t的範圍,第三組參數是指y中每個元素的初值。

[t,y]=ode45(@eq2,[t1,t2],[y1(0),y2(0)]);

這部分來自于http://blog.csdn.net/qq_28093585/article/details/70276454。

繼續閱讀