不能将积分常数替换为积分响应

时间:2017-08-09 00:17:05

标签: sympy

让我们使用sympy找出线性系统对外力的反应

from sympy import *

t, w, beta = symbols('t omega beta', positive=1)
x0, v0 = symbols('x0 v0')
x = symbols('x', cls=Function)
homogeneous = diff(x(t), t, 2)/w**2+x(t)
force = sin(beta*w*t)
disp = dsolve(homogeneous-force, x(t)).rhs
display(disp)
constants = solve((disp.subs(t,0)-x0, disp.diff(t).subs(t,0)-v0))
display(constants)

获得

                                    sin(beta*omega*t)
C1*sin(omega*t) + C2*cos(omega*t) - -----------------
                                            2        
                                        beta  - 1    
          2                               
      beta *v0 + beta*omega - v0          
[{C1: --------------------------, C2: x0}]
                /    2    \               
          omega*\beta  - 1/               

现在,为了完成我的解决方案,我尝试将这些常量的常量替换为常规+特定积分

display(disp.subs(constants))

给了我

                                    sin(beta*omega*t)
C2*sin(omega*t) + C2*cos(omega*t) - -----------------
                                            2        
                                        beta  - 1    

我在哪里犯了错误?

1 个答案:

答案 0 :(得分:2)

subs的论点应该是字典。

solve作为constants获得的不是字典,而是包含字典的单元素列表。将其用作

disp.subs(constants[0])

然后结果是

x0*cos(omega*t) - sin(beta*omega*t)/(beta**2 - 1) + (beta**2*v0 + beta*omega - v0)*sin(omega*t)/(omega*(beta**2 - 1))