gnuplot给出了非常大的误差估计
今天我试图用一个给定的理论模型来拟合实验数据。虽然拟合相当好,但gnuplot返回了极高的错误:gnuplot给出了非常大的误差估计,gnuplot,curve-fitting,Gnuplot,Curve Fitting,今天我试图用一个给定的理论模型来拟合实验数据。虽然拟合相当好,但gnuplot返回了极高的错误: Final set of parameters Asymptotic Standard Error ======================= ========================== A = 1.76654e-11 +/- 2.589e-06 (1.465e+07%) g
Final set of parameters Asymptotic Standard Error
======================= ==========================
A = 1.76654e-11 +/- 2.589e-06 (1.465e+07%)
g = 0.000929911 +/- 1.006e-05 (1.082%)
offset = 0.831727 +/- 0.005273 (0.634%)
x0 = 25.7152 +/- 3768 (1.465e+04%)
特别是,x0上的误差是我下面计算的一个重要度量。显然,这个值完全是胡说八道,如下图所示
我必须做什么才能得到有意义的错误?
MWE:
f(x,x0,g) = -16.0*A*(g*(g**2.0-12.0*(x-x0)**2))/(pi*(g**2.0+4.0*(x-x0)**2.0)**3.0) + offset
FIT_LIMIT = 1e-16
A=-1e-3
g=1e-3
offset=0.8
x0 = 25.71514200
fit f(x,x0,g) "data" via A,g,offset,x0
plot "data", f(x,x0,g)
数据:我认为问题在于使用三参数函数。从第一行开始,似乎
x0
和g
是变量。但是在fit
中,它被用作参数(因为via
…)和变量(因为f(x,x0,g)
)的混合体
有多少列有文件“数据”?看起来2是正确的答案
试试这个:
f(x) = -16.0*A*(g*(g**2.0-12.0*(x-x0)**2))/(pi*(g**2.0+4.0*(x-x0)**2.0)**3.0) + offset
FIT_LIMIT = 1e-16
A=-1e-3
g=1e-3
offset=0.8
x0 = 25.71514200
fit f(x) "data" via A,g,offset,x0
plot "data", f(x)
我想这个案子有两个方面。 0我排除了bug的存在,但情况仍然可能如此
f(x) = -16.0*A*(g*(g**2.0-12.0*(x-y)**2))/(pi*(g**2.0+4.0*(x-y)**2.0)**3.0)+B
g(x) = -16.0*AA*(gg*(gg**2.0-12.0*(x-yy)**2))/(pi*(gg**2.0+4.0*(x-yy)**2.0)**3.0)+BB
gnuplot> A=1e-3 ; g=1e-3; B =0.8 ; y = 25.71514200
gnuplot> AA=-1e-3 ; gg=1e-3; BB =0.8 ; yy = 25.71514200
(基本上我做了第二次试穿,改变了a的标志)
拟合f(x)的结果
gnuplot>通过A、B、g、y拟合f(x)“data.dat”u 1:2
iter chisq delta/lim lambda A B g y
[剪辑]
经过2次迭代后,拟合收敛。
残差的最终平方和:487.102
雷尔。上次迭代期间的变更:-4.02829e-07
自由度(拟合度):97
残差均方根值(拟合度)=sqrt(WSSR/ndf):2.24091
残差方差(减少的平方)=WSSR/ndf:5.02167
最终参数集渐近标准差
======================= ==========================
A=0.00099999+/-585.1(5.851e+07%)
B=0.8+/-2124(2.655e+05%)
g=0.001+/-535.8(5.358e+07%)
y=25.7408+/-1362(5292%)
拟合参数的相关矩阵:
A B g y
1000美元
B-0.999 1.000
g-1.000 0.999 1.000
y 1.000-1.000-1.000 1.000
拟合结果g(x)
gnuplot>fit g(x)“data.dat”u 1:2通过AA、BB、gg、yy
iter chisq delta/lim lambda AA BB gg yy
0 5.0258343096e+02 0.00e+00 1.03e+03-1.000000e-03 8.000000e-01[切割]
iter chisq delta/lim lambda AA BB gg yy
经过6次迭代,拟合收敛。
残差的最终平方和:0.171225
雷尔。最后一次迭代期间的变更:-3.85774e-08
自由度(拟合度):97
残差均方根值(拟合度)=sqrt(WSSR/ndf):0.0420144
残差方差(减少的平方)=WSSR/ndf:0.00176521
最终参数集渐近标准差
======================= ==========================
AA=-0.000999968+/-9.454e+07(9.454e+12%)
BB=0.828332+/-240.8(2.908e+04%)
gg=0.000999968+/-9.453e+07(9.454e+12%)
yy=26.1206+/-3.798e+06(1.454e+07%)
拟合参数的相关矩阵:
AA BB gg yy
AA 1.000
BB-0.040 1.000
gg 1.000-0.040 1.000
yy-0.110 0.998-0.109 1.000
gnuplot>
不仅配件是不同的,而且在我的例子中,它们是完全关闭的(我有一个不同版本的gnuplot)
看这张图,我还注意到这张图有三个区域,两个几乎是线性的,一个看起来像一口井。
我并不感到惊讶的是,要找到匹配所有函数的适当函数并不容易
您是否尝试过从X0开始,一次拟合一个参数,因为它似乎是最单一的参数?(您也可以通过肉眼指定,或者对数据子集使用抛物线方法)
这实际上相当于对导数进行拟合。
通过这种方式,您可以减少约束的数量,并且可能会以更好的拟合方式着陆。这将为OP的结果提供相同的结果。事实上,如何给要求值的函数赋值是完全无关的。好吧,我不相信这个论点。变量和参数本质上是不同的,通常人们会迭代地计算它们,以避免找到不好的解决方案。@Cippo1987可能人们的处理方式不同,但gnuplot则不同。我的观点是,Gnuploth对这两个案例的评估是相同的,是的,对不起,你完全正确。就Gnuplot所关心的而言,没有区别。事实上,我怀疑这里的问题更多的是理论方面的,而不是gnuplot