改善gnuplot的适应性(通过限制参数大小?)

时间:2015-04-27 15:30:31

标签: gnuplot curve-fitting

我无法在gnuplot 4.4

中拟合以下数据
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值的上限?这是我想尝试的一种方式。

由于

1 个答案:

答案 0 :(得分:0)

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

enter image description here

其中x i ,y i 和σ i 是y中有错误的数据点,f(x)是模型描述您的数据的功能。此函数具有一些参数,目标是为参数找到这些值,此表达式具有全局最小值。像gnuplot这样的程序会为这些参数尝试几组值,以找到χ2最小的一组。

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

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

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