用 sympy 求解线性方程组需要永远

如何解决用 sympy 求解线性方程组需要永远

作为矩阵乘法的结果,我有一个由 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,p2_x],[n2_y,p2_y],[n2_z,p2_z],[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,p3_x],[n3_y,p3_y],[n3_z,p3_z],1]])
p_x,p_y,p_z = symbols('p_x p_y p_z',real=True)
R_p = Matrix([[0,p_x],p_y],p_z],1]])

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

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

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

提前致谢。

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

解决方法

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

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

话虽如此,在 sympy 1.7 和之后的 linsolve 的性能方面有了很多改进(即当前的 master 分支将在某个时候变成 1.8)。我也期待 1.8 之后的进一步改进。

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

In [33]: %time res = linsolve([eq1[0,3],eq1[1,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)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?