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

多指数项曲线拟合如何用通用形式获取指定数量的Rth与tau参数

多指数项通用拟合实现方案

首先定义可适配任意指数项数量的拟合函数,参数按Rth1, tau1, Rth2, tau2...的顺序传入,内部自动累加所有指数项,无需手动拼接公式:

import numpy as np
from scipy.optimize import curve_fit

def multi_exponential_model(x, *params):
    z = np.zeros_like(x, dtype=np.float64)
    # 每两个参数为一组(Rth, tau)遍历所有指数项
    for i in range(0, len(params), 2):
        Rth, tau = params[i], params[i+1]
        z += Rth * (1 - np.exp(-x / tau))
    return z

调用示例(以4项拟合为例)

只需修改n_terms的数值即可适配任意项数的拟合需求:

# 你的实测数据替换为自己的x、y即可
x = np.linspace(0, 100, 1000)
# 模拟带噪声的测试数据,实际使用时替换为你的真实数据
y = 2*(1-np.exp(-x/5)) + 3*(1-np.exp(-x/20)) + 1*(1-np.exp(-x/50)) +4*(1-np.exp(-x/80)) + np.random.normal(0, 0.05, size=x.shape)

# 定义要拟合的指数项数量,改为8即可实现8项16参数的拟合
n_terms = 4
# 设置初始猜测值,可根据你的数据物理意义调整,避免拟合陷入局部最优
p0 = []
for _ in range(n_terms):
    p0.append(1.0)  # Rth的初始猜测
    p0.append(10.0) # tau的初始猜测,也可按对数间隔设置为1、10、100等适配不同时间常数

# 执行拟合
popt, _ = curve_fit(multi_exponential_model, x, y, p0=p0)

# 拆分得到所有Rth和tau参数
Rth_list = popt[0::2] # 取索引为0、2、4、6...的参数,即所有Rth
tau_list = popt[1::2] # 取索引为1、3、5、7...的参数,即所有tau

print("拟合得到的Rth参数:", Rth_list)
print("拟合得到的tau参数:", tau_list)

注意事项

  • 如果存在多个指数项共享同一个tau的需求,只需修改multi_exponential_model内的参数分组逻辑即可,整体框架不需要改动
  • 多参数拟合时初始值p0的设置对结果影响很大,尽量根据数据的物理特征设置接近真实范围的初始值,否则可能出现拟合不收敛或者结果偏离实际的问题
  • 如果拟合时报错Optimal parameters not found,优先调整初始值,或者给curve_fit添加bounds参数限制参数的合理范围

内容的提问来源于stack exchange,提问作者UQ07

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:54:03