You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:01:21