首页 > 解决方案 > 在数组上使用来自 scipy.optimize 的 fsolve

问题描述

我正在尝试用 python 的 fsolve 求解方程组。我想将二维数组传递给函数,然后返回列的组合。该函数似乎有效,但我不断收到错误“IndexError:数组索引过多”。我看不出我做错了什么。如果有人可以帮助我并解释我做错了什么(以及我可以做些什么),我将非常感激。产生错误的代码如下:

import numpy as np
from scipy.optimize import fsolve

x0 =np.array([[1,0],[1,0]])

def f(x):
    x1 = x[:,0]
    x2 = x[:,1]
    return np.array([x1**2-4,x2**2-9])

fsolve(f,x0)

谢谢!

标签: pythonarraysnumpyscipy-optimize

解决方案


您在 的返回值中使用数组,f(x)它只需要两个变量,x1并且x2(这是发生索引错误的地方)。x有 4 个条目,所以你可以这样称呼它:

import numpy as np
from scipy.optimize import fsolve

x0 = np.array([[1,0],[1,0]])

def f(x):
    #x1 = x[:,0]
    #x2 = x[:,1]
    x1 = x[0]
    x2 = x[1]
    return np.array([x1**2-4, x2**2-9])

#fsolve(f, x0)
print(fsolve(f, x0[:,0]))
print(fsolve(f, x0[:,1]))

这会产生(注意可能的迭代问题):

[2. 3.]
[0. 0.]

不确定这是否回答了它,但如果你想处理整个数组,你将不得不逐行(或按列)处理它。


推荐阅读