【发布时间】: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_2 和 T_3 是变换矩阵,R_p 也是变换矩阵,但具有(已知的)零旋转。我们只寻找翻译。
【问题讨论】:
-
对于具有 12 个未知数的 4x4 矩阵,表达式
T_3**-1相当繁重。有没有可能写出方程而不需要计算逆?
标签: python python-3.x matrix sympy symbolic-math