使用gnuplot安装直线
我想使用gnuplot来获得一次多项式方程(F(x)=a*x+b)的拟合参数,用于许多曲线。有些曲线用直线表示 例如,如果我的数据看起来像使用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 更新:如果我
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
,然后从结果中减去1。这样您的变量就不会消失,当gnuplot算法发现数值错误达到零时,它将成功地拟合并在没有错误消息的情况下退出(b+1)
- 为
提供一个非常小的起始值b