【发布时间】: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