钰潼968 2024-04-18 18:03 采纳率: 0%
浏览 66

类s曲线常用的拟合公式

曲线形式如下图所示,起点为0.首尾斜率较小,到最后几乎是直线,中间断斜率较大!主要是前几个点拟合不出来!请问可以拟合的公式是什么呢?

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-18 18:03
    关注

    引自免费微信小程序:皆我百晓生

    为了拟合您描述的S形曲线,我们可以采用经典的指数增长模型,例如修正的指数函数(也称为双曲正弦函数)或者逻辑斯蒂曲线(Logistic function)。这里我们主要讨论逻辑斯蒂曲线,因为它在生物学、人口增长和社会科学等领域被广泛用于描述有限资源条件下的增长现象。

    逻辑斯蒂曲线的一般形式为:

    [ y = \frac{K}{1 + e^{-rt}} ]

    其中:

    • ( y ) 是在时间 ( t ) 的值。
    • ( K ) 是饱和值,即最大可能的值。
    • ( r ) 是增长率。
    • ( t ) 是时间。
    • ( e ) 是自然对数的底数(约等于 2.71828)。

    要拟合您的数据,我们需要找到最佳的参数 ( K, r ),以及可能的时间缩放因子,因为您的数据没有提供具体的时间刻度。由于您没有提供完整的数据点,我将假设数据点是按照均匀间隔递增的,并且从第一个点开始。

    首先,让我们根据给定的大概范围创建一个时间轴,然后尝试调整 ( K ) 和 ( r ) 来拟合这个曲线。这是一个逐步的过程,可能需要一些迭代和手动调整来获得满意的结果。

    以下是Python代码示例,使用Scipy库中的curve_fit函数进行拟合:

    import numpy as np
    from scipy.optimize import curve_fit
    import matplotlib.pyplot as plt
    
    # 假设数据点是按照1递增的,从1到50
    x_data = np.arange(1, 51)
    y_data = [120, 100, 80, 60, 40, 20] + [20]*(44-len(y_data))  # 填充剩余的数据点
    
    def logistic_function(t, K, r):
        return K / (1 + np.exp(-r*t))
    
    # 初始猜测值
    popt, pcov = curve_fit(logistic_function, x_data, y_data, p0=[120, 0.1])  # K=120, r=0.1
    
    # 计算拟合后的y值
    y_fitted = logistic_function(x_data, *popt)
    
    # 绘制原始数据和拟合曲线
    plt.plot(x_data, y_data, 'bo', label='Original data')
    plt.plot(x_data, y_fitted, 'r-', label='Fitted curve: K=%1.2f, r=%1.2f' % tuple(popt))
    plt.xlabel('Time')
    plt.ylabel('Value')
    plt.legend()
    plt.show()
    

    这段代码会绘制出原始数据点和拟合的逻辑斯蒂曲线。您可以根据实际数据调整初始猜测值(在这个例子中为K=120, r=0.1),并运行代码查看结果。如果您有更精确的时间数据或者具体的数值,那么可以通过调整这些初始值来提高拟合效果。对于非常复杂的情况,可能需要使用非线性优化方法进行精细调整。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月18日