如何在SymPy中简化和简化方程组?

时间:2019-08-05 12:42:07

标签: python sympy equation ode differential-equations

我正在尝试简化和简化SymPy中的方程组:

from sympy import *
t=Symbol('t')
m1_x, m1_v, m1_a, m1_f1, s1_x2, s1_f1, s1_f2, s1_vrel=symbols('m1_x m1_v m1_a m1_f1 s1_x2 s1_f1 s1_f2 s1_vrel',cls=Function)

eq=Tuple(*[
    Eq(1856.0*s1_vrel(t) + 39694.0*s1_x2(t), s1_f2(t)),
    Eq(-s1_f2(t), s1_f1(t)),
    Eq(s1_vrel(t), Derivative(s1_x2(t), t)),
    Eq(3402.0*m1_a(t), m1_f1(t)),
    Eq(m1_a(t), Derivative(m1_v(t), t)),
    Eq(m1_v(t), Derivative(m1_x(t), t)),
    Eq(s1_x2(t), m1_x(t)),
    Eq(s1_f2(t), -m1_f1(t))])

目前我是手动完成的:

eq=eq.subs({s1_f2(t):-s1_f1(t), m1_f1(t):s1_f1(t), s1_x2(t):m1_x(t), s1_vrel(t):m1_v(t)})
eq=eq.subs({Derivative(s1_x2(t), t):Derivative(m1_x(t), t), m1_a(t):Derivative(m1_v(t), t)})
eq=simplify(eq)
eq=Tuple(*[i for i in set(eq) if i!=True])
eq=eq.subs({s1_f1(t):eq[2].rhs})
eq=solve(eq, eq.atoms(Derivative))
eq=[Eq(k,v) for k,v in eq.items()]
for i in eq: print i

有更通用,更自动化的方法吗?结果应该是:

Eq(Derivative(m1_v(t), t), -0.545561434450323*m1_v(t) - 11.6678424456202*m1_x(t))
Eq(Derivative(m1_x(t), t), m1_v(t))

0 个答案:

没有答案