十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
解常微分方程問題

目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、南岳網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
例1:假設在平面內有一帶電粒子q,質量為m。空間內存在勻強磁場B,方向垂直于平面向內即沿z軸負半軸,以及一個沿y軸負半軸的重力場。帶電粒子從磁場內O點釋放。
則可直接列出粒子的運動方程,將這個方程分解成x和y兩個方向,聯(lián)立即可求得該方程組的解。
sympy中的dsolve方法
Python例程
1 #導入 2 from sympy import * 3 import numpy as np 4 import matplotlib.pyplot as plt 5 init_printing() 6 7 ###首先聲明符號x,y,q,m,B,g 8 #參量 9 q,m,B,t,g = symbols('q m B t g',real=True,nonzero=True,positive=True) 10 #函數(shù) 11 x,y = symbols('x y',real=True,nonzero=True,positive=True,cls=Function) 12 13 ###再將微分方程表示出來 14 eq1 = Eq(x(t).diff(t,t),-q*B*y(t).diff(t)/m) 15 eq2 = Eq(y(t).diff(t,t),-g+q*B*x(t).diff(t)/m) 16 sol = dsolve([eq1,eq2]) 17 print("微分方程:",sol) #現(xiàn)在打印出sol 18 19 ###這個式子非常冗雜,用trigsimp()方法化簡 20 x = trigsimp(sol[0].rhs) 21 y = trigsimp(sol[1].rhs) 22 print("化簡:",x,y) 23 24 ###將里面的積分常數(shù)算出 25 #定義積分變量,避免報錯,觀察上式輸出式子中有幾個C這里就定義幾個 26 var('C1 C2 C3 C4') 27 #x(0)=0 28 e1 = Eq(x.subs({t:0}),0) 29 #x'(0)=0,要將subs放在diff后面 30 e2 = Eq(x.diff(t).subs({t:0}),0) 31 #y(0)=0 32 e3 = Eq(y.subs({t:0}),0) 33 #y'(0)=0 34 e4 = Eq(y.diff(t).subs({t:0}),0) 35 l = solve([e1,e2,e3,e4],[C1,C2,C3,C4]) 36 print("積分常數(shù):",l) 37 38 ###將積分常量替換到x和y里面,我們就得到了解的最終形式 39 x = x.subs(l) 40 y = y.subs(l) 41 print("最終形式:",x,y) 42 43 #作圖 44 ts = np.linspace(0,15,1000) 45 consts = {q:1,B:1,g:9.8,m:1} 46 fx = lambdify(t,x.subs(consts),'numpy') 47 fy = lambdify(t,y.subs(consts),'numpy') 48 plt.plot(fx(ts),fy(ts)) 49 plt.grid() 50 plt.show()