求解微分方程时出现错误,显示“Add”对象不可调用。我用的是Jupyter笔记本

2024-06-30 16:08:18 发布

您现在位置:Python中文网/ 问答频道 /正文

为了更清楚,我想画出摆的阻尼振动的二阶微分方程的解。有关所用方程式的wiki链接:https://en.wikipedia.org/wiki/Harmonic_oscillator

from sympy.interactive import printing
printing.init_printing(use_latex=True)
import numpy as np
import scipy as sp
from sympy import*
mport sympy as syp
`from scipy.integrate import odeint
import matplotlib.pyplot as plt

t=syp.Symbol('t')
x=syp.Function('x')(t)
m=2.0
k=5.0
a=0.5
z=a/(2.0*np.sqrt(m*k))
w=np.sqrt(k/m)
eq=x.diff(t,t)+2.0*z*w*x.diff(t)+w**2.0*x
dsolve(eq,t,0,ics={eq(1.0):0,eq(2.0):5})

Tags: fromimport链接asnpwikidiffscipy
2条回答

尽管如此,我还是遇到了以下问题,你的回答足以帮助我找到合理的解决办法。非常感谢

您没有按预期构造ics参数:

In [6]: dsolve(eq, ics={x.subs(t, 1.0): 0, x.subs(t, 2.0): 5})                                                                                 
Out[6]: 
                                                                                                 -0.125⋅t
x(t) = (-0.0346285740992263⋅sin(1.57619002661481⋅t) - 6.42012708343871⋅cos(1.57619002661481⋅t))⋅ℯ 

如果不使用浮动,答案会更好(主观上)。此外,我发现将变量x作为函数x而不是应用函数x(t)更为自然,例如:

In [15]: x = Function('x')                                                                                                                     

In [16]: x                                                                                                                                     
Out[16]: x

In [17]: x(t)                                                                                                                                  
Out[17]: x(t)

In [18]: eq = x(t).diff(t, 2) + x(t).diff(t)/4 + 5*x(t)/2                                                                                      

In [19]: eq                                                                                                                                    
Out[19]: 
         d                   
         ──(x(t))     2      
5⋅x(t)   dt          d       
────── + ──────── + ───(x(t))
  2         4         2      
                    dt       

In [20]: dsolve(eq, x(t), ics={x(1): 0, x(2): 5})                                                                                              
Out[20]: 
       ⎛   1/4    ⎛√159⋅t⎞                     ⎞  -t 
       ⎜5⋅ℯ   ⋅sin⎜──────⎟                     ⎟  ───
       ⎜          ⎝  8   ⎠      1/4    ⎛√159⋅t⎞⎟   8 
x(t) = ⎜────────────────── - 5⋅ℯ   ⋅cos⎜──────⎟⎟⋅ℯ   
       ⎜       ⎛√159⎞                  ⎝  8   ⎠⎟     
       ⎜    tan⎜────⎟                          ⎟     
       ⎝       ⎝ 8  ⎠                          ⎠ 

相关问题 更多 >