【问题标题】:Fit log-log data with gnuplot使用 gnuplot 拟合日志数据
【发布时间】:2014-07-01 13:41:44
【问题描述】:

我尝试拟合此图 ,因为您可以看到拟合对数据不太好。

我的代码是:

    clear
reset


set terminal pngcairo size 1000,600 enhanced font 'Verdana,10'
set output 'LocalEnergyStepZoom.png'
set ylabel '{/Symbol D}H/H_0'
set xlabel 'n_{step}'
set format y '%.2e'

set xrange [*:*]
set yrange [1e-16:*]

f(x) = a*x**b
fit f(x) "revErrEnergyGfortCaotic.txt" via a,b


set logscale

plot 'revErrEnergyGfortCaotic.txt' w p,\
 'revErrEnergyGfortRegular.txt' w p,\
f(x) w l lc rgb "black" lw 3 

exit

所以问题是我在这里计算的错误是多少?因为我认为在对数对数平面中,我放入代码中的形式应该可以很好地呈现数据。

非常感谢

最后我可以使用Christop答案中的建议来解决问题并稍微修改一下。

我找到了函数的近似斜率(接近-4)然后采用这个参数修复我只用a拟合曲线,发现它我修复它并只修改b。之后使用输出作为拟合的起始解决方案,我找到了最合适的。

【问题讨论】:

  • 最好的办法是拟合线性函数f(x) = a*x + b,然后使用log(y)log(x) 进行拟合。为此,请使用 using 选项:fit f(x) "data" using (log($1)):(log($2)) via a,b
  • @Miguel:这应该是一个答案 - 答案!!
  • @RamanShah 问题是(严格来说)关于如何使用 gnuplot 拟合指数,Christoph 的答案是正确的。现在,如果您从数据分析的角度询问解决此问题的正确方法......我将留下评论作为对有类似问题的人有用的“解决方法”。
  • 哈哈,很公平,@Miguel。

标签: gnuplot data-fitting


【解决方案1】:

您需要使用适合您的权重(目前较低的值不被认为是重要的)并有更好的起始猜测(通过“pars_file.pars”)

【讨论】:

    【解决方案2】:

    这里的主要问题是,与较低 x 值的残差相比,较高 x 的函数值的残差非常小。毕竟,您在 y 轴上几乎跨越了 20 个数量级。

    只需使用1/y**2 对y 值进行加权,甚至更好:如果您有数据点的标准偏差,则使用1/std**2 对值进行加权。那么拟合应该会更好地收敛。

    在 gnuplot 中,权重是使用 第三个​​ 数据列完成的:

    fit f(x) 'data' using 1:2:(1/$2**2") via ... 
    

    或者您可以使用 Raman Shah 的建议,将 y 轴线性化并进行线性回归。

    【讨论】:

      【解决方案3】:

      这是数据分析中的一个常见问题,我不确定是否有很好的 Gnuplot 方法来解决它。

      问题在于标准拟合例程中的惩罚函数通常是误差平方和,并且尽可能尝试,如果您的数据有很大的动态范围,最小 y 值的误差会出现从算法的角度来看基本上为零。

      我最近为需要拟合此类数据的学生教授了一门课程。他们中的许多人通过选择非常严格的收敛标准来击败他们的(matlab)拟合例程,但即使这样也没有太大帮助。

      如果你想很好地拟合这个幂律尾部,你真正需要做的是将数据转换为对数形式并对该对数表示进行线性回归。

      【讨论】:

        【解决方案4】:

        您必须找到合适的起始值才能获得正确的拟合,因为这种拟合没有一个全局解决方案。 如果您没有定义ab,则两者都设置为1,这可能太远了。尝试使用

        a = 100
        b = -3
        

        为了更好的开始。也许你需要再调整一下这些值,我不能,因为我没有数据文件。

        另外,您可能希望将配件的区域限制在 10 以上的部分:

        fit [10:] f(x) "revErrEnergyGfortCaotic.txt" via a,b
        

        当然,如果合适的话。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2019-06-14
          • 1970-01-01
          • 2023-03-24
          相关资源
          最近更新 更多