有很多大學(xué)生問我,學(xué)習(xí)python有什么用呢?我說:你至少可以用來解微分方程,如下面的例子,就是解決微分方程:
大新ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
y"+a*y'+b*y=0?
代碼如下:
[python]?view plain?copy
#y"+a*y'+b*y=0
from?scipy.integrate?import?odeint
from?pylab?import?*
def?deriv(y,t):????????#?返回值是y和y的導(dǎo)數(shù)組成的數(shù)組
a?=?-2.0
b?=?-0.1
return?array([?y[1],?a*y[0]+b*y[1]?])
time?=?linspace(0.0,50.0,1000)
yinit?=?array([0.0005,0.2])?????#?初值
y?=?odeint(deriv,yinit,time)
figure()
plot(time,y[:,0],label='y')????#y[:,0]即返回值的第一列,是y的值。label是為了顯示legend用的。
plot(time,y[:,1],label="y'")?????#y[:,1]即返回值的第二列,是y’的值
xlabel('t')
ylabel('y')
legend()
show()
輸出結(jié)果如下:
本文歸納常見常微分方程的解析解解法以及基于Python的微分方程數(shù)值解算例實現(xiàn)。
考慮常微分方程的解析解法,我們一般可以將其歸納為如下幾類:
這類微分方程可以變形成如下形式:
兩邊同時積分即可解出函數(shù),難點(diǎn)主要在于不定積分,是最簡單的微分方程。
某些方程看似不可分離變量,但是經(jīng)過換元之后,其實還是可分離變量的,不要被這種方程迷惑。
形如
的方程叫做一階線性微分方程,若 為0,則方程齊次,否則稱為非齊次。
解法: (直接套公式)
伯努利方程
形如
的方程稱為伯努利方程,這種方程可以通過以下步驟化為一階線性微分方程:
令 , 方程兩邊同時乘以 ,得到
即 .
這就將伯努利方程歸結(jié)為可以套公式的一階線性微分方程。
形如
的方程稱為二階常系數(shù)微分方程,若 ,則方程稱為齊次的,反之稱為非齊次的。以下默認(rèn)方程是非齊次的。
求解此類方程分兩步:
原方程的解 = 齊次通解 + 非齊次特解
首先假設(shè) .用特征方程法,寫出對應(yīng)的特征方程并且求解:
解的情況分為以下三種:
情況一:方程有兩個不同的實數(shù)解
假設(shè)兩個實數(shù)解分別是 , 此時方程的通解是
情況二:方程有一個二重解
假設(shè)該解等于 ,此時方程的通解是
情況三:方程有一對共軛復(fù)解
假設(shè)這對解是 , 此時方程的通解是
對于 和特征根的情況,對特解的情況做如下歸納:
形如
的方程叫做高階常系數(shù)微分方程,若 ,則方程是齊次的,否則是非齊次的。下面默認(rèn)方程是非齊次的。
求解此類方程分兩步:
原方程的解 = 齊次通解 + 非齊次特解
考慮帶有第三類邊界條件的二階常系數(shù)微分方程邊值問題
問題一:兩點(diǎn)邊值問題的解析解
由于此方程是非齊次的,故 求解此類方程分兩步:
原方程的解 = 齊次通解 + 非齊次特解
首先假設(shè) . 用特征方程法,寫出對應(yīng)的特征方程
求解得到兩個不同的實數(shù)特征根: .
此時方程的齊次通解是
由于 . 所以非齊次特解形式為
將上式代入控制方程有
求解得: , 即非齊次特解為 .
原方程的解 = 齊次通解 + 非齊次特解
于是,原方程的全解為
因為該問題給出的是第三類邊界條件,故需要求解的導(dǎo)函數(shù)
且有
將以上各式代入邊界條件
解此方程組可得: .
綜上所述,原兩點(diǎn)邊值問題的解為
對一般的二階微分方程邊值問題
假定其解存在唯一,
為求解的近似值, 類似于前面的做法,
考慮帶有第三類邊界條件的二階常系數(shù)微分方程邊值問題
問題二:有限差分方法算出其數(shù)值解及誤差
對于 原問題 ,取步長 h=0.2 ,用 有限差分 求其 近似解 ,并將結(jié)果與 精確解y(x)=-x-1 進(jìn)行比較.
因為
先以將區(qū)間劃分為5份為例,求出數(shù)值解
結(jié)果:
是不是解出數(shù)值解就完事了呢?當(dāng)然不是。我們可以將問題的差分格式解與問題的真解進(jìn)行比較,以得到解的可靠性。通過數(shù)學(xué)計算我們得到問題的真解為 ,現(xiàn)用范數(shù)來衡量誤差的大?。?/p>
結(jié)果:
接下來繪圖比較 時數(shù)值解與真解的差距:
結(jié)果:
將區(qū)間劃分為 份, 即 時.
結(jié)果:
繪圖比較 時數(shù)值解與真解的差距:
最后,我們還可以從數(shù)學(xué)的角度分析所采用的差分格式的一些性質(zhì)。因為差分格式的誤差為 , 所以理論上來說網(wǎng)格每加密一倍,與真解的誤差大致會縮小到原來的 . 下討論網(wǎng)格加密時的變化:
結(jié)果:
scipy中提供了用于解常微分方程的函數(shù)odeint(),完整的調(diào)用形式如下:
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0,hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0)
實際使用中,還是主要使用前三個參數(shù),即微分方程的描寫函數(shù)、初值和需要求解函數(shù)值對應(yīng)的的時間點(diǎn)。接收數(shù)組形式。這個函數(shù),要求微分方程必須化為標(biāo)準(zhǔn)形式,即dy/dt=f(y,t,)。
from scipy import odeint
y = odeint(dy/dt=r*y*(1-y/k) ,y(0)=0.1,t)
對于微分方程全還給老師了,
這個地址有很多關(guān)于python做科學(xué)計算的文檔,你可以去查查
網(wǎng)頁題目:python積分微分函數(shù) python 積分函數(shù)
網(wǎng)頁URL:http://jinyejixie.com/article34/dosggpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、品牌網(wǎng)站制作、搜索引擎優(yōu)化、面包屑導(dǎo)航、ChatGPT、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)