我需要为三个变量求解3x3方程矩阵:alpha,beta和gamma。方程矩阵对应于每个方程的另一个3x3值矩阵,在示例代码中名为rot
。我一直在尝试使用scipy.optimize.fsolve
和其他一些非线性求解器,但仍然遇到输入大小3对应于alpha,beta和gamma与输出大小不同的问题。
def solveNonLinear(rot):
#The function of alpah beta and gamma
def F(vals):
a = vals[0]
b = vals[1]
y = vals[2]
#matrix of equations
r = [math.cos(b)*math.cos(y) + math.sin(a)*math.sin(b)*math.sin(y),
math.cos(a)*math.sin(y),
math.cos(b)*math.sin(a)*math.sin(y) - math.sin(b)*math.cos(y),
math.sin(a)*math.sin(b)*math.cos(y) - math.cos(b)*math.sin(y),
math.cos(a)*math.cos(y),
math.sin(b)*math.sin(y) + math.cos(b)*math.sin(a)*math.cos(y),
math.cos(a)*math.sin(b),
-1*math.sin(a),
math.cos(a)*math.cos(b)]
diff = np.array(r) - np.ravel(rot)
return diff
x = scipy.optimize.fsolve(F, [0, 0, 0])
return x
在上面的a
函数中,b
和y
分别对应alpha,beta和gamma。我得到的错误是TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'F'.
在matlab中,这可以通过三个输入和九个输出来完成。我正在寻找一种方法,我可以用三个输入和九个输出来解决这个问题,而不是改变输出的数量,所有的约束都是必要的。