gpt4 book ai didi

python - 将参数传递给 fsolve

转载 作者:太空狗 更新时间:2023-10-29 20:24:19 71 4
gpt4 key购买 nike

我正在求解一个包含许多常数的非线性方程。
我创建了一个函数来解决这样的问题:

def terminalV(Vt, data):
from numpy import sqrt
ro_p, ro, D_p, mi, g = (i for i in data)
y = sqrt((4*g*(ro_p - ro)*D_p)/(3*C_d(Re(data, Vt))*ro)) - Vt
return y

然后我想做:

data = (1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
Vt0 = 1
Vt = fsolve(terminalV, Vt0, args=data)

但是 fsolve 解包 data 并将太多参数传递给 terminalV 函数,所以我得到:

TypeError: terminalV() takes exactly 2 arguments (6 given)

那么,我的问题是我能否以某种方式将元组传递给 fsolve() 调用的函数?

最佳答案

问题是您需要使用星号来告诉您的函数重新打包元组。将参数作为元组传递的标准方法如下:

from numpy import sqrt   # leave this outside the function
from scipy.optimize import fsolve

# here it is V
def terminalV(Vt, *data):
ro_p, ro, D_p, mi, g = data # automatic unpacking, no need for the 'i for i'
return sqrt((4*g*(ro_p - ro)*D_p)/(3*C_d(Re(data, Vt))*ro)) - Vt

data = (1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
Vt0 = 1
Vt = fsolve(terminalV, Vt0, args=data)

没有 fsolve,即,如果您只想自己调用 terminalV,例如,如果您想查看它在 Vt0 的值>,那么你必须解压带星号的数据:

data = (1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
Vt0 = 1
terminalV(Vt0, *data)

或者单独传递值:

terminalV(Vt0, 1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)

关于python - 将参数传递给 fsolve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843116/

71 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com