常微分方程數值求解的命令:
求常微分方程的數值解,matlab的命令格式為:
[t,y]=solver('odefun',tspan,y0,options)
其中solver選擇ode45等函式名,odefun為根據待解方程或方程組編寫的m檔名,tspan為自變數的區間[t0,tf],即準備在那個區間上求解,y0表示初始值,options用於設定誤差限制。命令格式為:
options=odeset('reltol',rt,'abstol',at)
rt輸入相對誤差,at輸入絕對誤差。
常用的函式:
函式名簡介
適用物件
ode45
單步,4/5階龍格庫塔法
大部分ode
ode23
單步,2/3階龍格庫塔法
快速、精度不高的求解
0de113
多步,adams演算法
誤差要求嚴格或計算複雜
注:上述函式僅適用於非剛性方程(組)。
函式名簡介
適用物件
ode23t
採用梯形演算法
具有一定的剛性特點
ode15s
多步,反向數值積分法
ode45失效時可以使用
ode23s
單步,2階rosebrock演算法
精度設定較低時,速度快
ode23tb
採用梯形演算法
精度設定較低時,速度快
例1:函式的m檔案:
function dx=human(t,x)
dx=0.05*x;
使用命令:
>> [t,x]=ode45('human',[0,100],1000);
>> plot(t,x)
>> hold on
>> x=1000*exp(0.05*t);
>> plot(t,x,'*')
繪圖比較真實解和數值解。
例2:函式的m檔案:
function dx=compete(t,x)
dx=zeros(2,1);
dx(1)=0.01*x(1)*(1-x(1)/50000-0.1*x(2)/60000);
dx(2)=0.02*x(2)*(1-0.2*x(1)/50000-x(2)/60000);
使用命令:
>> [t,x]=ode45('compete',[0,500],[10,10]);
>> plot(t,x(:,1),t,x(:,2))
>> plot(x(:,1),x(:,2))
常微分方程
微分方程這裡,感覺難度明顯上來了。核心思路,消去微分 分離變數法,想方設法分離變數 齊次微分方程 對於無法直接分離變數的方程,如果是y和x的次數一樣,並且不含常數項。可以可以化為齊次,變數代換求解 一階線性微分方程 常數變易法。常數變易法我覺得關鍵是變和易,因為先當作乙個常數0,是比較容易解決的。然...
常微分方程的數值解法系列一 常微分方程
在慣性導航以及vio等實際問題中利用imu求解位姿需要對imu測量值進行積分得到需要的位置和姿態,其中主要就是求解微分方程。但之前求解微分方程的解析方法主要是應用於一些簡單和特殊的微分方程求解中,對於一般形式的微分方程,一般很難用解析方法求出精確解,只能用數值方法求解。該系列主要介紹一些常用的常微分...
常微分方程數值解上機
二步顯式 adams 法和gear 法求解,y 0 1,步長分別為h 0.1和h 0.05 1.程式文字 二步顯式 adams法 clc y 1 1 h 0.1 y 2 y 1 2 h y 1 3 h n 1 h fori 2 n y i 1 y i 3 h y i h y i 1 3 h endt...