如何向scipy.optimize.curve_fit传递随迭代变化的额外参数?
解决scipy curve_fit传递额外固定参数的问题
要将随循环变量n变化的参数传入拟合函数,你可以利用scipy.optimize.curve_fit的args参数,具体步骤如下:
1. 修改拟合函数,添加额外参数
把原来固定的300换成一个函数参数(比如命名为T),放在拟合参数的后面:
import math import numpy as np import scipy as sp def kel_voigt(x, en2, l2, en3, l3, T): const = T * 1e-6 * math.pi / (2 * math.tan(math.radians(63.3))) return const * (((1 - (np.exp(-x / l2))) / en2) + ((1 - (np.exp(-x / l3))) / en3))
2. 在循环中传递额外参数
在主循环里,先获取对应n的变量值,然后通过curve_fit的args参数传递给拟合函数。args需要是一个元组,即使只有一个参数也要加逗号:
# 假设你有一个存储对应n值的变量列表,比如T_values,或者从sheets[n]中获取 T_values = [300, 350, 400] # 示例值,替换成你的实际数据 for n in range(len(sheets)): current_T = T_values[n] # 获取当前循环对应的变量值 popt, pcov = sp.optimize.curve_fit(kel_voigt, np.array(tl[n]), np.array(h0l[n]), args=(current_T,), # 传递额外固定参数 maxfev=10000)
原理说明
curve_fit的args参数专门用于传递不需要拟合的固定参数,这些参数会被依次传递给拟合函数,位置在x(自变量)和所有待拟合参数(en2, l2, en3, l3)之后。这样每次循环时,函数就能使用当前n对应的变量值计算const了。
内容的提问来源于stack exchange,提问作者BaRud
相关产品推荐
相关产品推荐

