2

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

我所做的是尝试将实验数据拟合到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

曲线非常合适:

合身

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

4

2 回答 2

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

长话短说:错误通常发生在拟合良好但增量仍然很高的情况下。

于 2013-05-13T05:34:38.893 回答
1

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

当我遇到 '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

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

一个 = -12

b = -2

于 2014-01-21T12:40:08.660 回答