Python 中的求解函数因"Result from function call is not a proper array of floats"而失败



我正在尝试运行一个使用 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 数字是不现实的,因此函数可能无法正确收敛。

equation1的返回调用中,你引用了超出范围的变量aa实际上是一个列表,因此 minpack 抱怨您要返回的对象形状。在我看来,您只是忘记将这a换成ep.另外,您应该使用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)

最新更新