MATLAB巧解微分方程實例分析
王少華 西安電子科技大學
微分方程求解難,
字母一堆看著煩。
寫錯數字一時爽,
一直寫錯一直爽。
還記得那是大一第一學期快結束了,學到微分方程那了,學時挺高興的,看老師那刷刷地,那麼長的方程半個黑板就解完了,黑板上那叫一個主次分明,結構清晰,什麼特徵方程,齊次通解,非齊次特解,然後倆一加就是非齊次通解。心想挺簡單的嘛。(後來自己算時才知道什麼叫「真香」)
回去有作業題,第一道是齊次微分方程,立刻換元,化成可分離變量的微分方程,一會兒結果就出來了。然後就是一道二階非齊次常係數線性微分方程,那不就是死套路嘛,照著解不就行了。提筆算來,算起雖然繁瑣,但好歹多半張演算紙還是算出來了,一對答案,不對。emmmm,頓時眉頭一皺,提筆再算一遍。一會兒,對答案,不僅和答案不一樣,和第一次算出來得也不一樣,這就有點酸爽了,算第三遍時,心就有點著急了,這怎麼就算不對呢?越想越著急,越著急,式子寫得越亂,然後那兩個小時就基本上沒幹其他事了。
大二選了matlab課,感覺這玩意兒tql(太強了),然後突發奇想,用這軟體不恰可以撫慰我那被微分方程傷害了的幼小得心靈嘛。
說弄就弄:
解決我們的微分方程就要用到dsolve()這個重要的函數。其完整形式為:
dsolve(『eqn』,』cond』,』var』)
沒接觸過matlab的小兄弟可能看著有點懵,這是啥。暫且聽我慢慢道來:eqn代表微分方程,cond代表初始條件(無初始條件可以預設),var代表微分方程中的自變量(默認為t)。
對了,重要的一階導,二階導,等高階導怎麼表示呢?別著急,也很簡單。該命令中可以用D表示倒數符號,其中D2表示二階導數,D3表示三階導數,以此類推。
說了這麼多,來看一個實例,來求求下面這個式子的通解:
你只需要在命令行窗口輸入
dsolve('D2y=Dy+x','x')
然後輕點回車鍵答案就出來了。
圖1-1
讓我們更進一步,如果我們要求特解,那麼我們在函數中加上初始條件就可以嘍。讓我們再看一個實例:
你只需要在命令行窗口輸入
dsolve('D2y=Dy+x','y(1)=1','Dy(1)=0','x')
然後輕點回車鍵答案就出來了。
圖1-2
相信,掌握了dsolve()這個函數,大部分的微分方程都會迎刃而解的。
~~~~~~~~~~~~~~~~~~~~~~~~~
挖坑一時爽,
填坑火葬場。
不是我不填,
坑多填不完。
填坑一:如果你沒有用過matlab這個軟體,那麼可以參考網上教程先安裝一個。
參考教程:https://blog.csdn.net/LeonSUST/ article/details/ 84038216
填坑二:其實有的常微分方程用dslove()這個函數是無法求出解析解的。(//小編已經逃到你打不到地方嘍)解釋一下原因:函數dsolve()是求常微分方程的精確解法(求出來的是解析解),但是有大量的常微分方程雖然從理論上講,其解是存在的,但實際上我們卻無法用matlab求出來。
填坑三:那對於那些求不出來解析解的常微分方程,我們該怎麼辦呢?其實我們還可嘗試求其數值解。至於怎樣用matlab求數值解,大家可以自行百度哦。(//在作死邊緣瘋狂試探)
填坑四:對於要考高數的「難兄難弟」們,認真總結各種微分方程的解法是必要的,切記:投機取巧一時爽,卷子下來火葬場。
下圖為小編自己的筆記,雖然醜,但是對小編背誦各種方程的解法還是有用的。
圖1-3
填坑四:下面補充一些用matlab解微分方程的例子供大家參考。
(1) 可分離變量型
Matlab解法:
圖1-4
Ps:咱們需要對原方程進行適當的變換。
(2) 齊次方程
Matlab解法:
圖1-5
Ps:無解析解,所以還是乖乖按老師講的方法做吧。
(3) 一階線性微分方程
Matlab解法:
圖1-6
Ps:matlab中的ln()使用log()表示。
(4) 伯努利方程
Matlab解法:
圖1-7
(5) 可降階的高階微分方程
Matlab解法:
圖1-8
Ps:大家可以自己用筆算算對對答案嘛。
(6) 常係數齊次線性微分方程
Matlab解法:
圖1-9
(7) 常係數非齊次線性微分方程
Matlab解法:
圖1-10
Ps:exp()代表e的多少次方。
(8) 歐拉方程
Matlab解法:
圖1-11
聲明:作者只是一名大二學生,學識有限,如有錯誤,請評論出來,咱會及時糾正;如有建議,也可以評論出來,咱會擇優採納;如想吐槽,也可評論出來,咱看了也不會生氣。
~~~~~~~~~~~~~~~~~~~~~~~
最後,「難兄難弟」們
道路千萬條,
上課第一條。
上課不規範,
大四兩行淚。