gpt4 book ai didi

python - 使用具有固定参数的 scipy.optimize.least_squares 时更改函数后出现 TypeError (Python)

转载 作者:行者123 更新时间:2023-12-01 01:41:42 26 4
gpt4 key购买 nike

我尝试使用 scipy.optimize 包中的 east_squares 来拟合数据。我有一个可行的半解决方案并更改了拟合函数,然后突然得到了

TypeError: <lambda>() takes exactly 4 arguments (5 given)

这是代码的相关部分:

from scipy.optimize import least_squares
def hill_fit(x,kd,start,end,n):
return start+(end-start)*x**n/(kd**n+x**n)
fitfun_hill_err= lambda p,x,fix,err: hill_fit(x,p[0],p[1],p[2],fix[0])/err
p_init=[0.1,.1,.2]
fix=np.array([.5] ).ravel()
least_squares(fitfun_hill_err, p_init, args=(x_data, y_data,fix,y_error),bounds=(0,500))

我想将参数放入 p[..] 中,因此需要 lambda 函数。

x_data 是函数的输入数据,y_error 是结果数据 (y_data) 的不确定性,fix 是传递给函数的附加参数。

我之前使用过以下函数(相应调整参数):

def func_fit(conc, Kd2, B, C, Rt, Lst, Kd1):
Lt = conc
e_tmp = e(Lt, Rt, Kd1, Lst, Kd2)
d_tmp = d(Kd1, Kd2, Lst, Lt, Rt)
f_tmp = f(Kd1, Kd2, Rt)
theta_tmp = theta(d_tmp, e_tmp, f_tmp)
FA_tmp = FA(B, C, d_tmp, e_tmp, f_tmp, theta_tmp, Kd1)

return FA_tmp

使用 e、d、f、theta 和 FA 调用子函数。

我之前已经经历过“我需要以包装方式给least_squares参数”,这就是我引入lambda函数的原因,但我不明白为什么它不再起作用了。

请帮助我理解最小二乘函数的行为以及我在这里的误解!

谢谢!

最佳答案

按照错误消息进行操作:TypeError: () 恰好需要 4 个参数(给定 5 个参数)。

fitfun_hill_err= lambda p,x,fix,err

lambda 接受参数和其他 3 个参数(x、fix、err)。总共 4 个参数。

least_squares 使用参数和 4 个其他参数 (args=(x_data, y_data, fix, y_error)) 调用此函数,总共 5 个参数。

期望 x 与传递 x_datay_data 之间不匹配。

关于python - 使用具有固定参数的 scipy.optimize.least_squares 时更改函数后出现 TypeError (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818557/

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