(這里的內容是作為自己的一個粗略的總結,不確定是否正確,希望有大佬能夠更明確的指出其中的錯誤,作出指導)
對於剛性和非剛性微分方程的區分,可以簡單的轉變為在將原方程轉換為常微分方程組后,進行一個簡單的系數判斷:
例如:
y''' - 3y'' - y'y = 0, y(0) = 0, y'(0) = 0, y''(0) = -1;
在這里可以設 y1 = y, y2 = y', y3 = y'', 有
y1' = y2, y1(0) = 0,
y2' = y3, y2(0) = 1,
y3' = 3y3 + y2y1, y3(0) = -1,
這里可以簡單判斷出方程組的右側系數矩陣值差異不大,得到的特征值差異隨之也不大,可以簡單判斷為非剛性微分方程。
MATLAB中解非剛性微分方程常用 ode45 ;
又例如:
y'' - 1000(1 - y^2)y' + y = 0, y(0) = 2, y'(0) = 0;
在這里可以設y1 = y, y2 = y', 有
y1' = y2, y1(0) = 2,
y2' = 1000(1 - y1^2)y2 - y1, y2(0) = 0,
這里可以簡單判斷出方程組的右側系數矩陣值差異較大,得到的特征值差異隨之較大,可以簡單判斷為剛性微分方程。
MATLAB中解剛性微分方程常用 ode15s , ode23s , ode23t , ode23tb ;
對於所有的初值問題解方程方法均有 solver( 'f( t, y )' , [t0 tend], y0 ) :
--solver : 指代所有的方法調用;
--f( t, y ) : 為M文件定義的微分方程 y' = f(x, y) 右端的函數, 即使用不到兩個參數,也要保留兩個參數,且返回的結果應是列向量;
--[t0 tend] : 為參數中變量 x / t 的取值范圍;
--y0 : 為參數中 y 的初始值,要求為列向量
