如何为数据数组格式化 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=0 和 args=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)
我想使用求解器 (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=0 和 args=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)