【问题标题】:optimize.root with a matrix equationoptimize.root 与矩阵方程
【发布时间】:2017-06-22 21:51:26
【问题描述】:

我正在尝试使用 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 来解决这个等式。有人可以帮忙吗?

【问题讨论】:

    标签: numpy matrix optimization scipy


    【解决方案1】:

    (我假设.dot 中的大写字母BA 的拼写错误。)

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

    【讨论】:

    • 对不起。是的,这是A 的错字。
    • 如何将函数foo的输出转换为(3,)的形状?
    • 不使用np.arrayb 工作?而且我很确定您不需要.tolist()
    • 不,不幸的是,您仍然会遇到同样的错误。我尝试转置矩阵。但仍然不起作用。我用b = np.array([2,1,1])
    • 奇怪,对我有用。您发布的代码与您实际使用的代码相同吗?我之所以问,是因为例如,如果您将 np.matrix 用于 A 而不是列表列表,它将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2019-09-17
    • 2015-01-24
    • 2016-12-11
    相关资源
    最近更新 更多