【问题标题】:What does the error message "w = 0 in Givens();" mean when trying curve fitting in gnuplot?错误信息“w = 0 in Givens();”是什么意思?在gnuplot中尝试曲线拟合是什么意思?
【发布时间】:2013-05-01 04:02:24
【问题描述】:

当我尝试使用gnuplot 内置曲线拟合功能时,我不断收到w = 0 in Givens(); 错误消息。

我所做的是尝试将实验数据拟合到gnuplot 中的某个数学模型。 我定义模型函数s(x)

gnuplot> z(x)=(x-mu)/be
gnuplot> s(x)=(k/be)*exp(-z(x)-exp(-z(x)))

然后我绘制实际数据和模型函数以获得模型参数的初始猜测:

然后我调整初始猜测:

gnuplot> k=2.6; mu=-8.8; 
gnuplot> replot

要获得一张漂亮的照片:

然后我尝试精确拟合曲线:

gnuplot> fit s(x) '701_707_TRACtdetq.log30.hist1.txt' u 2:6 via k,be,mu

我得到的是单次迭代和一条错误消息:

 Iteration 0
 WSSR        : 3.85695           delta(WSSR)/WSSR   : 0
 delta(WSSR) : 0                 limit for stopping : 1e-05
 lambda   : 0.223951

initial set of free parameter values

k               = 2.6
be              = 1
mu              = -8.8
/

 Iteration 1
 WSSR        : 0.0720502         delta(WSSR)/WSSR   : -52.5315
 delta(WSSR) : -3.7849           limit for stopping : 1e-05
 lambda   : 0.0223951

resultant parameter values

k               = 2.03996
be              = 0.777868
mu              = -8.87082
         w = 0 in Givens();  Cjj = 3.37383e-196,  Cij = 2.54469e-192

曲线非常合适:

该错误是什么意思,我将如何进行拟合过程?

【问题讨论】:

  • 不使用缩放函数z(x)(直接在s(x)中使用函数)会发生什么?当您从远离拟合值的 be 开始时会发生什么,比如 1000 ?这篇博文中出现同样的错误,但没有信息:dany-nash.blogspot.fr/2013/02/….
  • @Pascail:我想我找到了问题所在:当拟合达到拟合参数的最佳值时会发生这种情况,但残差仍然太高而无法停止迭代。因此,内部矩阵C 产生零(或非常小的值)作为下一次迭代的增量。在我的例子中,大约在x=-13 处有一个微小的凸起,阻止了收敛范数达到收敛极限。
  • 数值不稳定性的大世界......我想你现在可以回答你自己的问题了!

标签: gnuplot curve-fitting data-fitting


【解决方案1】:

错误消息w = 0 in Givens(); 似乎与fit 无法执行拟合参数估计的下一次迭代有关。错误消息伴随着某个矩阵C[][] 的值,该矩阵与下一步拟合迭代的方向有关。这些值通常非常小,例如示例中的Cjj = 3.37383e-196, Cij = 2.54469e-192。这意味着拟合过程已经收敛到一个状态,其中每个其他局部拟合参数集都不如当前(局部状态极值)最优,但当前残差高于收敛极限,在这种情况下 delta(WSSR) : -3.7849 limit for stopping : 1e-05。当要拟合的数据表现出干扰(在本例中约为 x=-13)时会发生这种情况,尽管完美拟合但会产生显着的 delta

长话短说:错误通常发生在拟合良好但 delta 仍然很高时。

【讨论】:

    【解决方案2】:

    我要说的可能看起来很奇怪,但它确实有效!

    当我遇到“w = 0 in Givens()”错误时,我使用:

    gnuplot> set xrange [a,b]
    

    选择“a”和“b”来显示“最有趣”的部分。如果您现在执行您拥有的拟合命令:

    gnuplot> fit s(x) '701_707_TRACtdetq.log30.hist1.txt' u 2:6 via k,be,mu
    

    您可能会发现您的状态现在收敛了。我不确定为什么“设置范围”会影响拟合算法,但确实如此!在你的例子中,我可能会让:

    a = -12

    b = -2

    【讨论】:

    • 是的,这很有帮助,因为拟合过程现在可以在没有凹凸的值范围内工作,因此会收敛。
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2010-11-19
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2017-05-09
    相关资源
    最近更新 更多