我无法在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值的上限?这是我想尝试的一种方式。
由于
答案 0 :(得分:0)
最常见的拟合方法是卡方(χ²)方法。卡方是表达式
其中x i ,y i 和σ i 是y中有错误的数据点,f(x)是模型描述您的数据的功能。此函数具有一些参数,目标是为参数找到这些值,此表达式具有全局最小值。像gnuplot这样的程序会为这些参数尝试几组值,以找到χ2最小的一组。
一般来说,有些事情可能会出错,这通常意味着算法找到了局部最小值,而不是全局最小值。例如,当参数的初始值不好时,就会发生这种情况。它有助于尽可能好地估计初始值。
另一个问题是当算法在参数值集之间使用太大的步骤时。例如,如果您在更宽的峰值上具有非常窄的峰值,则通常会发生这种情况。通常,您最终会得到一个参数集,描述两个相同峰的总和,它们很好地描述了宽峰,忽略了窄峰。同样,良好的初始值集将有所帮助。您也可以先保持峰值位置固定(即不在gnuplot中的via
- 列表中)并适合所有其他参数,然后将所有参数放入第二个命令中。
但是如果f(x)是线性函数,则这个问题不存在!
您可以用m * x + b替换f(x)并进行数学运算。结果是χ2是参数空间中的抛物线,它具有单个唯一的最小值,也可以明确计算。
因此,如果gnuplot为您提供了该数据的一组参数,那么即使您不喜欢该结果,此结果也是绝对正确的。