gpt4 book ai didi

python - 谐振子的 sympy 微分方程

转载 作者:行者123 更新时间:2023-12-01 02:25:00 27 4
gpt4 key购买 nike

我来这里是因为我一直在尝试使用 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)

Equation 1

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

Contents of <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)

如果我对您的微分方程有任何误解,请告诉我。

关于python - 谐振子的 sympy 微分方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com