用矩阵方程优化根

时间:2017-02-06 02:28:01

标签: numpy matrix optimization scipy

我正在尝试使用optimize.root

解决以下线性系统
AX = b

使用以下代码。

A = [[0,1,0],[2,1,0],[1,4,1]]

def foo(X):
   b = np.matrix([2,1,1])
   out = np.dot(A,X) - b
   return out.tolist()

sol = scipy.optimize.root(foo,[0,0,0])

我知道我可以简单地使用numpy.linalg.solve来轻松完成此操作。但我实际上是在尝试解决矩阵形式的非线性系统。请参阅我的问题here。所以我需要找到一种方法来使这个方法工作。要做到这一点,我试图在这个简单的情况下解决这个问题。但我收到了错误

TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'foo'.Shape should be (3,) but it is (1, 3).

从我从其他类似的stackoverflow问题中读到的这种情况发生了,因为foo函数的输出与初始猜测的形状不兼容[0,0,0]

当然有一种方法可以使用scipy.optimize.root来解决这个等式。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

(我假设B中的大写.dotA的拼写错误。)

尝试将np.array用于bnp.matrix创建一个"行向量",即形状(1, 3),而您的初始猜测形状为(3,)