Как упростить уравнение симпы? - PullRequest
0 голосов
/ 01 мая 2020

Рассмотрим это простое матричное уравнение:

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]]))

Я пытался некоторое время упростить безуспешно ... как вы можете видеть, существует множество возможных факторизаций (ie: k_1*(c_a-1), k_4(1-c_a), ...). Я пробовал многие из существующих доступных методов, которые симпати должен упростить https://docs.sympy.org/latest/tutorial/simplification.html, но не повезло ... фактор, упрощение, сбор, применение функций (фактор), упрощение (сила = Истина) и c .

Я новичок ie с sympy, так что, вероятно, есть какой-то очевидный способ еще больше упростить уравнения такого типа, если это так, то как?

Кроме того, я просто заинтересованы в упрощении rhs уравнения, а не lhs. Можно ли упростить любой из них или оба?

1 Ответ

1 голос
/ 01 мая 2020

Это чехол для поделок. Вам может подойти что-то вроде следующего:

>>> 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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...