[英]How to simplify sympy equation?
考虑这个简单的矩阵方程:
from sympy import *
c_a, s_a = symbols('c_a s_a')
k_1, k_2, k_3, k_4, k_5, k_6 = symbols('k_1 k_2 k_3 k_4 k_5 k_6')
x,y,z = symbols('x y z')
equation = Eq(MatrixSymbol('R',4,4), Matrix([
[ c_a*k_1 - k_1 + 1, -c_a*k_4 + k_4 - s_a*z, -c_a*k_5 + k_5 + s_a*y, 0],
[-c_a*k_4 + k_4 + s_a*z, c_a*k_2 - k_2 + 1, -c_a*k_6 + k_6 - s_a*x, 0],
[-c_a*k_5 + k_5 - s_a*y, -c_a*k_6 + k_6 + s_a*x, c_a*k_3 - k_3 + 1, 0],
[ 0, 0, 0, c_a + s_a]]))
我尝试简化了一段时间,但没有成功……正如您所见,有很多可能的因式分解(即: k_1*(c_a-1), k_4(1-c_a), ...
)。 我已经尝试了许多现有的可用方法 sympy 必须简化https://docs.sympy.org/latest/tutorial/simplification.html但没有运气......因素,简化,收集,应用功能(因素),简化(力=真)等。
我是一个有同情心的新手,所以可能有一些明显的方法可以进一步简化这些类型的方程,如果是这样,如何?
另外,我只是想简化方程的rhs
,而不是lhs
。 是否可以简化它们中的任何一个或两者?
这是一个DIY案例。 以下内容可能对您有用:
>>> def most_collect(eq):
... f = eq.free_symbols
... if not f: return eq
... F = sorted(f, key=lambda x: eq.count(x))
... return collect(eq, F[-1])
>>> equation.rhs.applyfunc(most_collect)
Matrix([
[ k_1*(c_a - 1) + 1, k_4*(1 - c_a) - s_a*z, k_5*(1 - c_a) + s_a*y, 0],
[k_4*(1 - c_a) + s_a*z, k_2*(c_a - 1) + 1, k_6*(1 - c_a) - s_a*x, 0],
[k_5*(1 - c_a) - s_a*y, k_6*(1 - c_a) + s_a*x, k_3*(c_a - 1) + 1, 0],
[ 0, 0, 0, c_a + s_a]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.