我正在尝试使用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来解决这个等式。有人可以帮忙吗?
答案 0 :(得分:1)
(我假设B
中的大写.dot
是A
的拼写错误。)
尝试将np.array
用于b
。 np.matrix
创建一个"行向量",即形状(1, 3)
,而您的初始猜测形状为(3,)
。