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

Python中带递增振荡余弦函数的数据拟合优化咨询

曲线拟合优化建议

优化初始参数猜测

curve_fit的拟合结果高度依赖初始参数guess,若初始值偏离最优解,极易陷入局部最优。针对你的函数,可根据数据特征设置更合理的初始值:

  • 观察x趋近于0时的y值(如x=0.1时y≈0.91),i0可设为接近该稳态值的数(比如0.9);
  • w1是指数衰减与余弦项的共同尺度,从x>0.8的波动周期看,初始值可设为0.2;
  • a为余弦项振幅,参考x>0.8区域y值的波动范围(-7.46到0.06),初始值设为5左右;
  • ph(相位偏移)初始值设为0.1,off(整体偏移)参考y的平均水平设为-2。

示例初始猜测代码:

guess = [0.9, 5, 0.2, 0.1, -2]

拆分函数共享参数

当前函数中指数衰减项和余弦项共享同一个w1,这可能限制拟合灵活性——指数衰减的特征尺度与余弦波动的周期未必一致。建议将两者的尺度参数分离,修改函数为:

def expcos(x, i0, a, w_exp, w_cos, ph, off):
    return i0 + (1-i0)*np.exp(-x/w_exp) + a*np.cos((2*np.pi/w_cos)*(x - ph)) + off

这样指数衰减速率和余弦波动周期可独立拟合,更适配x>0.8区域的波动与衰减特征。

为高关注区域添加拟合权重

x>0.8部分数据波动大,但默认curve_fit采用等权重拟合。可手动设置权重,让拟合更侧重该区域:

import numpy as np
from scipy.optimize import curve_fit

# 生成权重数组:x>0.8的点权重设为2,其余为1
weights = np.where(np.array(x) > 0.8, 2, 1)
# 带权重拟合
popt, pcov = curve_fit(expcos, x, y, guess, sigma=1/weights)

排查数据异常值

观察x>0.8的y值,x=1.14990234对应的y=-7.46744701与相邻点偏差显著,可能是异常值。尝试移除该点后再拟合,验证是否能提升效果:

# 过滤异常点
x_filtered = [val for val in x if val != 1.14990234]
y_filtered = [y[i] for i, val in enumerate(x) if val != 1.14990234]
# 重新拟合
popt, pcov = curve_fit(expcos, x_filtered, y_filtered, guess)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:37:16