Python 谐振子的辛微分方程

Python 谐振子的辛微分方程,python,sympy,Python,Sympy,我来这里是因为我一直在尝试用Symphy解一个微分方程,不幸的是,到目前为止我还没有成功。到目前为止,我所做的是: 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.symb

我来这里是因为我一直在尝试用Symphy解一个微分方程,不幸的是,到目前为止我还没有成功。到目前为止,我所做的是:

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)

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)

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)

4) 当我试图用C2s和C2d建立方程并求解它,以便最终得到C2依赖于t的方程时,python抛出了一个错误。你能告诉我我做错了什么吗


提前谢谢

通过设置
F0=0
微分方程成为齐次方程。
C1
C2
是积分的常数。所以,我认为它们不应该是
t
的函数。
x(0)
x'(0)
上的两个初始条件给出了
C1
C2
中我们可以求解的两个方程

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)

如果我误解了你的微分方程,请告诉我。

你好,阿米特。是的,那正是我要找的。我真的对C1和C2感到困惑,但你的回答澄清了我的问题。谢谢!
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)