matlab求解常微分方程


本文主要介紹matlab中求解常微分方程(組)的dsolve和ode系列函數,並通過例子加深讀者的理解。

一、符號介紹

   D: 微分符號;D2表示二階微分,D3表示三階微分,以此類推。

二、函數功能介紹及例程

1、dsolve 函數

dsolve函數用於求常微分方程組的精確解,也稱為常微分方程的符號解。如果沒有初始條件或邊界條件,則求出通解;如果有,則求出特解。

1)函數格式  

Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)

其中,‘eq1,eq2,…’:表示微分方程或微分方程組;

            ’cond1,cond2,…’:表示初始條件或邊界條件;

            ‘Name’:表示變量。沒有指定變量時,matlab默認的變量為t;

2)例程

例1.1(dsolve 求解微分方程)

求解微分方程:

  

 

dsolve('Dy=3*x^2','x') 

 

 

 

例1.2(加上初始條件)

求解微分方程:

 

例2(dsolve 求解微分方程組)

求解微分方程組: 

 

由於x,y均為t的導數,所以不需要在末尾添加’t’。

 

 

 

2、ode函數

在上文中我們介紹了dsolve函數。但有大量的常微分方程,雖然從理論上講,其解是存在的,但我們卻無法求出其解析解,此時,我們需要尋求方程的數值解。

ode是Matlab專門用於解微分方程的功能函數。該求解器有變步長(variable-step)和定步長(fixed-step)兩種類型。不同類型有着不同的求解器,具體說明如下圖。 

其中,ode45求解器屬於變步長的一種,采用Runge-Kutta算法;其他采用相同算法的變步長求解器還有ode23。ode45表示采用四階-五階Runge-Kutta算法,它用4階方法提供候選解,5階方法控制誤差,是一種自適應步長(變步長)的常微分方程數值解法,其整體截斷誤差為(Δx)^5。解決的是Nonstiff(非剛性)常微分方程。

ode45是解決數值解問題的首選方法,若長時間沒結果,應該就是剛性的,可換用ode15s試試。

下面將以ode45為例具體介紹函數的使用方法。

1)函數格式  

[T,Y] = ode45(‘odefun’,tspan,y0)

[T,Y] = ode45(‘odefun’,tspan,y0,options)

[T,Y,TE,YE,IE] = ode45(‘odefun’,tspan,y0,options)

sol = ode45(‘odefun’,[t0 tf],y0...)

其中: odefun是函數句柄,可以是函數文件名,匿名函數句柄或內聯函數名;

          tspan 是求解區間 [t0 tf],或者一系列散點[t0,t1,...,tf];

          y0 是初始值向量

          T 返回列向量的時間點

          Y 返回對應T的求解列向量

          options 是求解參數設置,可以用odeset在計算前設定誤差,輸出參數,事件等

           TE 事件發生時間

           YE 事件發生時之答案

            IE 事件函數消失時之指針i

2)微分方程標准化

利用ode45求解高階微分方程時,需要做變量替換。下面說明替換的基本思路。

微分方程為

 

初始條件

 

首先做變量替換 

 

原微分方程可以轉換為下面的微分方程組的格式:

 

下面就可以利用轉換好的微分方程組來編寫odefun函數。

3)例程

 

在matlab中新建腳本文件,編寫函數如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM