Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉)
不說什么,先上代碼
這里先求解形如的微分方程
1.歐拉法
def eluer(rangee,h,fun,x0,y0): step = int(rangee/h) x = [x0] + [h * i for i in range(step)] u = [y0] + [0 for i in range(step)] for i in range(step): u[i+1] = u[i] + h * fun(x[i],u[i]) plt.plot(x,u,label = "eluer") return u
2.隱式歐拉法
def implicit_euler(rangee,h,fun,x0,y0): step = int(rangee/h) x = [x0] + [h * i for i in range(step)] u = [y0] + [0 for i in range(step)] v = ["null"] + [0 for i in range(step)] for i in range(step): v[i+1] = u[i] + h * fun(x[i],u[i]) u[i+1] = u[i] + h/2 * (fun(x[i],u[i]) + fun(x[i],v[i+1])) plt.plot(x,u,label = "implicit eluer") return u
3.三階runge-kutta法
def order_3_runge_kutta(rangee,h,fun,x0,y0): step = int(rangee/h) k1,k2,k3 = [[0 for i in range(step)] for i in range(3)] x = [x0] + [h * i for i in range(step)] y = [y0] + [0 for i in range(step)] for i in range(step): k1[i] = fun(x[i],y[i]) k2[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k1[i]) k3[i] = fun(x[i]+0.5*h,y[i]+2*h*k2[i]-h*k1[i]) y[i+1] = y[i] + 1/6 * h * (k1[i]+4*k2[i]+k3[i]) plt.plot(x,y,label = "order_3_runge_kutta") return y
4.四階runge-kutta法
def order_4_runge_kutta(rangee,h,fun,x0,y0): step = int(rangee/h) k1,k2,k3,k4 = [[0 for i in range(step)] for i in range(4)] x = [x0] + [h * i for i in range(step)] y = [y0] + [0 for i in range(step)] for i in range(step): k1[i] = fun(x[i],y[i]) k2[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k1[i]) k3[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k2[i]) k4[i] = fun(x[i]+h,y[i]+h*k3[i]) y[i+1] = y[i] + 1/6 * h * (k1[i]+2*k2[i]+2*k3[i]+k4[i]) plt.plot(x,y,label = "order_4_runge_kutta") return y
5.上圖
當(dāng)然,想要成功操作,得加上這個(gè)
rangee = 1 fun = lambda x,y:y-2*x/y implicit_euler(rangee,0.0001,fun,0,1) order_4_runge_kutta(rangee,0.0001,fun,0,1) order_3_runge_kutta(rangee,0.0001,fun,0,1) eluer(rangee,0.0001,fun,0,1) plt.legend() plt.show()
到此這篇關(guān)于Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉)的文章就介紹到這了,更多相關(guān)Python數(shù)值求解微分方程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你用一行Python代碼實(shí)現(xiàn)GUI圖形界面
這篇文章主要介紹了教你用一行Python代碼實(shí)現(xiàn)GUI圖形界面,通過使用PySimpleGUI的popup_get_folder()方法,一行代碼就能實(shí)現(xiàn)選擇文件夾的操作,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01解決pytorch下只打印tensor的數(shù)值不打印出device等信息的問題
這篇文章主要介紹了解決pytorch下只打印tensor的數(shù)值不打印出device等信息的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python 求一個(gè)列表中所有元素的乘積實(shí)例
今天小編就為大家分享一篇python 求一個(gè)列表中所有元素的乘積實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python3之亂碼\xe6\x97\xa0\xe6\xb3\x95處理方式
這篇文章主要介紹了Python3之亂碼\xe6\x97\xa0\xe6\xb3\x95處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05使用tensorboard可視化loss和acc的實(shí)例
今天小編就為大家分享一篇使用tensorboard可視化loss和acc的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01