帶你用matlab輕鬆搞定微分方程

2021-03-01 matlab愛好者


之前過冷水有和大家分享熱傳導方程求解的方法,其本質上是微分方程的問題。考慮大多數讀者對微分方程求解方法比較陌生,所以過冷水本期簡單普及一下微分方程的求解問題。

關於微分方程你需要了解:含有未知的函數及其某些階的導數以及其自變量本身的方程稱為微分方程。如果未知函數是一元函數,則稱為常微分方程。如果未知函數是多元函數,則稱為偏微分方程。聯繫一些未知函數的一組微分方程稱為微分方程組。微分方程中出現的未知函數的導數的最高階稱為微分方程的階。

有些微分方程比較簡單可直接通過積分求解。例如一階常係數線性常微分方程:

syms y(x) a beqn = diff(y,x) == a*y+b;S = dsolve(eqn)S =-(b - C3*exp(a*x))/a

syms y(x) a beqn = diff(y,x,2)+2*diff(y,x,1)+4*y ==0;S = dsolve(eqn)eqn(x) =4*y(x) + 2*diff(y(x), x) + diff(y(x), x, x) == 0S =C4*exp(-x)*cos(3^(1/2)*x) + C5*exp(-x)*sin(3^(1/2)*x)

演示了兩個比較簡單的微分方程用符號解微分方程的方法解出通解,在我們實際問題中少數特殊方程可用初等積分法求解外,大部分微分方程無顯示解,應用主要依靠數值解法。考慮一階常微分方程組初值問題:

其中y=(y1,y2,...,ym)T,f=(f1,f2,...,fm)T,y0=(y10,y20,...,ym0)T,所謂數值解,就是尋求解y(t)在一些列離散節點t0<t1<t2<...<tn<tf  上的近似值yk(k=0,1,...,n).稱hk=tk+1-tk為步長,已知:

求其數值解。自己根據差分方程思想編程如下:

clear allwarning offfeature jit offf=inline('y-2*x/y','x','y');a=0;b=1;h=0.1;n=(b-a)./h;x=zeros(1,n+1);y=zeros(1,n+1);y(1)=1;for i=1:n+1    x(i)=a+(i-1)*h;    y(i+1)=y(i)+h*f(x(i),y(i));endy=y(1:n+1);

一般來講符號法的運算會比單純的數值運算可具有科學準確性。因為該問題比較簡單,可以採用符號微分法求解,用符號計算為對比看差分法數值運算精度如何。代碼如下:

%符號法解微分方程y1=dsolve('Dy=y-2*x/y','y(0)=1','x')%繪圖對比figure1 = figure;axes1 = axes('Parent',figure1);hold(axes1,'on');plot(x,y,'DisplayName','差分法','LineWidth',2);h1=ezplot(y1,[0,1]);set(h1,'DisplayName','符號法','LineWidth',2);xlabel('$x$','FontWeight','bold','Interpreter','latex');ylabel('$f(x)$','Interpreter','latex');title('差分法&符號法 解微分方程對比');xlim(axes1,[0 1]);ylim(axes1,[0.93232679283255 1.79972401473633]);set(axes1,'FontSize',14,'FontWeight','bold');legend1 = legend(axes1,'show');set(legend1,'Position',[0.148120235966763 0.82820510022613 0.127868850472195 0.0933333308498066]);

我們再來看一個案例:

擬採用兩種符號運算方法,兩種數值運算方法。代碼如下:
%第一種解微分方程的方法syms y(x) a beqn1 = diff(y,x,1)==-2*y(x)+2*x^2+2*x;eqn2 = y(0)==1;y1= dsolve([eqn1,eqn2]);%第二種解微分方程的方法y2=dsolve('Dy=-2*y+2*x^2+2*x','y(0)=1','x');%第三種解微分方程的方法warning offfeature jit offf=inline('-2*y+2*x^2+2*x','x','y');a=0;b=0.5;h=0.0001;n=(b-a)./h;x=zeros(1,n+1);y=zeros(1,n+1);y(1)=1;for i=1:n+1;    x3(i)=a+(i-1)*h;    y(i+1)=y(i)+h*f(x(i),y(i));endy3=y(1:n+1);%第四種微分方程數值解[x4,y4]=ode23(f,[0 0.5],1);%繪圖figure1 = figure;axes1 = axes('Parent',figure1);hold(axes1,'on');h1=ezplot(y1,[0,0.5]);h2=ezplot(y2,[0,0.5]);set(h1,'DisplayName','$y_1 =exp(-2x) + x^2$','LineWidth',2);set(h2,'DisplayName','$y_2=2x + 2exp(-2x) - x^2 - 1$','LineWidth',2);plot(x3,y3,'DisplayName','$(x_3,y_3)$','LineWidth',2);plot(x4,y4,'DisplayName','$y_4=ode23(f(x))$','MarkerFaceColor',[0.494117647409439 0.184313729405403 0.556862771511078],'MarkerSize',8,'Marker','o','LineStyle','none');xlabel('$x$','FontSize',16,'Interpreter','latex');ylabel('$y_4$','FontSize',20,'Interpreter','latex');title('微分方程不同解法數值解對比圖');xlim(axes1,[0 0.5]);ylim(axes1,[0.43978341778928 1.0459754645536]);set(axes1,'FontSize',14,'LineWidth',2);legend1 = legend(axes1,'show');set(legend1,'Position',[0.604420982252212 0.73205553519439 0.220018931648527 0.166277798138944],'Interpreter','latex','FontSize',14);

本期推文過冷水就是想講一下簡單的微分方程求解的方法,讓大家足夠解決常見問題就OK了!至於那些複雜問題,萬丈高樓平地起,Monte Carlo算法不也講了好幾期的嗎?敬請期待下期的複雜偏微分方程組的求解方法。

往期回顧>>>>>>

歡迎各路英雄豪傑來搞

積分變量替換到legendre微分變換

數值計算——MATLAB數值積分原理詳講

數值優化—三種複雜函數數值積分方法實例演示

非線性方程組求解迭代算法&圖像尋初始值講解

matlab愛好者公眾號中,回復「QQ」加入公眾號專屬Q群;回復「原創」獲取小編原創代碼;回復「星球」加入資源分享園地知識星球。

如需轉載,請在公眾號中回復「轉載」獲取授權,未經授權擅自搬運抄襲的,必將追究其責任!

相關焦點

  • 2019數學建模國賽|Matlab 求解微分方程(組)
    1.在 Matlab 中,用大寫字母 D 表示導數,Dy 表示 y 關於自變量的一階導數,D2y 表示 y 關於自變量的二階導數,依此類推.函數 dsolve 用來解決常微分方程(組)的求解問題,調用格式為            X=dsolve(『eqn1』,』eqn2』,…)如果沒有初始條件,則求出通解,如果有初始條件,則求出特解系統預設的自變量為
  • 偏微分方程(組)的數值解法介紹
    我們知道物理現象中很多問題可以用偏微分方程描述,例如振動、熱傳導、擴散等。一些典型物理方程的構建及解析解法,有興趣的用戶可參考顧樵編著的《數學物理方法》。涉及到多變量或多領域的偏微分方程就存在著變量的耦合,很難用數解析解法或無法用解析解法求得耦合偏微分方程解,此時就需要我們是用數值解法進行求解,本文的主題就放在耦合的偏微分方程組的數值解法介紹上。
  • Matlab解常微分方程
    今天梳理一下Matlab中常用的求解微分方程的方法,我們知道計算機是處理不了連續的,所以要求解一個連續的微分方程,我們一般都是先離散化,求的其實是近似解
  • MATLAB建模實例——微分方程
    ❞1 微分方程的解析解求微分方程(組)的解析解命令:dsolve(『方程1』,『方程2』,…『方程n』,『初始條件',『自變量』)記號: 在表達微分方程時,用字母D表示求微分,D2、D3等表示求高階微分.任何D後所跟的字母為因變量,自變量可以指定或由系統規則選定為確省。
  • 2016考研:教你搞定一階線性微分
    下面就帶著各位同學分析一下高等數學中常見的一階微分方程及解法。;   2、微分方程的應用。      例題講解:   對於微分方程而言,主要考查的是一階以及二階微分方程的求解,今天我們主要討論常見的一階微分方程及其求解。
  • Matlab求解微分代數方程 (DAE)
    周末有位同學請教了一個問題,他要求解一個微分方程組,但微分方程變量之間還有個線性方程組關係,這個就是典型的微分代數方程 ,Matlab裡面有專門的求解方法
  • 微分方程篇:為你構建微分方程框架
    以下是小編自己構建的微分方程這一章的知識網絡,帶*的表示選修(即考的概率不大)。函數是客觀事物的內部聯繫在數量方面的反映,利用函數關係又可以對事物的規律性進行研究。因此如何尋找函數關係,在實踐中具有重要意義。在許多問題中由於條件受限,有時只能找到要找的函數及其導數的關係式,這樣的關係式稱為微分方程。
  • 求解微分方程,用seq2seq就夠了,性能遠超 Mathematica、Matlab
    這篇論文提出了一種新的基於seq2seq的方法來求解符號數學問題,例如函數積分、一階常微分方程、二階常微分方程等複雜問題。其結果表明,這種模型的性能要遠超現在常用的能進行符號運算的工具,例如Mathematica、Matlab、Maple等。
  • 常微分方程:線性微分方程解的三個重要特徵
    前一篇《帶你走進微積分的堂學習:一階線性微分方程式的基礎原理》詳細討論了線性微分方程的結構以及通解特性,本篇我們藉此機會指出一階線性微分方程解的三個重要特徵1)有一階線性微分方程,線性微分方程(1)的一切解在α<x<β上存在,面對非線性微分方程,一般就沒有這種解的全局存在性,例如非線性微分方程關於x的定義域為-∞<x<+∞,而它的解,例如y=tanx的存在區間只是-π/2<x<π/2,這就表明,非線性微分方程解的存在區間一般是局部的,而不像線性微分方程的解那樣是全局的。
  • 熱導方程的Matlab數值解方法
    這是一個很久很久以前的一個故事,久到能夠讓人忘記原來這這些方程是如此的貼近自己的學習。你學或者不學,它都在這裡,不難也不簡單。過冷水今天就和大家分享一下一維熱傳導方程特別案例的具體求解方法。熱傳導方程就是溫度所滿足的偏微分方程,它的解給出任意時刻物體內的溫度分布。為了建立熱導方程,我們首先介紹熱導系統置於x軸,考查系統在任意x處的橫截面上的一個單位面積,設熱流沿x軸方向傳遞,x處的溫度為u(x),溫度梯度為du(x)/dx。傅立葉指出:在單位面積內流經該單位面積的熱量q與該處的溫度梯度成正比即:
  • 北洋數學講堂 江松院士帶你探索偏微分方程
    2019年4月20日上午,中國科學院院士、北京應用物理與計算數學研究所研究員江松做客天津大學,在會議樓第七會議室做主題為「偏微分方程:作用、分析與數值求解」的報告,帶領我校師生一探偏微分方程的奧秘。數學學院院長孫笑濤主持了活動。
  • 常見微分方程求解公式
    如果您每天在固定的時間(無聊時、吃飯時、睡覺前、早上起床前、「吃雞」前後、「王者榮耀」前後、「英雄聯盟」前後)抽出10分鐘來瞅一瞅,那麼高數當真還那麼難搞定嗎?還會在考試之前焦慮不安嗎?還會為掛科重修而擔心嗎?
  • MATLAB常微分方程數值求解
    有一類常微分方程,其解的分量有的變化很快,有的變化很慢,且相差懸殊,這就是所謂的剛性問題 (Stiff) 。對於剛性問題,數值解算法必須取很小步長才能獲得滿意的結果,導致計算量會大大增加。解決剛性問題需要有專門方法。
  • 常微分方程
    )非齊次線性微分方程的通解可以表示為它的一個特解與它對應的齊次線性微分方程的通解之和(6)線性微分方程的通解包含了這個方程的所有解2.>(2) 求常係數非齊次線性微分方程的特解的待定係數法和拉普拉斯變換法(3) 求一般非齊次線性微分方程特解的常數變易法(4) 求一般二階齊次線性微分方程的冪級數解法線性微分方程組
  • 最簡單的常微分方程:變量分離微分方程
    常微分方程是微積分學方程中常見的,應用非常廣泛的方程,下面就來討論常微分方程中最簡單的變量分離微分方程。設一階微分方程式:其中f(x,y)是給定的函數,我們要做的工作是求微分方程的解y=y(x),可是一般不能用初等方法來解出這個微分方程,但是當微分方程的右端f(x,y)取某幾種特殊的類型時,就可用初等積分法求解。本篇講一個重要的特殊情形此時開篇中的微分方程就變成了這樣的方程稱之為變量分離的方程。
  • AI攻破高數核心,1秒內求解微分方程、不定積分,性能遠超Matlab
    這裡有,積分數據集和常微分方程數據集的製造方法:函數,和它的積分首先,就是要做出「一個函數&它的微分」這樣的數據對。如此一來,不藉助外部的積分工具,也能輕鬆得到x10sin(x)這樣的函數了。一階常微分方程,和它的解從一個二元函數F(x,y)說起。有個方程F(x,y)=c,可對y求解得到y=f(x,c)。
  • 了解高階線性微分方程——初識二階線性微分方程
    題目在小編的上一篇文章:我要把你變弱——可降階的高階微分方程。做這部分的題目,首先要分清楚每道題是三種類型中的哪一種,然後才可下手做題。小編是這樣判斷的,首先看看方程中有沒有y,如果有y,那麼肯定是第三類,如果沒有,那就是第一或者第二類。
  • 微分方程重點一:常係數齊次線性微分方程
    微分方程前面的都是一些基礎,如果是一些和其他題型結合在一起的題目的話,可能會考前面的微分方程內容,比如說求知道函數的全微分,讓求原函數這類的。但是如果微分方程考大題的話,就是考二階常係數非齊次線性微分方程了。之前講的微分方程解的結構是基礎,主要是為了說明做題時我們需要求什麼。
  • 描述物質運動變化的數學學科:常微分方程、偏微分方程
    微分方程的形成與發展與力學、天文學、物理學等科學技術的發展密切相關。因為在現實的世界中,物質的運動及其變化規律在數學上是用函數關係來描述的,這意味著問題的解決就是要去尋求滿足某些條件的函數,而這類問題就轉換為微分方程的求解問題。
  • 微分方程3,一階線性微分方程,絕對值可以不加
    微分方程3,一階線性微分方程