Math 如何使用GNUplot获得更好的指数拟合?

Math 如何使用GNUplot获得更好的指数拟合?,math,gnuplot,curve-fitting,data-fitting,chi-squared,Math,Gnuplot,Curve Fitting,Data Fitting,Chi Squared,我正在尝试将我的数据拟合到这条曲线: f(x) = b + n*exp(-x/u) fit f(x) "data1" using 2:3 via b,n,u 我得到的拟合与理论不符: 然后,我使用了理论上的初始参数,在不重新计算拟合的情况下,我得到了一个更好的结果 如果我重新计算拟合,它会在第一次迭代后忽略我的初始参数,并返回到第一个结果 我尝试了几件事。我将FIT_限制降低了20个数量级,但它没有改变任何东西。我也会对数据进行偏差,这样我会在前几个数据点上增加更多权重,然后得到更好的拟合,

我正在尝试将我的数据拟合到这条曲线:

f(x) = b + n*exp(-x/u)
fit f(x) "data1" using 2:3 via b,n,u
我得到的拟合与理论不符:

然后,我使用了理论上的初始参数,在不重新计算拟合的情况下,我得到了一个更好的结果

如果我重新计算拟合,它会在第一次迭代后忽略我的初始参数,并返回到第一个结果

我尝试了几件事。我将FIT_限制降低了20个数量级,但它没有改变任何东西。我也会对数据进行偏差,这样我会在前几个数据点上增加更多权重,然后得到更好的拟合,但仍然很糟糕

这是输出:

问题:

  • 我不清楚这个问题是否是数学问题,或者GNUplot是否只是在做一些错误的事情,停留在某个局部最小值或达到某个极限或类似的事情。我已经完全忘记了卡方拟合是如何工作的

  • 在解决在数据中包含错误之前,是否有更好的自动拟合方法

  • 两个想法:

  • 在(0,0)附近似乎有相当多的数据点,这些数据点看起来像工件,可能会影响拟合

  • 尝试在对数域中进行拟合,即:

    f(x) = b + n*exp(-x/u)
    fit log(f(x)) "data1" using 2:(log($3)) via b,n,u
    
    如果较大的值主导拟合,则此技巧通常有效,因为它们与拟合曲线的偏差在对数域中的权重较小。这似乎还不是你的情况,但可能是在你解决第1点之后


  • 你凭什么认为这件衣服不合身?你需要的不仅仅是你的视觉和主观印象

    以下是您假定的功能:

    y = b + n*exp(-x/u)
    
    z = y-b = n*exp(-x/u)
    
    尝试安装此功能:

    y = b + n*exp(-x/u)
    
    z = y-b = n*exp(-x/u)
    
    取双方的天然原木:

    ln(z) = ln(n*exp(-x/u)) = ln(n) - x/u
    
    这是一个简单的线性回归,因变量
    x
    ,自变量
    ln(z)
    ,截距
    ln(n)
    ,斜率
    -1/u

    问题是,您的数据在x=0时似乎是渐近的。这对我来说是一个
    1/x
    形式的函数。也许不合适与功能的选择有关


    你说的是“理论”。这些数据代表什么现象?

    有一种。Gnuplot能够进行非常好的非线性拟合

    我不推荐线性化方法:在计算机之前使用的笔和纸的方法,在这种方法中,只有毫米纸上对数点的直线图是由尺子绘制的,系数是从纸上读取的。我们不必用老方法做事,因为老老师只知道这种方法。让我们利用计算机的能力

    让我们建议对系数进行一些初始猜测的非线性回归

    f(x) = b + n*exp(-x/u)
    b = -5
    n = 1.5
    u = 15
    fit log(f(x)) "data1" using 2:3 via b,n,u
    plot "data1" using 2:3 with points, f(x) with line
    

    根据数据中的数据调整常数,即使猜测置信区间和协方差矩阵,也能获得直接结果。

    谢谢!事实上,这只是在开始其余设置之前转动计数器的人工制品!我完全错过了。听起来你应该接受Wrzlprmft的答案,而不是我的。