Python中的fsolve函数失败,为“0”;函数调用的结果不是正确的浮点数组;

Python中的fsolve函数失败,为“0”;函数调用的结果不是正确的浮点数组;,python,numpy,math,Python,Numpy,Math,我正在尝试运行一个使用np.array中的多个值作为常量的解算器。我想让它遍历它们,但每次遍历时,它都会给我一个错误:minpack.error:函数调用的结果不是一个正确的浮点数组。代码如下: import numpy as np from scipy.optimize import fsolve G = np.linspace(8,12,3) a = [5, 3, 7] b = [10, 4, 5] def equation1(xy, G): ep, uc = xy

我正在尝试运行一个使用np.array中的多个值作为常量的解算器。我想让它遍历它们,但每次遍历时,它都会给我一个错误:minpack.error:函数调用的结果不是一个正确的浮点数组。代码如下:

import numpy as np
from scipy.optimize import fsolve    

G = np.linspace(8,12,3)
a = [5, 3, 7]
b = [10, 4, 5]

def equation1(xy, G):
    ep, uc = xy
    return(2*981*7.62*((ep**-4.7) - 1) - 0.01*(uc/ep - 399)**2,
           (5.34*G - a) - (uc/ep - 399)*7.51*(1 - ep))

EP1 = []
UC1 = []

for i in range(0,len(G)):
    ep1, uc1 = fsolve(equation1, (a[i], b[i]), G[i])
    EP1.append(ep1)
    UC1.append(uc1)

我一直在试图找出问题出在哪里,我认为这与函数返回中的部分有关,它说(5.34*G-a)。如果有人能帮忙,我会非常感激。谢谢顺便说一句,a和b数字不现实,因此函数可能无法正确收敛。

等式1
的返回调用中,您引用了超出范围的变量
a
a
实际上是一个列表,因此minpack会抱怨您试图返回的对象的形状。在我看来,你只是忘记了用
ep
交换这个
a
。此外,您应该使用root而不是fsolve,请参阅。这使得:

import numpy as np
from scipy.optimize import root


def func(xy, G):
    ep, uc = xy
    num = 2 * 981 * 7.62
    return (num * (ep ** -4.7 - 1) - 0.01 * (uc / ep - 399) ** 2,
            5.34 * G - ep - (uc / ep - 399) * 7.51 * (1 - ep))


G = np.linspace(8, 12, 3)
a = [5, 3, 7]
b = [10, 4, 5]
EP1 = []
UC1 = []
for i in range(G.size):
    sol = root(func, [a[i], b[i]], args=G[i])
    EP1.append(sol.x[0])
    UC1.append(sol.x[1])
print(EP1, UC1)

等式1
的返回调用中,引用了超出范围的变量
a
a
实际上是一个列表,因此minpack会抱怨您试图返回的对象的形状。在我看来,你只是忘记了用
ep
交换这个
a
。此外,您应该使用root而不是fsolve,请参阅。这使得:

import numpy as np
from scipy.optimize import root


def func(xy, G):
    ep, uc = xy
    num = 2 * 981 * 7.62
    return (num * (ep ** -4.7 - 1) - 0.01 * (uc / ep - 399) ** 2,
            5.34 * G - ep - (uc / ep - 399) * 7.51 * (1 - ep))


G = np.linspace(8, 12, 3)
a = [5, 3, 7]
b = [10, 4, 5]
EP1 = []
UC1 = []
for i in range(G.size):
    sol = root(func, [a[i], b[i]], args=G[i])
    EP1.append(sol.x[0])
    UC1.append(sol.x[1])
print(EP1, UC1)
a=np.array([5,3,7])
b=np.array([10,4,5])
返回值的第二个元素似乎是数组,因为使用了
a
,它不是标量,因为它引用了全局
a
。我认为您打算使用
ep
而不是
a
a=np.array([5,3,7])
b=np.array([10,4,5])
返回值的第二个元素似乎是数组,因为您使用的
a
不是标量,因为它引用了全局
a
。我想你打算用
ep
而不是
a