用SymPy求解微分方程组

如何解决用SymPy求解微分方程组

我正在尝试求解从调谐质量阻尼器得到的微分方程组: https://en.wikipedia.org/wiki/Tuned_mass_damper

我首先初始化所有需要的常量,变量和函数

from sympy import *

m1,m2,c1,c2,k1,k2,F0,t,x10,x20 = symbols('m1 m2 c1 c2 k1 k2 F0 t x10 x20')
x1,x2 = symbols('x1 x2',cls=Function)

x1_ = x1(t).diff(t)
x1__ = x1_.diff(t)

x2_ = x2(t).diff(t)
x2__ = x2_.diff(t)

eq1 = Eq(m1*x1__ + c1*x1_ + k1*x1(t) - m2*x2__ - c2*x2_ - k2*x2(t) - F0)
eq2 = Eq(m2*x2__ + c2*x2_ + k1*x2(t))

pprint(eq1)
pprint(eq2)

打印:

                                                               2              
         d              d                                     d     
-F₀ + c₁⋅──(x₁(t)) - c₂⋅──(x₂(t)) + k₁⋅x₁(t) - k₂⋅x₂(t) + m₁⋅───(x₁(t)) - m₂⋅─
         dt             dt                                     2              
                                                             dt              

  2           
 d            
── (x₂(t)) = 0
  2           
dt            
                               2           
   d                          d            
c₂⋅──(x₂(t)) + k₁⋅x₂(t) + m₂⋅───(x₂(t)) = 0
   dt                          2           
                             dt            

然后我尝试使用适当的初始条件将两个方程传递给dsolve sympy函数

system = [eq1,eq2]

ics = {x1(0): x10,x2(0): x20}

solution = dsolve(system,(x1(t),x2(t)),ics=ics)
pprint(solution)

但是,我遇到一个错误

Traceback (most recent call last):
  File "/Users/wyatt_blair/...",line 22,in <module>
    solution = dsolve(system,ics=ics)
  File "/Users/wyatt_blair/anaconda3/lib/python3.6/site-packages/sympy/solvers/ode.py",line 584,in dsolve
    match = classify_sysode(eq,func)
  File "/Users/wyatt_blair/anaconda3/lib/python3.6/site-packages/sympy/solvers/ode.py",line 1458,in classify_sysode
    type_of_equation = check_linear_2eq_order2(eq,funcs,func_coef)
  File "/Users/wyatt_blair/anaconda3/lib/python3.6/site-packages/sympy/solvers/ode.py",line 1568,in check_linear_2eq_order2
    x = func[0].func
AttributeError: 'list' object has no attribute 'func'

我尝试在ode.py中打印变量func,发现它是:[[x1(t),x2(t)]]。 似乎ode.py期望func看起来像这样:[x1(t),x2(t)]。如果我更改ode.py中的两个有问题的行,但失败了:

x = func[0][0].func
y = func[0][1].func

我得到一个ImplementationError,这很奇怪,因为这个方程看起来像SymPy可以处理的,因为它不太疯狂。

我误传了x1(t)x2(t)吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?