python - Python 中的 fsolve 函数因“函数调用的结果不是正确的浮点数组”而失败
问题描述
我正在尝试运行一个求解器,它使用 np.array 中的多个值作为常量。我希望它遍历它们,但是每次遍历时,都会给我错误:minpack.error: Result from function call is not a proper array of floats。这是代码:
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
的变量。实际上是一个列表,因此 minpack 抱怨您尝试返回的对象的形状。在我看来,您只是忘记将其交换为. 此外,您应该使用 root 而不是 fsolve,请参见此处。这给出了:a
a
a
ep
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)
推荐阅读
- scala - No TypeTag found in Scala Spark. Writing a method to get structype inside a trait
- java - 跨活动发送整数显示 0
- html - 结果
块被包装到下一行
- python - How to slice a 2d list into two separate lists in python?
- java - 如何根据自定义注解修改 RequestMapping 值
- php - php socket_recvfrom 随机失败
- python - 如何用 scipy.spatial.distance.cosine 计算加权相似度?
- git - SourceTree/raw Git 克隆错误,中断网络连接
- c++ - 从语言设计级别,当无法在编译时推断条件时,为什么“if constexpr”不会衰减为“trival if”
- wpf - 绑定到特定的 AncestorType,跳过派生类型