求解python中过约束非线性方程组

时间:2015-04-15 20:56:42

标签: python matlab matrix

我需要为三个变量求解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函数中,by分别对应alpha,beta和gamma。我得到的错误是TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'F'.在matlab中,这可以通过三个输入和九个输出来完成。我正在寻找一种方法,我可以用三个输入和九个输出来解决这个问题,而不是改变输出的数量,所有的约束都是必要的。

0 个答案:

没有答案