如何为数据数组格式化 scipy.optimize.fsolve 的参数

How to format the argument of scipy.optimize.fsolve for arrays of data

我想使用求解器 (scipy.optimize.fsolve) 求解函数 fun(x,y) 的根。在这种情况下,我希望参数 (y) 是一个数组(例如,一个数据数组)。我还想避免使用 for 循环为 y 中的每个值调用 fsolve。

在将 arg (y) 指定为数组时,我收到一条错误消息,指出函数调用的结果不是正确的浮点数组。如果我将“数据”设为元组而不是数组,则会出现其他错误。

这是问题的 MWE:

import numpy as np
from scipy.optimize import fsolve

def fun(x, y):
    return x+y

data = np.array([1, 2, 3, 4])
x = fsolve(fun, x0=0, args=data)
print(x)

如何修正 fsolve 的输入,以便它为数组中的每个 y 值求解 fun(x,y) 的根(不使用 for 循环)?

传递给 fsolve 的函数至少接受一个(可能是矢量)参数和 returns 一个与提到的长度相同的值 here.

在你的例子中,你传递的是 x0=0args=np.array([1,2,3,4]) 来解决。 fun 的 return 值与 x0 的长度不同(x0 是标量,args 是形状为 (4,)[=24= 的数组]).

以下代码解决了您的问题:

import numpy as np
from scipy.optimize import fsolve

def fun(x, y):
    return x+y

data = np.array([1, 2, 3, 4])
x = fsolve(fun, x0=np.array([0,0,0,0]), args=data)
print(x)