簡體   English   中英

諧波振盪器的對稱微分方程

[英]sympy differential equation of harmonic oscillator

我在這里是因為我一直在嘗試使用sympy求解微分方程,但是不幸的是,到目前為止我還沒有成功。 到目前為止,我所做的是:

1)插入微分方程,賦值並求解:

import sympy as sp
from IPython.display import display
import numpy as np
import matplotlib.pyplot as plt
sp.init_printing()

F0=sp.symbols('F0')
Wd=sp.symbols('Wd')
A=sp.symbols('A')
B=sp.symbols('B')
x=sp.Function('x')
t=sp.symbols('t')

eq=sp.Eq(x(t).diff(t,2)+A*x(t).diff(t)+(B**2)*x(t),F0*sp.cos(Wd*t))
display(eq)

等式1

sol=sp.dsolve(eq,x(t)).rhs
display(sol)

<code> sol </ code>的內容

2)之后,我替換所有聲明的符號的值,設置初始條件,以便清除方程式

consts = {A:  0.1, 
      B:  0.01,
      F0:  0.0,
      Wd: 0.01,
      }

sol=sp.simplify(sol.subs(consts))
display(sol)

x0=5

#to evaluate initial conditions - x(0)
cnd0=sp.Eq(sol.subs(t,0),x0)
C1 = sp.symbols("C1") 
sol_c1=sp.solve([cnd0],(C1))

display(sol_c1)

C2s=sp.simplify(sol.subs(sol_c1))
display(C2s)

C2S

3)然后我對第一個導數重復相同的過程。 這樣做的目的是根據x(0)和X'(0)計算值C1和C2。 代碼在這里

sold=sp.diff(sol,t)
display(sold)

xd0=0
#to evaluate initial conditions - derivative x'(0)
cnd1=sp.Eq(sold.subs(t,0),xd0)
sold_c1=sp.solve([cnd1],(C1))

display(sold_c1)

C2d=sp.simplify(sol.subs(sold_c1))
display(C2d)

C2D

4)當我嘗試用C2s和C2d建立方程並求解它以便最終得到C2依賴於t的方程時,python拋出錯誤。 你能告訴我我在做什么錯嗎?

提前致謝!

通過設置F0 = 0您的微分方程變成了齊次方程。 C1C2是積分常數 因此,我認為它們不應該是t函數。 x(0)x'(0)上的兩個初始條件在C1C2給出了兩個方程式,我們可以對其求解。

import sympy as sp
from IPython.display import display
import numpy as np
import matplotlib.pyplot as plt
sp.init_printing()

F0=sp.symbols('F0')
Wd=sp.symbols('W_d')
A=sp.symbols('A')
B=sp.symbols('B')
x=sp.Function('x')
t=sp.symbols('t')

eq=sp.Eq(x(t).diff(t,2)+A*x(t).diff(t)+(B**2)*x(t),F0*sp.cos(Wd*t))
display(eq)

sol=sp.dsolve(eq,x(t)).rhs # x(t)
display(sol)

sold=sp.diff(sol,t) # x'(t)
display(sold)

consts = {A:  0.1,
      B:  0.01,
      F0:  0.0,
      Wd: 0.01,
      }

sol=sp.simplify(sol.subs(consts))
display(sol)

sold=sp.simplify(sold.subs(consts))
display(sold)

x0=5
#to evaluate initial conditions - x(0)
cnd0=sp.Eq(sol.subs(t,0),x0)

xd0=0
#to evaluate initial conditions - derivative x'(0)
cnd1=sp.Eq(sold.subs(t,0),xd0)

c1c2 = sp.linsolve([cnd0,cnd1],sp.var('C1,C2'))
display(c1c2)

如果我對您的微分方程有誤解,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM