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

如何让numpy curve_fit找到满足条件的分段曲线最优参数?

分段曲线拟合:带约束的指数+线性模型

实验数据

import numpy as np
from scipy.optimize import curve_fit

x_data = np.array([0, 2, 5, 10, 15, 30, 60, 120])
y_data = np.array([1.00, 0.71, 0.41, 0.31, 0.29, 0.36, 0.26, 0.35])

t = np.linspace(min(x_data), max(x_data), 151)

原始数据对应散点图(原外链图片已移除)

拟合需求

需要对数据进行分段曲线拟合:

  • 当 t < t_lim 时,采用指数函数拟合
  • 当 t >= t_lim 时,采用线性函数拟合
  • 其中 t_lim 可自行设置,需使用 curve_fit 求解最优参数,且满足以下两个约束:
    1. 两段曲线在 t_lim 处连续无跳变,即指数段的终点值等于线性段的起点值
    2. 线性段必须为递减趋势(斜率为负)

已尝试的解法

t_lim = 15    

def y(t, k, m, q):
    return np.concatenate((np.exp(-k*t)[t<t_lim], (m*t + q)[t>=t_lim]))

popt, pcov = curve_fit(y, x_data, y_data, p0=[0.5, -0.005, 0.005])

k_opt, m_opt, q_opt = popt
y_model = y(t, k_opt, m_opt, q_opt)

上述代码得到了拟合后的曲线(原外链图片已移除),但无法自动满足两个约束条件,不知道如何让Python找到符合要求的最优参数 m, k, q。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:10:50