Python中的fsolve函数失败,为“0”;函数调用的结果不是正确的浮点数组;
我正在尝试运行一个使用np.array中的多个值作为常量的解算器。我想让它遍历它们,但每次遍历时,它都会给我一个错误:minpack.error:函数调用的结果不是一个正确的浮点数组。代码如下: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
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
。