改进gnuplot中的拟合(通过限制参数大小?)

改进gnuplot中的拟合(通过限制参数大小?),gnuplot,curve-fitting,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 plo

我在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的值?这是我想尝试的一种方法


谢谢

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

>席、彝、西甲是Y中的数据点,F(x)是描述数据的模型函数。这个函数有一些参数,目标是找到这些参数的值,这个表达式有一个全局最小值。像gnuplot这样的程序将尝试此参数的多组值,以找到χ²最小的一组值

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

另一个问题是,当算法在参数值集之间使用过大的步长时。例如,如果在较宽的峰值上有一个非常窄的峰值,就会经常发生这种情况。通常,您将得到一个描述两个相同峰值之和的参数集,该参数集很好地描述了宽峰值,而忽略了窄峰值。同样,良好的初始值集也会有所帮助。您还可以先将峰值位置保持固定(即不在通过gnuplot中的-列表显示的
中),然后拟合所有其他参数,然后在第二个命令中拟合所有参数

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

抱歉,但是如果您有一个数据文件,则无法操纵某些拟合参数以获得所需的结果。有两个数据点误差很小,一个误差很大。如果将误差指定给拟合例程,则误差较大的数据点的权重较小。在任何情况下,我都不会相信从三个数据点得到的任何拟合结果…Gnuplot使用非线性拟合,独立于choosen函数进行拟合。这意味着,拟合算法只能找到χ²的局部最小值,而且最简单的拟合,即具有两点的线性拟合函数可能会给出错误的结果。考虑两行的数据文件<代码> 776649600 - 0.227587 < /代码>和<代码> 798249600 - 0.056367 < /代码>。现在,使用
f(x)=a*x+b;a=b=1;通过a、b使用1:2拟合f(x)“test.dat”,b
会给出错误的结果
a=-1.44846e-09
b=1
(均为5.0和4.6.6)。值来自