Sympy:替代衍生物以形成一阶ODE系统

时间:2017-08-17 11:55:31

标签: python sympy symbolic-math

我是Python和Sympy的新手,所以我在问这个问题之前搜索了很多。

我使用Sympy通过拉格朗日方法得出机械系统的运动方程,我设法做到了。

from math import *
from sympy import *;
from sympy.physics.mechanics import *
from sympy.physics.vector import *

# dynamic symbols, for Lagrange equations
x, z, theta = dynamicsymbols('x  z  theta')
xd, zd, thetad = dynamicsymbols('x  z  theta',1)
xdd, zdd, thetadd = dynamicsymbols('x  z  theta',2)

# Lagrangian potential
L = Symbol('L')
def L(x,z,theta,xd,zd,thetad):
    return 0.5*1*xd**2 + 0.5*100*thetad**2 - 0.5*300*(z)**2+0.5*250*(x+ 100*theta)**2

# build Lagrange equations
LM0 = LagrangesMethod(L(x,z,theta,xd,zd,thetad), [x, z, theta])
equations0 = LM0.form_lagranges_equations()

print(equations0)

然而,我获得了3个变量的二阶ODE系统,我想将其转换为6个变量的一阶ODE系统。

如您所见,输出是根据变量x,z,theta及其二阶导数给出的。我无法以变量xd,xdd等形式获得拉格朗日方程。所以我想要替换像这样的衍生物:

print(equations0[2].subs(Derivative(x,t,t),Derivative(xd,t)))

然而,替换不起作用,我得到了未修改的表达式。我看到another example这样的嫌疑似乎在起作用;我在这里看到的差异是使用动态符号。

任何人都可以建议我应该如何处理我的方程式来仅用一阶导数描述系统?

提前致谢

0 个答案:

没有答案