MATLAB學習筆記 常微分方程的數值解

2021-08-14 08:27:46 字數 1380 閱讀 2072

常微分方程數值求解的命令:

求常微分方程的數值解,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...