使用gnuplot安装直线

使用gnuplot安装直线,gnuplot,Gnuplot,我想使用gnuplot来获得一次多项式方程(F(x)=a*x+b)的拟合参数,用于许多曲线。有些曲线用直线表示 例如,如果我的数据看起来像 1 1 2 2 3 3 4 4 可以用f(x)=x(参数a=0,b=0)表示 但是下面的gnuplot代码 # regression line f(x) = a*x + b fit f(x) './test.dat' u 1:2 via a, b 无法计算给出以下消息的拟合参数 Singular matrix in Invert_RtR 更新:如果我

我想使用gnuplot来获得一次多项式方程(F(x)=a*x+b)的拟合参数,用于许多曲线。有些曲线用直线表示

例如,如果我的数据看起来像

1 1
2 2
3 3
4 4
可以用f(x)=x(参数a=0,b=0)表示

但是下面的gnuplot代码

# regression line
f(x) = a*x + b
fit f(x) './test.dat' u 1:2  via a, b
无法计算给出以下消息的拟合参数

Singular matrix in Invert_RtR
更新:如果我定义fit函数的迭代次数,gnuplot似乎不会“崩溃”

FIT_MAXITER = 1
# regression line
f(x) = a*x + b
fit f(x) './test.dat' u 1:2  via a, b
它应该是a=1和b=0。但是gnuplot给出了

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 0.989067         +/- 0.004339     (0.4387%)
b               = 0.0761393        +/- 0.02692      (35.36%)

如何“强制”gnuplot计算a和b的正确值?

我找到了两种解决方案:

1) 为拟合函数添加一个微小的偏移:

f(x) = a*x + b + 1e-9
这可以防止奇点问题,并导致完全正确的拟合(a=1,b=-1e-9)

2) 完全消除b参数

f(x) = a*x

这假设您的拟合线都将通过0,这当然可能不是您想要的。

我看到的问题可能是
f(x)
可以精确拟合数据。如果向任何数据添加任何非零值,则不会出现错误。在现实生活中,这种精确的拟合根本不会发生(你有噪音)。不管怎样,不管gnuplot说“fit期间出错”,似乎gnuplot都正确地匹配了函数

通过添加
FIT\u MAXITER=1
可以解决此问题。为FIT_MAXITER定义的值越高,拟合效果越好。但是如果你给它的值太高,拟合就会精确(误差会小于数字精度)


尝试将
f(x)
与您的真实数据相匹配,并告诉我们您得到了什么

您有几个选择:

  • 将变量
    b
    替换为
    (b+1)
    ,然后从结果中减去1。这样您的变量就不会消失,当gnuplot算法发现数值错误达到零时,它将成功地拟合并在没有错误消息的情况下退出

  • b
    提供一个非常小的起始值

拟合的一般规则:参数需要具有相同的数量级,并初始化为正确的数量级