2015-04-27 25 views
0

我无法在gnuplot的4.4提高装配在gnuplot的(通过限制参数的大小?)

0.0007629768 -0.1256279199 0.0698209297 
0.0007565689 0.5667065856 0.0988522507 
0.00071274  1.3109126758 0.7766233743 

f1(x) = -a1 * x + b1 
a1 = 28000 
fit f1(x) "56demo.csv" using 1:2:3 via a1, b1  
plot "56demo.csv" using 1:2:3 with yerrorbars title "56%", \ 
f1(x) notitle 

这收敛拟合以下数据到其是高于予想的a1和b1的值。 几个类似的测试收敛到他们应该在的范围内的值,但由于某些原因,这些不会。

具体来说,我想大约有 a1 = 28000。

我正在寻找某种方法来达到当地的最低标准。我试着让适合的限度更小,但我没有那么幸运。 是否可以设置a1和b1的值的上限?这是我想尝试的一种方式。

谢谢

+0

对不起,但是如果你有一个数据文件,你不能操纵一些拟合参数来得到想要的结果。您有两个数据点的错误率很低,而一个错误的错误率很高。如果您将错误报告给拟合程序,那么错误较大的数据点的重量会减轻。在任何情况下,我都不会相信你从三个数据点得到的拟合结果... – Christoph

回答

0

拟合最常用的方法是卡方(χ²)方法。卡方是表达

enter image description here

其中x ,Y 和σ是数据点与误差在y和F(X)是描述模型函数你的数据。该函数具有一些参数,目标是为参数找到这些值,对此,这个表达式具有全局最小值。像gnuplot这样的程序会尝试这组参数的几组值,以找到χ²最小的一组值。

一般来说,有些事情可能会出错,这通常意味着该算法找到了局部最小值,而不是全局值。例如,当参数的初始值不好时会发生这种情况。它有助于尽可能好地估计初始值。

另一个问题是,该算法在参数值集之间使用的步长太大。例如,如果您在较宽的高峰上有一个非常窄的峰值,就会发生这种情况。通常,最终将得到一个描述两个相同峰值之和的参数集,它描述了宽峰,而忽略了窄峰。同样,一个好的初始值集合将会有所帮助。您也可以先保持峰值位置不变(即不在gnuplot中的via -list中)并适合所有其他参数,然后将所有参数放入第二个命令中。

但是,如果f(x)是一个线性函数,这个问题就不存在了!
你可以将f(x)替换为m * x + b并进行数学运算。结果是χ2在参数空间中是一个抛物线,它有一个唯一的最小值,也可以明确计算。 因此,如果gnuplot为您提供了该数据的一组参数,那么即使您不喜欢该结果,该结果也是绝对正确的。

+0

Gnuplot使用非线性拟合,独立于选择函数来拟合。这意味着拟合算法只能找到χ2的局部最小值,并且也是最简单的拟合,即具有两个点的线性拟合函数可以给出错误的结果。考虑一个包含两行'776649600 -0.227587'和'798249600 -0.056367'的数据文件。现在,使用'f(x)= a * x + b; A = B = 1;通过a,b'使用1:2拟合f(x)'test.dat'给出错误结果'a = -1.44846e-09'和'b = 1'(都是5.0和4.6.6)。值来自[适合使用Gnuplot的时间序列](http://stackoverflow.com/q/29445324/2604213) – Christoph