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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:38:13