MATLAB常微分方程

2021-02-19 校苑數模

4.8  微分方程

微分方程是數值計算中常見的問題,MATLAB提供了多種函數來計算微分方程的解。

4.8.1  常微分方程

眾所周知,對一些典型的常微分方程,能求解出它們的一般表達式,並用初始條件確定表達式中的任意常數。但實際中存在有這種解析解的常微分方程的範圍十分狹窄,往往只局限在線性常係數微分方程(含方程組),以及少數的線性變係數方程。對於更加廣泛的、非線性的一般的常微分方程,通常不存在初等函數解析解。由於實際問題求解的需要,求近似的數值解成為了解決問題的主要手段。常見的求數值解的方法有歐拉折線法、阿當姆斯法、龍格-庫塔法與吉爾法等。其中由於龍格-庫塔法的精度較高,計算量適中,所以使用的較廣泛。

數值解的最大優點是不受方程類型的限制,即可以求任何形式常微分方程的特解(在解存在的情況下),但是求出的解只能是數值解。

1.龍格-庫塔方法簡介

對於一階常微分方程的初值問題,在求解未知函數時,在點的值是已知的,並且根據高等數學中的中值定理,應有:

一般而言,在任意點,有:

當確定後,根據上述遞推公式能算出未知函數在點的一列數值解:

當然在遞推的過程中同樣存在著一個誤差累計的問題,實際計算中的遞推公式一般都進行過改造,龍格-庫塔公式為:

其中:

2.龍格-庫塔法的實現

基於龍格-庫塔法,MATLAB提供了ode系列函數求常微分方程的數值解。常用的有ode23 和ode45函數,其調用語法如下。

(1)[t,y]=ode23(filename,tspan,y0):採用了二階、三階龍格-庫塔法進行計算。

(2)[t,y]=ode45(filename,tspan,y0):採用了四階、五階龍格-庫塔法進行計算。

其中filename是定義f(t,y)的函數文件名,該函數文件必須返回一個列向量。tspan的形式為[t0,tf],表示求解區間。y0是初始狀態列向量。t和y分別給出時間向量和相應的狀態向量。

這兩個函數分別採用了二階、三階龍格-庫塔法和四階、五階龍格-庫塔法,並採用自適應變步長的求解方法,即當解的變化較慢時採用較大的步長,從而使得計算的速度很快;當解的變化較快時步長會自動地變小,從而使得計算的精度很高。

【例4-45】  設有初值問題:

試求其數值解,並和精確解相比較,精確解為()。

首先要建立微分方程所對應的函數文件myodefun.m,文件內容如下:

function y=myodefun(t,y)                      

%  建立函數文件myodefun.m

y=(y^2-t-2)/(4*(t+1));

建立myodefun函數之後,就可以調用ode23函數求解微分方程。

>> t0=0;

>> tf=10;

>> y0=2;

>> [t,y]=ode23 ('myodefun',[t0,tf],y0);       %  求數值解

>> y1=sqrt(t+1)+1;                              %  求精確解

>> plot(t,y,'k.',t,y1,'r')

通過圖形比較,數值解用黑色圓點表示,精確解用紅色實線表示,如圖4-13所示。

【例4-46】  求下面無勁度系統微分方程組的數值解。

為了求解方程,首先要建立方程的m文件。本例中不妨建立名為rigid.m的函數文件,此文件用以描述給出的方程組,文件的內容如下:

function dy = rigid(t,y)

dy = zeros(3,1);                 %  一個列向量

dy(1) = y(2) * y(3);

dy(2) = -y(1) * y(3);

dy(3) = -0.51 * y(1) * y(2);

本例中,我們通過odeset函數對誤差進行控制,另外在時間[0 12]進行求解,0時刻初始條件向量為[0 1 1]。

>> options =odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);%  誤差控制

>> [T,Y] = ode45(@rigid,[0 12],[0 11],options);               %  求數值解

>>plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')               %  繪製結果圖

得到的結果如圖4-14所示。

  

圖4-13  常微分方程結果圖 

圖4-14  常微分方程數值

相關焦點

  • 用MATLAB巧解微分方程實例分析
    大二選了matlab課,感覺這玩意兒tql(太強了),然後突發奇想,用這軟體不恰可以撫慰我那被微分方程傷害了的幼小得心靈嘛。說弄就弄:解決我們的微分方程就要用到dsolve()這個重要的函數。其完整形式為:dsolve(『eqn』,』cond』,』var』)沒接觸過matlab的小兄弟可能看著有點懵,這是啥。暫且聽我慢慢道來:eqn代表微分方程,cond代表初始條件(無初始條件可以預設),var代表微分方程中的自變量(默認為t)。對了,重要的一階導,二階導,等高階導怎麼表示呢?別著急,也很簡單。
  • 時滯微分方程的matlab解法
    有位小夥伴在matlab編程愛好者(群號:531421022)群中問道有關時滯微分方程的matlab
  • 2019數學建模國賽|Matlab 求解微分方程(組)
    1.在 Matlab 中,用大寫字母 D 表示導數,Dy 表示 y 關於自變量的一階導數,D2y 表示 y 關於自變量的二階導數,依此類推.函數 dsolve 用來解決常微分方程(組)的求解問題,調用格式為            X=dsolve(『eqn1』,』eqn2』,…)如果沒有初始條件,則求出通解,如果有初始條件,則求出特解系統預設的自變量為
  • 帶你用matlab輕鬆搞定微分方程
    考慮大多數讀者對微分方程求解方法比較陌生,所以過冷水本期簡單普及一下微分方程的求解問題。關於微分方程你需要了解:含有未知的函數及其某些階的導數以及其自變量本身的方程稱為微分方程。如果未知函數是一元函數,則稱為常微分方程。如果未知函數是多元函數,則稱為偏微分方程。聯繫一些未知函數的一組微分方程稱為微分方程組。
  • 偏微分方程(組)的數值解法介紹
    在每個點上將偏微分方程的微分項用合適的差商代替,從而將偏微分方程轉換為代數形式的差分方程,每個節點的差分方程組合在一起就構成了一個代數方程組,我們利用初始值和邊界條件,即可求解代數方程組的解,獲取每個節點的變量值,即偏微分方程的數值解。例如針對如下的橢圓形偏微分方程中偏微分項
  • MATLAB建模實例——微分方程
    ❞1 微分方程的解析解求微分方程(組)的解析解命令:dsolve(『方程1』,『方程2』,…『方程n』,『初始條件',『自變量』)記號: 在表達微分方程時,用字母D表示求微分,D2、D3等表示求高階微分.任何D後所跟的字母為因變量,自變量可以指定或由系統規則選定為確省。
  • 常微分方程
    >(3)n解齊次線性微分方程的所有解構成一個n維的線性空間(4)基本解組的以任意常數為係數的線性組合構成齊次線性微分方程的通解(5)非齊次線性微分方程的通解可以表示為它的一個特解與它對應的齊次線性微分方程的通解之和(6)線性微分方程的通解包含了這個方程的所有解2.
  • 微分方程重點一:常係數齊次線性微分方程
    微分方程前面的都是一些基礎,如果是一些和其他題型結合在一起的題目的話,可能會考前面的微分方程內容,比如說求知道函數的全微分,讓求原函數這類的。但是如果微分方程考大題的話,就是考二階常係數非齊次線性微分方程了。之前講的微分方程解的結構是基礎,主要是為了說明做題時我們需要求什麼。
  • MATLAB常微分方程數值求解
    有一類常微分方程,其解的分量有的變化很快,有的變化很慢,且相差懸殊,這就是所謂的剛性問題 (Stiff) 。對於剛性問題,數值解算法必須取很小步長才能獲得滿意的結果,導致計算量會大大增加。解決剛性問題需要有專門方法。
  • 常微分方程的級數解
    如果方程中只含有對未知函數的一個自變量的導數,這個方程就被稱為常微分方程,如果方程中含有對未知函數的多個自變量的導數,這個方程就是偏微分方程。求解微分方程的基礎是求解常微分方程,含有任意個自變量的偏微分方程可以通過某種途徑轉化成多個常微分方程。在常微分方程中,最常見的是二階常微分方程,即含有對未知函數的自變量求二階導數的微分方程。
  • 微分方程有限元解法——有限差分法&加權殘值法
    在每個點上將偏微分方程的微分項用合適的差商代替,從而將偏微分方程轉換為代數形式的差分方程,每個節點的差分方程組合在一起就構成了一個代數方程組,我們利用初始值和邊界條件,即可求解代數方程組的解,獲取每個節點的變量值,即偏微分方程的數值解。例如針對如下的橢圓形偏微分方程中偏微分項
  • 常微分方程真題講解
    1.理解常微分方程的概念,理解常微分方程的階、解、通解、初始條件和特解的概念。(二)二階常係數線性微分方程      2.會求解二階常係數齊次線性微分方程。注意:熟記通解的結構公式對於準確快速答題至關重要,更多一階微分方程內容請查看往期推送:常微分方程考點(1):一階常微分方程.
  • 描述物質運動變化的數學學科:常微分方程、偏微分方程
    常微分方程如果微分方程中出現的未知函數只含一個自變量,那麼該類微分方程就是常微分方程。常微分方程的通解構成一個函數族,主要研究方程或方程組的分類及解法、解的存在性和唯一性、奇解、定性理論等等內容。常微分方程的發展經歷了幾個階段:將求通解作為微分方程的主要目標,因為只要求出通解的表達式,那麼解的性質等問題都將迎刃而解;實際的研究發現,在實際中大部分情況是不能夠求出通解的,於是研究重點轉移到定解問題上來。微分方程基本問題的解決:解的存在和唯一性定理;由於大部分的常微分方程求不出解析解,而只能求近似解。
  • MATLAB偏微分方程
    4.8.2  偏微分方程在自然科學的很多領域內,都會遇到微分方程初值問題,特別是偏微分方程,它的定解問題是描述自然界及科學現象的最重要的工具
  • 常微分方程第三版答案
    《常微分方程(第3版)》是原中山大學數學力學系常微分方程組編《常微分方程》1978年初版及1983年第二版後的新修訂版。考慮到二十多年科學技術的發展,除儘量保持原書結構與易學易教的特點外,在教學時數不增加及內容可選的前提下,適當補充應用實例、非線性內容及計算機應用,包括分支、混沌、哈密頓方程、數值解等;並增加數學軟體在常微分方程中應用作為附錄;同時在緒論中簡單介紹了常微分方程的發展歷史和在數學中的地位,書後附習題答案及參考文獻。
  • Matlab/Simulink建模詳解:一階時變偏微分方程的求解
    Matlab/Simulink建模詳解:一階時變偏微分方程的求解 這一次日篤小編來教大家如何在simulnk裡面,求解偏微分方程(Partial Differential Equation-PDE)。646128.400323336    650767.764378679    654999.936793652]上述三個方程式代表的是有限體積法中一個小單元的方程,小編把很多個小單元依次連接起來,重複求解上述方程就能夠得到解。
  • 微分方程重點二:常係數非齊次線性微分方程
    小編在之前的文章:微分方程重點一中講了常係數齊次線性微分方程的內容。那是微分方程難點的一半,接下來的內容是另外一半。讓我們在講解之前,先來對一下答案。題目在微分方程重點一:常係數齊次線性微分方程中。接下來就是講微分方程的最後一個重點了,也是考試微分方程中最後的部分了,不過既然是最後一部分,那麼就有最後一部分的難。這部分主要講的就是求特解,這也是這裡的難點。
  • Matlab解常微分方程
    今天梳理一下Matlab中常用的求解微分方程的方法,我們知道計算機是處理不了連續的,所以要求解一個連續的微分方程,我們一般都是先離散化,求的其實是近似解
  • 2017考研高數六大基本題型:微分方程解常微分方程
    新東方網>大學教育>考研>複習指導>數學>正文2017考研高數六大基本題型:微分方程解常微分方程 2016-10-26 16:48 來源:新東方網整理
  • 隱式常微分方程擬合求解
    1stOpt可以很容易處理常微分方程擬合求解問題,書寫代碼也與一般的擬合代碼無太大區別,除了用「ODEFunction」代替「Function」。