如何让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求解最优参数,且满足以下两个约束:- 两段曲线在
t_lim处连续无跳变,即指数段的终点值等于线性段的起点值 - 线性段必须为递减趋势(斜率为负)
- 两段曲线在
已尝试的解法
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
相关产品推荐
相关产品推荐

