Numpy 用矩阵方程优化.root
我正在尝试使用optimize.root解决以下线性系统Numpy 用矩阵方程优化.root,numpy,matrix,optimization,scipy,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来轻松完成这项工作。但我实际上是在试图
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
来轻松完成这项工作。但我实际上是在试图解决一个矩阵形式的非线性系统。见我的问题。所以我需要找到一种方法让这个方法有效。为了做到这一点,我试图在这个简单的案例中解决这个问题。但是我得到了错误
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解决这个方程。有人能帮忙吗?(我假设你的.dot
中的大写字母B
是a
的拼写错误)
尝试将
np.array
用于b
<代码>np。矩阵创建一个“行向量”,即形状(1,3)
,而您最初的猜测是形状(3,)
对不起。是的,它是a
的输入错误。如何将函数foo
的输出转换为形状(3,)
?对b
使用np.array
不起作用吗?我很确定您不需要.tolist()
。不,不幸的是,您仍然会遇到相同的错误。我试着变换矩阵。但还是不行。我使用了b=np.array([2,1,1])
奇怪,对我有效。您发布的代码是否与您实际使用的代码相同?我这样问是因为,如果你用np.matrix
代替A
列表,它就不起作用了。