Logistic Sigmoid函数拟合反向S型收缩数据失败求助
问题描述
我有多组数据集,y轴初始值较高,随x轴推进逐渐下降,呈现反向Sigmoid曲线(传统S曲线的反向形态)。我已经将y轴数据翻转,让最大值位于y轴底部、数值向上递减,此时数据曲线呈现标准Sigmoid外观,绘图显示正常。
核心问题
无法用Sigmoid函数对数据进行有效拟合,尝试多种方法多日,多数拟合结果不完整,和理想效果差距很大。目前能得到的最佳拟合结果曲线形态偏差明显。
我的代码
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # 1. 数据集: x_data = np.array([130, 125, 120, 115, 110, 105, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25]) y_data = np.array([81, 81, 80.5, 79, 77.5, 76, 74.5, 71.5, 68.5, 67, 64, 59.5, 55, 48.5, 44, 42.5, 42, 41.5, 41.5, 41, 41, 41]) # 2. 翻转y值: y_data_reversed = np.flip(y_data) y_range = np.linspace(41, 61.75, 81) # 3. 定义Sigmoid函数: def sigmoid(x, U, k, a, b): b = 81 # y_data的最大值. return (U / (1 + np.exp(-k * (x - 77.5))))**a + b p0 = [np.max(y_data), np.median(x_data), 1, np.min(y_data)] # 拟合计算的初始猜测值. popt, pcov = curve_fit(sigmoid, x_data, y_data, p0, maxfev = 10000) #method = 'lm') # 4. 用Sigmoid拟合数据: x_fit = np.linspace(25, 77.5, 130) #-min(x_data), np.median(x_data), max(x_data)). y_fit = sigmoid(x_fit, *popt) # 5. 绘制数据和Sigmoid拟合曲线: plt.plot(x_data, y_data_reversed, marker='o', linestyle='', color='b', label='数据') plt.plot(x_fit, y_fit, color='r', label='Sigmoid拟合') plt.xlabel('温度 (°C)') plt.ylabel('长度 (mm)') plt.title('收缩数据的Sigmoid拟合') plt.gca().invert_yaxis() # 翻转y轴,让最大值在顶部 plt.legend() plt.grid(True) plt.show()
内容的提问来源于stack exchange,提问作者PuppyLord
相关产品推荐
相关产品推荐

