【问题标题】:Solving linear equation system with sympy takes forever用 sympy 求解线性方程组需要很长时间
【发布时间】:2021-03-03 09:49:02
【问题描述】:

作为矩阵乘法的结果,我有一个由 3 个方程组成的线性方程组。方程系统有 3 个未知数和 24 个输入变量。理论上,它应该是可以解决的,但是,linsolve 需要很长时间(到目前为止大约一天)来计算解决方案。

这是我的同情输入:

from sympy import Matrix, symbols, pprint, Eq, linsolve
from sympy.utilities.lambdify import lambdastr

n2_x, n2_y, n2_z, o2_x, o2_y, o2_z, a2_x, a2_y, a2_z, p2_x, p2_y, p2_z = symbols('n2_x n2_y n2_z o2_x o2_y o2_z a2_x a2_y a2_z p2_x p2_y p2_z', real=True)
T_2 = Matrix([[n2_x, o2_x, a2_x, p2_x], [n2_y, o2_y, a2_y, p2_y], [n2_z, o2_z, a2_z, p2_z], [0,0,0,1]])
n3_x, n3_y, n3_z, o3_x, o3_y, o3_z, a3_x, a3_y, a3_z, p3_x, p3_y, p3_z = symbols('n3_x n3_y n3_z o3_x o3_y o3_z a3_x a3_y a3_z p3_x p3_y p3_z', real=True)
T_3 = Matrix([[n3_x, o3_x, a3_x, p3_x], [n3_y, o3_y, a3_y, p3_y], [n3_z, o3_z, a3_z, p3_z], [0,0,0,1]])
p_x, p_y, p_z = symbols('p_x p_y p_z', real=True)
R_p = Matrix([[0, 0, 0, p_x], [0, 0, 0, p_y], [0, 0, 0, p_z], [0,0,0,1]])

eq1 = (Matrix.eye(4)-T_2*T_3**-1)*R_p
eq2 = Eq(eq1[0, 3], 0)
eq3 = Eq(eq1[1, 3], 0)
eq4 = Eq(eq1[2, 3], 0)

res = linsolve([eq1[0, 3], eq1[1, 3], eq1[2, 3]], (p_x, p_y, p_z))
pprint(res)
print(res)

我怎样才能加快解决问题的速度,或者我做错了什么?

提前致谢。

编辑:作为背景信息:T_2T_3 是变换矩阵,R_p 也是变换矩阵,但具有(已知的)零旋转。我们只寻找翻译。

【问题讨论】:

  • 对于具有 12 个未知数的 4x4 矩阵,表达式 T_3**-1 相当繁重。有没有可能写出方程而不需要计算逆?

标签: python python-3.x matrix sympy symbolic-math


【解决方案1】:

我同意 JohanC 的观点,可能值得考虑采用不同的方法来解决这个问题,因为您要求的表达方式非常庞大。如果您对符号之间的任何关系有更具体的了解,那么最好预先使用这些信息。

看看答案(如下),它似乎有一个明显的重复结构,这表明可能存在一种更智能的计算结果的方法,而不是仅仅将整个任意符号系统放入 sympy 中。我希望找到矩阵的 i,j 元素的表达式会导致涉及索引和求和的结果更短。

话虽如此,linsolve 的性能在 sympy 1.7 及之后(即当前的 master 分支将在某个时候变为 1.8)有了很多改进。我预计 1.8 之后也会有进一步的改进。

使用(几乎)当前的 sympy master 分支,我尝试了这个并在大约 1 分钟内得到了解决方案:

In [33]: %time res = linsolve([eq1[0, 3], eq1[1, 3], eq1[2, 3]], (p_x, p_y, p_z))
CPU times: user 42.7 s, sys: 1.23 s, total: 43.9 s
Wall time: 51.2 s

请注意,我第一次尝试需要 1 分钟。当我在退出 Python 并更新到绝对最新的 sympy master 后再次尝试时,花了更长的时间(不确定多长时间)。我认为不应该有任何改变,但所花费的时间可能是不确定的。

我找到的答案是:

In [41]: str(res)
Out[41]: 'FiniteSet(((a2_x*n2_y*o2_z*p3_x - a2_x*n2_y*o3_x*p2_z + a2_x*n2_y*o3_x*p3_z - a2_x*n2_y*o3_z*p3_x - a2_x*n2_z*o2_y*p3_x + a2_x*n2_z*o3_x*p2_y - a2_x*n2_z*o3_x*p3_y + a2_x*n2_z*o3_y*p3_x + a2_x*n3_x*o2_y*p2_z - a2_x*n3_x*o2_y*p3_z - a2_x*n3_x*o2_z*p2_y + a2_x*n3_x*o2_z*p3_y - a2_x*n3_x*o3_y*p2_z + a2_x*n3_x*o3_y*p3_z + a2_x*n3_x*o3_z*p2_y - a2_x*n3_x*o3_z*p3_y - a2_x*n3_y*o2_z*p3_x + a2_x*n3_y*o3_x*p2_z - a2_x*n3_y*o3_x*p3_z + a2_x*n3_y*o3_z*p3_x + a2_x*n3_z*o2_y*p3_x - a2_x*n3_z*o3_x*p2_y + a2_x*n3_z*o3_x*p3_y - a2_x*n3_z*o3_y*p3_x - a2_y*n2_x*o2_z*p3_x + a2_y*n2_x*o3_x*p2_z - a2_y*n2_x*o3_x*p3_z + a2_y*n2_x*o3_z*p3_x + a2_y*n2_z*o2_x*p3_x - a2_y*n2_z*o3_x*p2_x - a2_y*n3_x*o2_x*p2_z + a2_y*n3_x*o2_x*p3_z + a2_y*n3_x*o2_z*p2_x - a2_y*n3_x*o3_z*p2_x - a2_y*n3_z*o2_x*p3_x + a2_y*n3_z*o3_x*p2_x + a2_z*n2_x*o2_y*p3_x - a2_z*n2_x*o3_x*p2_y + a2_z*n2_x*o3_x*p3_y - a2_z*n2_x*o3_y*p3_x - a2_z*n2_y*o2_x*p3_x + a2_z*n2_y*o3_x*p2_x + a2_z*n3_x*o2_x*p2_y - a2_z*n3_x*o2_x*p3_y - a2_z*n3_x*o2_y*p2_x + a2_z*n3_x*o3_y*p2_x + a2_z*n3_y*o2_x*p3_x - a2_z*n3_y*o3_x*p2_x - a3_x*n2_x*o2_y*p2_z + a3_x*n2_x*o2_y*p3_z + a3_x*n2_x*o2_z*p2_y - a3_x*n2_x*o2_z*p3_y + a3_x*n2_x*o3_y*p2_z - a3_x*n2_x*o3_y*p3_z - a3_x*n2_x*o3_z*p2_y + a3_x*n2_x*o3_z*p3_y + a3_x*n2_y*o2_x*p2_z - a3_x*n2_y*o2_x*p3_z - a3_x*n2_y*o2_z*p2_x + a3_x*n2_y*o3_z*p2_x - a3_x*n2_z*o2_x*p2_y + a3_x*n2_z*o2_x*p3_y + a3_x*n2_z*o2_y*p2_x - a3_x*n2_z*o3_y*p2_x - a3_x*n3_y*o2_x*p2_z + a3_x*n3_y*o2_x*p3_z + a3_x*n3_y*o2_z*p2_x - a3_x*n3_y*o3_z*p2_x + a3_x*n3_z*o2_x*p2_y - a3_x*n3_z*o2_x*p3_y - a3_x*n3_z*o2_y*p2_x + a3_x*n3_z*o3_y*p2_x + a3_y*n2_x*o2_z*p3_x - a3_y*n2_x*o3_x*p2_z + a3_y*n2_x*o3_x*p3_z - a3_y*n2_x*o3_z*p3_x - a3_y*n2_z*o2_x*p3_x + a3_y*n2_z*o3_x*p2_x + a3_y*n3_x*o2_x*p2_z - a3_y*n3_x*o2_x*p3_z - a3_y*n3_x*o2_z*p2_x + a3_y*n3_x*o3_z*p2_x + a3_y*n3_z*o2_x*p3_x - a3_y*n3_z*o3_x*p2_x - a3_z*n2_x*o2_y*p3_x + a3_z*n2_x*o3_x*p2_y - a3_z*n2_x*o3_x*p3_y + a3_z*n2_x*o3_y*p3_x + a3_z*n2_y*o2_x*p3_x - a3_z*n2_y*o3_x*p2_x - a3_z*n3_x*o2_x*p2_y + a3_z*n3_x*o2_x*p3_y + a3_z*n3_x*o2_y*p2_x - a3_z*n3_x*o3_y*p2_x - a3_z*n3_y*o2_x*p3_x + a3_z*n3_y*o3_x*p2_x)/(a2_x*n2_y*o2_z - a2_x*n2_y*o3_z - a2_x*n2_z*o2_y + a2_x*n2_z*o3_y - a2_x*n3_y*o2_z + a2_x*n3_y*o3_z + a2_x*n3_z*o2_y - a2_x*n3_z*o3_y - a2_y*n2_x*o2_z + a2_y*n2_x*o3_z + a2_y*n2_z*o2_x - a2_y*n2_z*o3_x + a2_y*n3_x*o2_z - a2_y*n3_x*o3_z - a2_y*n3_z*o2_x + a2_y*n3_z*o3_x + a2_z*n2_x*o2_y - a2_z*n2_x*o3_y - a2_z*n2_y*o2_x + a2_z*n2_y*o3_x - a2_z*n3_x*o2_y + a2_z*n3_x*o3_y + a2_z*n3_y*o2_x - a2_z*n3_y*o3_x - a3_x*n2_y*o2_z + a3_x*n2_y*o3_z + a3_x*n2_z*o2_y - a3_x*n2_z*o3_y + a3_x*n3_y*o2_z - a3_x*n3_y*o3_z - a3_x*n3_z*o2_y + a3_x*n3_z*o3_y + a3_y*n2_x*o2_z - a3_y*n2_x*o3_z - a3_y*n2_z*o2_x + a3_y*n2_z*o3_x - a3_y*n3_x*o2_z + a3_y*n3_x*o3_z + a3_y*n3_z*o2_x - a3_y*n3_z*o3_x - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y + a3_z*n2_y*o2_x - a3_z*n2_y*o3_x + a3_z*n3_x*o2_y - a3_z*n3_x*o3_y - a3_z*n3_y*o2_x + a3_z*n3_y*o3_x), (a2_x*n2_y*o2_z*p3_y - a2_x*n2_y*o3_y*p2_z + a2_x*n2_y*o3_y*p3_z - a2_x*n2_y*o3_z*p3_y - a2_x*n2_z*o2_y*p3_y + a2_x*n2_z*o3_y*p2_y + a2_x*n3_y*o2_y*p2_z - a2_x*n3_y*o2_y*p3_z - a2_x*n3_y*o2_z*p2_y + a2_x*n3_y*o3_z*p2_y + a2_x*n3_z*o2_y*p3_y - a2_x*n3_z*o3_y*p2_y - a2_y*n2_x*o2_z*p3_y + a2_y*n2_x*o3_y*p2_z - a2_y*n2_x*o3_y*p3_z + a2_y*n2_x*o3_z*p3_y + a2_y*n2_z*o2_x*p3_y - a2_y*n2_z*o3_x*p3_y - a2_y*n2_z*o3_y*p2_x + a2_y*n2_z*o3_y*p3_x + a2_y*n3_x*o2_z*p3_y - a2_y*n3_x*o3_y*p2_z + a2_y*n3_x*o3_y*p3_z - a2_y*n3_x*o3_z*p3_y - a2_y*n3_y*o2_x*p2_z + a2_y*n3_y*o2_x*p3_z + a2_y*n3_y*o2_z*p2_x - a2_y*n3_y*o2_z*p3_x + a2_y*n3_y*o3_x*p2_z - a2_y*n3_y*o3_x*p3_z - a2_y*n3_y*o3_z*p2_x + a2_y*n3_y*o3_z*p3_x - a2_y*n3_z*o2_x*p3_y + a2_y*n3_z*o3_x*p3_y + a2_y*n3_z*o3_y*p2_x - a2_y*n3_z*o3_y*p3_x + a2_z*n2_x*o2_y*p3_y - a2_z*n2_x*o3_y*p2_y - a2_z*n2_y*o2_x*p3_y + a2_z*n2_y*o3_x*p3_y + a2_z*n2_y*o3_y*p2_x - a2_z*n2_y*o3_y*p3_x - a2_z*n3_x*o2_y*p3_y + a2_z*n3_x*o3_y*p2_y + a2_z*n3_y*o2_x*p2_y - a2_z*n3_y*o2_y*p2_x + a2_z*n3_y*o2_y*p3_x - a2_z*n3_y*o3_x*p2_y - a3_x*n2_y*o2_z*p3_y + a3_x*n2_y*o3_y*p2_z - a3_x*n2_y*o3_y*p3_z + a3_x*n2_y*o3_z*p3_y + a3_x*n2_z*o2_y*p3_y - a3_x*n2_z*o3_y*p2_y - a3_x*n3_y*o2_y*p2_z + a3_x*n3_y*o2_y*p3_z + a3_x*n3_y*o2_z*p2_y - a3_x*n3_y*o3_z*p2_y - a3_x*n3_z*o2_y*p3_y + a3_x*n3_z*o3_y*p2_y - a3_y*n2_x*o2_y*p2_z + a3_y*n2_x*o2_y*p3_z + a3_y*n2_x*o2_z*p2_y - a3_y*n2_x*o3_z*p2_y + a3_y*n2_y*o2_x*p2_z - a3_y*n2_y*o2_x*p3_z - a3_y*n2_y*o2_z*p2_x + a3_y*n2_y*o2_z*p3_x - a3_y*n2_y*o3_x*p2_z + a3_y*n2_y*o3_x*p3_z + a3_y*n2_y*o3_z*p2_x - a3_y*n2_y*o3_z*p3_x - a3_y*n2_z*o2_x*p2_y + a3_y*n2_z*o2_y*p2_x - a3_y*n2_z*o2_y*p3_x + a3_y*n2_z*o3_x*p2_y + a3_y*n3_x*o2_y*p2_z - a3_y*n3_x*o2_y*p3_z - a3_y*n3_x*o2_z*p2_y + a3_y*n3_x*o3_z*p2_y + a3_y*n3_z*o2_x*p2_y - a3_y*n3_z*o2_y*p2_x + a3_y*n3_z*o2_y*p3_x - a3_y*n3_z*o3_x*p2_y - a3_z*n2_x*o2_y*p3_y + a3_z*n2_x*o3_y*p2_y + a3_z*n2_y*o2_x*p3_y - a3_z*n2_y*o3_x*p3_y - a3_z*n2_y*o3_y*p2_x + a3_z*n2_y*o3_y*p3_x + a3_z*n3_x*o2_y*p3_y - a3_z*n3_x*o3_y*p2_y - a3_z*n3_y*o2_x*p2_y + a3_z*n3_y*o2_y*p2_x - a3_z*n3_y*o2_y*p3_x + a3_z*n3_y*o3_x*p2_y)/(a2_x*n2_y*o2_z - a2_x*n2_y*o3_z - a2_x*n2_z*o2_y + a2_x*n2_z*o3_y - a2_x*n3_y*o2_z + a2_x*n3_y*o3_z + a2_x*n3_z*o2_y - a2_x*n3_z*o3_y - a2_y*n2_x*o2_z + a2_y*n2_x*o3_z + a2_y*n2_z*o2_x - a2_y*n2_z*o3_x + a2_y*n3_x*o2_z - a2_y*n3_x*o3_z - a2_y*n3_z*o2_x + a2_y*n3_z*o3_x + a2_z*n2_x*o2_y - a2_z*n2_x*o3_y - a2_z*n2_y*o2_x + a2_z*n2_y*o3_x - a2_z*n3_x*o2_y + a2_z*n3_x*o3_y + a2_z*n3_y*o2_x - a2_z*n3_y*o3_x - a3_x*n2_y*o2_z + a3_x*n2_y*o3_z + a3_x*n2_z*o2_y - a3_x*n2_z*o3_y + a3_x*n3_y*o2_z - a3_x*n3_y*o3_z - a3_x*n3_z*o2_y + a3_x*n3_z*o3_y + a3_y*n2_x*o2_z - a3_y*n2_x*o3_z - a3_y*n2_z*o2_x + a3_y*n2_z*o3_x - a3_y*n3_x*o2_z + a3_y*n3_x*o3_z + a3_y*n3_z*o2_x - a3_y*n3_z*o3_x - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y + a3_z*n2_y*o2_x - a3_z*n2_y*o3_x + a3_z*n3_x*o2_y - a3_z*n3_x*o3_y - a3_z*n3_y*o2_x + a3_z*n3_y*o3_x), (a2_x*n2_y*o2_z*p3_z - a2_x*n2_y*o3_z*p2_z - a2_x*n2_z*o2_y*p3_z + a2_x*n2_z*o3_y*p3_z + a2_x*n2_z*o3_z*p2_y - a2_x*n2_z*o3_z*p3_y - a2_x*n3_y*o2_z*p3_z + a2_x*n3_y*o3_z*p2_z + a2_x*n3_z*o2_y*p2_z - a2_x*n3_z*o2_z*p2_y + a2_x*n3_z*o2_z*p3_y - a2_x*n3_z*o3_y*p2_z - a2_y*n2_x*o2_z*p3_z + a2_y*n2_x*o3_z*p2_z + a2_y*n2_z*o2_x*p3_z - a2_y*n2_z*o3_x*p3_z - a2_y*n2_z*o3_z*p2_x + a2_y*n2_z*o3_z*p3_x + a2_y*n3_x*o2_z*p3_z - a2_y*n3_x*o3_z*p2_z - a2_y*n3_z*o2_x*p2_z + a2_y*n3_z*o2_z*p2_x - a2_y*n3_z*o2_z*p3_x + a2_y*n3_z*o3_x*p2_z + a2_z*n2_x*o2_y*p3_z - a2_z*n2_x*o3_y*p3_z - a2_z*n2_x*o3_z*p2_y + a2_z*n2_x*o3_z*p3_y - a2_z*n2_y*o2_x*p3_z + a2_z*n2_y*o3_x*p3_z + a2_z*n2_y*o3_z*p2_x - a2_z*n2_y*o3_z*p3_x - a2_z*n3_x*o2_y*p3_z + a2_z*n3_x*o3_y*p3_z + a2_z*n3_x*o3_z*p2_y - a2_z*n3_x*o3_z*p3_y + a2_z*n3_y*o2_x*p3_z - a2_z*n3_y*o3_x*p3_z - a2_z*n3_y*o3_z*p2_x + a2_z*n3_y*o3_z*p3_x + a2_z*n3_z*o2_x*p2_y - a2_z*n3_z*o2_x*p3_y - a2_z*n3_z*o2_y*p2_x + a2_z*n3_z*o2_y*p3_x - a2_z*n3_z*o3_x*p2_y + a2_z*n3_z*o3_x*p3_y + a2_z*n3_z*o3_y*p2_x - a2_z*n3_z*o3_y*p3_x - a3_x*n2_y*o2_z*p3_z + a3_x*n2_y*o3_z*p2_z + a3_x*n2_z*o2_y*p3_z - a3_x*n2_z*o3_y*p3_z - a3_x*n2_z*o3_z*p2_y + a3_x*n2_z*o3_z*p3_y + a3_x*n3_y*o2_z*p3_z - a3_x*n3_y*o3_z*p2_z - a3_x*n3_z*o2_y*p2_z + a3_x*n3_z*o2_z*p2_y - a3_x*n3_z*o2_z*p3_y + a3_x*n3_z*o3_y*p2_z + a3_y*n2_x*o2_z*p3_z - a3_y*n2_x*o3_z*p2_z - a3_y*n2_z*o2_x*p3_z + a3_y*n2_z*o3_x*p3_z + a3_y*n2_z*o3_z*p2_x - a3_y*n2_z*o3_z*p3_x - a3_y*n3_x*o2_z*p3_z + a3_y*n3_x*o3_z*p2_z + a3_y*n3_z*o2_x*p2_z - a3_y*n3_z*o2_z*p2_x + a3_y*n3_z*o2_z*p3_x - a3_y*n3_z*o3_x*p2_z - a3_z*n2_x*o2_y*p2_z + a3_z*n2_x*o2_z*p2_y - a3_z*n2_x*o2_z*p3_y + a3_z*n2_x*o3_y*p2_z + a3_z*n2_y*o2_x*p2_z - a3_z*n2_y*o2_z*p2_x + a3_z*n2_y*o2_z*p3_x - a3_z*n2_y*o3_x*p2_z - a3_z*n2_z*o2_x*p2_y + a3_z*n2_z*o2_x*p3_y + a3_z*n2_z*o2_y*p2_x - a3_z*n2_z*o2_y*p3_x + a3_z*n2_z*o3_x*p2_y - a3_z*n2_z*o3_x*p3_y - a3_z*n2_z*o3_y*p2_x + a3_z*n2_z*o3_y*p3_x + a3_z*n3_x*o2_y*p2_z - a3_z*n3_x*o2_z*p2_y + a3_z*n3_x*o2_z*p3_y - a3_z*n3_x*o3_y*p2_z - a3_z*n3_y*o2_x*p2_z + a3_z*n3_y*o2_z*p2_x - a3_z*n3_y*o2_z*p3_x + a3_z*n3_y*o3_x*p2_z)/(a2_x*n2_y*o2_z - a2_x*n2_y*o3_z - a2_x*n2_z*o2_y + a2_x*n2_z*o3_y - a2_x*n3_y*o2_z + a2_x*n3_y*o3_z + a2_x*n3_z*o2_y - a2_x*n3_z*o3_y - a2_y*n2_x*o2_z + a2_y*n2_x*o3_z + a2_y*n2_z*o2_x - a2_y*n2_z*o3_x + a2_y*n3_x*o2_z - a2_y*n3_x*o3_z - a2_y*n3_z*o2_x + a2_y*n3_z*o3_x + a2_z*n2_x*o2_y - a2_z*n2_x*o3_y - a2_z*n2_y*o2_x + a2_z*n2_y*o3_x - a2_z*n3_x*o2_y + a2_z*n3_x*o3_y + a2_z*n3_y*o2_x - a2_z*n3_y*o3_x - a3_x*n2_y*o2_z + a3_x*n2_y*o3_z + a3_x*n2_z*o2_y - a3_x*n2_z*o3_y + a3_x*n3_y*o2_z - a3_x*n3_y*o3_z - a3_x*n3_z*o2_y + a3_x*n3_z*o3_y + a3_y*n2_x*o2_z - a3_y*n2_x*o3_z - a3_y*n2_z*o2_x + a3_y*n2_z*o3_x - a3_y*n3_x*o2_z + a3_y*n3_x*o3_z + a3_y*n3_z*o2_x - a3_y*n3_z*o3_x - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y + a3_z*n2_y*o2_x - a3_z*n2_y*o3_x + a3_z*n3_x*o2_y - a3_z*n3_x*o3_y - a3_z*n3_y*o2_x + a3_z*n3_y*o3_x)))'

展开后的样子:

FiniteSet(((a2_x*n2_y*o2_z*p3_x - a2_x*n2_y*o3_x*p2_z + a2_x*n2_y*o3_x*p3_z -
    a2_x*n2_y*o3_z*p3_x - a2_x*n2_z*o2_y*p3_x + a2_x*n2_z*o3_x*p2_y -
    a2_x*n2_z*o3_x*p3_y + a2_x*n2_z*o3_y*p3_x + a2_x*n3_x*o2_y*p2_z -
    a2_x*n3_x*o2_y*p3_z - a2_x*n3_x*o2_z*p2_y + a2_x*n3_x*o2_z*p3_y -
    a2_x*n3_x*o3_y*p2_z + a2_x*n3_x*o3_y*p3_z + a2_x*n3_x*o3_z*p2_y -
    a2_x*n3_x*o3_z*p3_y - a2_x*n3_y*o2_z*p3_x + a2_x*n3_y*o3_x*p2_z -
    a2_x*n3_y*o3_x*p3_z + a2_x*n3_y*o3_z*p3_x + a2_x*n3_z*o2_y*p3_x -
    a2_x*n3_z*o3_x*p2_y + a2_x*n3_z*o3_x*p3_y - a2_x*n3_z*o3_y*p3_x -
    a2_y*n2_x*o2_z*p3_x + a2_y*n2_x*o3_x*p2_z - a2_y*n2_x*o3_x*p3_z +
    a2_y*n2_x*o3_z*p3_x + a2_y*n2_z*o2_x*p3_x - a2_y*n2_z*o3_x*p2_x -
    a2_y*n3_x*o2_x*p2_z + a2_y*n3_x*o2_x*p3_z + a2_y*n3_x*o2_z*p2_x -
    a2_y*n3_x*o3_z*p2_x - a2_y*n3_z*o2_x*p3_x + a2_y*n3_z*o3_x*p2_x +
    a2_z*n2_x*o2_y*p3_x - a2_z*n2_x*o3_x*p2_y + a2_z*n2_x*o3_x*p3_y -
    a2_z*n2_x*o3_y*p3_x - a2_z*n2_y*o2_x*p3_x + a2_z*n2_y*o3_x*p2_x +
    a2_z*n3_x*o2_x*p2_y - a2_z*n3_x*o2_x*p3_y - a2_z*n3_x*o2_y*p2_x +
    a2_z*n3_x*o3_y*p2_x + a2_z*n3_y*o2_x*p3_x - a2_z*n3_y*o3_x*p2_x -
    a3_x*n2_x*o2_y*p2_z + a3_x*n2_x*o2_y*p3_z + a3_x*n2_x*o2_z*p2_y -
    a3_x*n2_x*o2_z*p3_y + a3_x*n2_x*o3_y*p2_z - a3_x*n2_x*o3_y*p3_z -
    a3_x*n2_x*o3_z*p2_y + a3_x*n2_x*o3_z*p3_y + a3_x*n2_y*o2_x*p2_z -
    a3_x*n2_y*o2_x*p3_z - a3_x*n2_y*o2_z*p2_x + a3_x*n2_y*o3_z*p2_x -
    a3_x*n2_z*o2_x*p2_y + a3_x*n2_z*o2_x*p3_y + a3_x*n2_z*o2_y*p2_x -
    a3_x*n2_z*o3_y*p2_x - a3_x*n3_y*o2_x*p2_z + a3_x*n3_y*o2_x*p3_z +
    a3_x*n3_y*o2_z*p2_x - a3_x*n3_y*o3_z*p2_x + a3_x*n3_z*o2_x*p2_y -
    a3_x*n3_z*o2_x*p3_y - a3_x*n3_z*o2_y*p2_x + a3_x*n3_z*o3_y*p2_x +
    a3_y*n2_x*o2_z*p3_x - a3_y*n2_x*o3_x*p2_z + a3_y*n2_x*o3_x*p3_z -
    a3_y*n2_x*o3_z*p3_x - a3_y*n2_z*o2_x*p3_x + a3_y*n2_z*o3_x*p2_x +
    a3_y*n3_x*o2_x*p2_z - a3_y*n3_x*o2_x*p3_z - a3_y*n3_x*o2_z*p2_x +
    a3_y*n3_x*o3_z*p2_x + a3_y*n3_z*o2_x*p3_x - a3_y*n3_z*o3_x*p2_x -
    a3_z*n2_x*o2_y*p3_x + a3_z*n2_x*o3_x*p2_y - a3_z*n2_x*o3_x*p3_y +
    a3_z*n2_x*o3_y*p3_x + a3_z*n2_y*o2_x*p3_x - a3_z*n2_y*o3_x*p2_x -
    a3_z*n3_x*o2_x*p2_y + a3_z*n3_x*o2_x*p3_y + a3_z*n3_x*o2_y*p2_x -
    a3_z*n3_x*o3_y*p2_x - a3_z*n3_y*o2_x*p3_x +
    a3_z*n3_y*o3_x*p2_x)/(a2_x*n2_y*o2_z - a2_x*n2_y*o3_z - a2_x*n2_z*o2_y +
    a2_x*n2_z*o3_y - a2_x*n3_y*o2_z + a2_x*n3_y*o3_z + a2_x*n3_z*o2_y -
    a2_x*n3_z*o3_y - a2_y*n2_x*o2_z + a2_y*n2_x*o3_z + a2_y*n2_z*o2_x -
    a2_y*n2_z*o3_x + a2_y*n3_x*o2_z - a2_y*n3_x*o3_z - a2_y*n3_z*o2_x +
    a2_y*n3_z*o3_x + a2_z*n2_x*o2_y - a2_z*n2_x*o3_y - a2_z*n2_y*o2_x +
    a2_z*n2_y*o3_x - a2_z*n3_x*o2_y + a2_z*n3_x*o3_y + a2_z*n3_y*o2_x -
    a2_z*n3_y*o3_x - a3_x*n2_y*o2_z + a3_x*n2_y*o3_z + a3_x*n2_z*o2_y -
    a3_x*n2_z*o3_y + a3_x*n3_y*o2_z - a3_x*n3_y*o3_z - a3_x*n3_z*o2_y +
    a3_x*n3_z*o3_y + a3_y*n2_x*o2_z - a3_y*n2_x*o3_z - a3_y*n2_z*o2_x +
    a3_y*n2_z*o3_x - a3_y*n3_x*o2_z + a3_y*n3_x*o3_z + a3_y*n3_z*o2_x -
    a3_y*n3_z*o3_x - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y + a3_z*n2_y*o2_x -
    a3_z*n2_y*o3_x + a3_z*n3_x*o2_y - a3_z*n3_x*o3_y - a3_z*n3_y*o2_x +
    a3_z*n3_y*o3_x), (a2_x*n2_y*o2_z*p3_y - a2_x*n2_y*o3_y*p2_z +
    a2_x*n2_y*o3_y*p3_z - a2_x*n2_y*o3_z*p3_y - a2_x*n2_z*o2_y*p3_y +
    a2_x*n2_z*o3_y*p2_y + a2_x*n3_y*o2_y*p2_z - a2_x*n3_y*o2_y*p3_z -
    a2_x*n3_y*o2_z*p2_y + a2_x*n3_y*o3_z*p2_y + a2_x*n3_z*o2_y*p3_y -
    a2_x*n3_z*o3_y*p2_y - a2_y*n2_x*o2_z*p3_y + a2_y*n2_x*o3_y*p2_z -
    a2_y*n2_x*o3_y*p3_z + a2_y*n2_x*o3_z*p3_y + a2_y*n2_z*o2_x*p3_y -
    a2_y*n2_z*o3_x*p3_y - a2_y*n2_z*o3_y*p2_x + a2_y*n2_z*o3_y*p3_x +
    a2_y*n3_x*o2_z*p3_y - a2_y*n3_x*o3_y*p2_z + a2_y*n3_x*o3_y*p3_z -
    a2_y*n3_x*o3_z*p3_y - a2_y*n3_y*o2_x*p2_z + a2_y*n3_y*o2_x*p3_z +
    a2_y*n3_y*o2_z*p2_x - a2_y*n3_y*o2_z*p3_x + a2_y*n3_y*o3_x*p2_z -
    a2_y*n3_y*o3_x*p3_z - a2_y*n3_y*o3_z*p2_x + a2_y*n3_y*o3_z*p3_x -
    a2_y*n3_z*o2_x*p3_y + a2_y*n3_z*o3_x*p3_y + a2_y*n3_z*o3_y*p2_x -
    a2_y*n3_z*o3_y*p3_x + a2_z*n2_x*o2_y*p3_y - a2_z*n2_x*o3_y*p2_y -
    a2_z*n2_y*o2_x*p3_y + a2_z*n2_y*o3_x*p3_y + a2_z*n2_y*o3_y*p2_x -
    a2_z*n2_y*o3_y*p3_x - a2_z*n3_x*o2_y*p3_y + a2_z*n3_x*o3_y*p2_y +
    a2_z*n3_y*o2_x*p2_y - a2_z*n3_y*o2_y*p2_x + a2_z*n3_y*o2_y*p3_x -
    a2_z*n3_y*o3_x*p2_y - a3_x*n2_y*o2_z*p3_y + a3_x*n2_y*o3_y*p2_z -
    a3_x*n2_y*o3_y*p3_z + a3_x*n2_y*o3_z*p3_y + a3_x*n2_z*o2_y*p3_y -
    a3_x*n2_z*o3_y*p2_y - a3_x*n3_y*o2_y*p2_z + a3_x*n3_y*o2_y*p3_z +
    a3_x*n3_y*o2_z*p2_y - a3_x*n3_y*o3_z*p2_y - a3_x*n3_z*o2_y*p3_y +
    a3_x*n3_z*o3_y*p2_y - a3_y*n2_x*o2_y*p2_z + a3_y*n2_x*o2_y*p3_z +
    a3_y*n2_x*o2_z*p2_y - a3_y*n2_x*o3_z*p2_y + a3_y*n2_y*o2_x*p2_z -
    a3_y*n2_y*o2_x*p3_z - a3_y*n2_y*o2_z*p2_x + a3_y*n2_y*o2_z*p3_x -
    a3_y*n2_y*o3_x*p2_z + a3_y*n2_y*o3_x*p3_z + a3_y*n2_y*o3_z*p2_x -
    a3_y*n2_y*o3_z*p3_x - a3_y*n2_z*o2_x*p2_y + a3_y*n2_z*o2_y*p2_x -
    a3_y*n2_z*o2_y*p3_x + a3_y*n2_z*o3_x*p2_y + a3_y*n3_x*o2_y*p2_z -
    a3_y*n3_x*o2_y*p3_z - a3_y*n3_x*o2_z*p2_y + a3_y*n3_x*o3_z*p2_y +
    a3_y*n3_z*o2_x*p2_y - a3_y*n3_z*o2_y*p2_x + a3_y*n3_z*o2_y*p3_x -
    a3_y*n3_z*o3_x*p2_y - a3_z*n2_x*o2_y*p3_y + a3_z*n2_x*o3_y*p2_y +
    a3_z*n2_y*o2_x*p3_y - a3_z*n2_y*o3_x*p3_y - a3_z*n2_y*o3_y*p2_x +
    a3_z*n2_y*o3_y*p3_x + a3_z*n3_x*o2_y*p3_y - a3_z*n3_x*o3_y*p2_y -
    a3_z*n3_y*o2_x*p2_y + a3_z*n3_y*o2_y*p2_x - a3_z*n3_y*o2_y*p3_x +
    a3_z*n3_y*o3_x*p2_y)/(a2_x*n2_y*o2_z - a2_x*n2_y*o3_z -
    a2_x*n2_z*o2_y + a2_x*n2_z*o3_y - a2_x*n3_y*o2_z + a2_x*n3_y*o3_z +
    a2_x*n3_z*o2_y - a2_x*n3_z*o3_y - a2_y*n2_x*o2_z + a2_y*n2_x*o3_z +
    a2_y*n2_z*o2_x - a2_y*n2_z*o3_x + a2_y*n3_x*o2_z - a2_y*n3_x*o3_z -
    a2_y*n3_z*o2_x + a2_y*n3_z*o3_x + a2_z*n2_x*o2_y - a2_z*n2_x*o3_y -
    a2_z*n2_y*o2_x + a2_z*n2_y*o3_x - a2_z*n3_x*o2_y + a2_z*n3_x*o3_y +
    a2_z*n3_y*o2_x - a2_z*n3_y*o3_x - a3_x*n2_y*o2_z + a3_x*n2_y*o3_z +
    a3_x*n2_z*o2_y - a3_x*n2_z*o3_y + a3_x*n3_y*o2_z - a3_x*n3_y*o3_z -
    a3_x*n3_z*o2_y + a3_x*n3_z*o3_y + a3_y*n2_x*o2_z - a3_y*n2_x*o3_z -
    a3_y*n2_z*o2_x + a3_y*n2_z*o3_x - a3_y*n3_x*o2_z + a3_y*n3_x*o3_z +
    a3_y*n3_z*o2_x - a3_y*n3_z*o3_x - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y +
    a3_z*n2_y*o2_x - a3_z*n2_y*o3_x + a3_z*n3_x*o2_y - a3_z*n3_x*o3_y -
    a3_z*n3_y*o2_x + a3_z*n3_y*o3_x), (a2_x*n2_y*o2_z*p3_z -
    a2_x*n2_y*o3_z*p2_z - a2_x*n2_z*o2_y*p3_z + a2_x*n2_z*o3_y*p3_z +
    a2_x*n2_z*o3_z*p2_y - a2_x*n2_z*o3_z*p3_y - a2_x*n3_y*o2_z*p3_z +
    a2_x*n3_y*o3_z*p2_z + a2_x*n3_z*o2_y*p2_z - a2_x*n3_z*o2_z*p2_y +
    a2_x*n3_z*o2_z*p3_y - a2_x*n3_z*o3_y*p2_z - a2_y*n2_x*o2_z*p3_z +
    a2_y*n2_x*o3_z*p2_z + a2_y*n2_z*o2_x*p3_z - a2_y*n2_z*o3_x*p3_z -
    a2_y*n2_z*o3_z*p2_x + a2_y*n2_z*o3_z*p3_x + a2_y*n3_x*o2_z*p3_z -
    a2_y*n3_x*o3_z*p2_z - a2_y*n3_z*o2_x*p2_z + a2_y*n3_z*o2_z*p2_x -
    a2_y*n3_z*o2_z*p3_x + a2_y*n3_z*o3_x*p2_z + a2_z*n2_x*o2_y*p3_z -
    a2_z*n2_x*o3_y*p3_z - a2_z*n2_x*o3_z*p2_y + a2_z*n2_x*o3_z*p3_y -
    a2_z*n2_y*o2_x*p3_z + a2_z*n2_y*o3_x*p3_z + a2_z*n2_y*o3_z*p2_x -
    a2_z*n2_y*o3_z*p3_x - a2_z*n3_x*o2_y*p3_z + a2_z*n3_x*o3_y*p3_z +
    a2_z*n3_x*o3_z*p2_y - a2_z*n3_x*o3_z*p3_y + a2_z*n3_y*o2_x*p3_z -
    a2_z*n3_y*o3_x*p3_z - a2_z*n3_y*o3_z*p2_x + a2_z*n3_y*o3_z*p3_x +
    a2_z*n3_z*o2_x*p2_y - a2_z*n3_z*o2_x*p3_y - a2_z*n3_z*o2_y*p2_x +
    a2_z*n3_z*o2_y*p3_x - a2_z*n3_z*o3_x*p2_y + a2_z*n3_z*o3_x*p3_y +
    a2_z*n3_z*o3_y*p2_x - a2_z*n3_z*o3_y*p3_x - a3_x*n2_y*o2_z*p3_z +
    a3_x*n2_y*o3_z*p2_z + a3_x*n2_z*o2_y*p3_z - a3_x*n2_z*o3_y*p3_z -
    a3_x*n2_z*o3_z*p2_y + a3_x*n2_z*o3_z*p3_y + a3_x*n3_y*o2_z*p3_z -
    a3_x*n3_y*o3_z*p2_z - a3_x*n3_z*o2_y*p2_z + a3_x*n3_z*o2_z*p2_y -
    a3_x*n3_z*o2_z*p3_y + a3_x*n3_z*o3_y*p2_z + a3_y*n2_x*o2_z*p3_z -
    a3_y*n2_x*o3_z*p2_z - a3_y*n2_z*o2_x*p3_z + a3_y*n2_z*o3_x*p3_z +
    a3_y*n2_z*o3_z*p2_x - a3_y*n2_z*o3_z*p3_x - a3_y*n3_x*o2_z*p3_z +
    a3_y*n3_x*o3_z*p2_z + a3_y*n3_z*o2_x*p2_z - a3_y*n3_z*o2_z*p2_x +
    a3_y*n3_z*o2_z*p3_x - a3_y*n3_z*o3_x*p2_z - a3_z*n2_x*o2_y*p2_z +
    a3_z*n2_x*o2_z*p2_y - a3_z*n2_x*o2_z*p3_y + a3_z*n2_x*o3_y*p2_z +
    a3_z*n2_y*o2_x*p2_z - a3_z*n2_y*o2_z*p2_x + a3_z*n2_y*o2_z*p3_x -
    a3_z*n2_y*o3_x*p2_z - a3_z*n2_z*o2_x*p2_y + a3_z*n2_z*o2_x*p3_y +
    a3_z*n2_z*o2_y*p2_x - a3_z*n2_z*o2_y*p3_x + a3_z*n2_z*o3_x*p2_y -
    a3_z*n2_z*o3_x*p3_y - a3_z*n2_z*o3_y*p2_x + a3_z*n2_z*o3_y*p3_x +
    a3_z*n3_x*o2_y*p2_z - a3_z*n3_x*o2_z*p2_y + a3_z*n3_x*o2_z*p3_y -
    a3_z*n3_x*o3_y*p2_z - a3_z*n3_y*o2_x*p2_z + a3_z*n3_y*o2_z*p2_x -
    a3_z*n3_y*o2_z*p3_x + a3_z*n3_y*o3_x*p2_z)/(a2_x*n2_y*o2_z -
    a2_x*n2_y*o3_z - a2_x*n2_z*o2_y + a2_x*n2_z*o3_y - a2_x*n3_y*o2_z +
    a2_x*n3_y*o3_z + a2_x*n3_z*o2_y - a2_x*n3_z*o3_y - a2_y*n2_x*o2_z +
    a2_y*n2_x*o3_z + a2_y*n2_z*o2_x - a2_y*n2_z*o3_x + a2_y*n3_x*o2_z -
    a2_y*n3_x*o3_z - a2_y*n3_z*o2_x + a2_y*n3_z*o3_x + a2_z*n2_x*o2_y -
    a2_z*n2_x*o3_y - a2_z*n2_y*o2_x + a2_z*n2_y*o3_x - a2_z*n3_x*o2_y +
    a2_z*n3_x*o3_y + a2_z*n3_y*o2_x - a2_z*n3_y*o3_x - a3_x*n2_y*o2_z +
    a3_x*n2_y*o3_z + a3_x*n2_z*o2_y - a3_x*n2_z*o3_y + a3_x*n3_y*o2_z -
    a3_x*n3_y*o3_z - a3_x*n3_z*o2_y + a3_x*n3_z*o3_y + a3_y*n2_x*o2_z
    - a3_y*n2_x*o3_z - a3_y*n2_z*o2_x + a3_y*n2_z*o3_x - a3_y*n3_x*o2_z +
    a3_y*n3_x*o3_z + a3_y*n3_z*o2_x - a3_y*n3_z*o3_x
    - a3_z*n2_x*o2_y + a3_z*n2_x*o3_y + a3_z*n2_y*o2_x - a3_z*n2_y*o3_x +
    a3_z*n3_x*o2_y - a3_z*n3_x*o3_y - a3_z*n3_y*o2_x + a3_z*n3_y*o3_x)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多