2011-07-06 37 views
10

在gnuplot中,有没有办法在生成的图形上自动打印拟合参数?例如,如果我符合数据表gnuplot-自动打印拟合参数

1 1 
2 2 
3 3 

使用:

a=1 
b=1 
f(x) = a*x + b 
fit f(x) 'data' using 1:2 via a, b 

我会结果a=1b=0。我想打印出来使用类似

set label 'a=$a, b=$b' at (1,1) 
show label 

的$招不起作用,所以我希望你能给我一些提示...

回答

10

你所试图做的是非常可能的。您遇到的问题是,您的拟合算法由于奇异矩阵求逆而崩溃。您可以通过几种方式解决该问题。最简单的办法是限制迭代次数以找到拟合曲线。所以这个脚本:

a=1 
b=1 
FIT_MAXITER = 1 
f(x) = a*x + b 
ti = sprintf("%.2fx+%.2f", a, b) 
fit f(x) 'data' using 1:2 via a, b 
plot [0:3] f(x) t ti, "data" w l 

应该做你正在瞄准的。

请注意,当您的数据有噪音或您的设置功能没有像您的数据一样的确切结构时,不应出现奇异矩阵求逆问题。例如,这个

f(x) = a*x**2 + b 

函数应该工作得很好,而不会限制迭代次数。

gnuplot文档(gnuplot.pdf或help set fit)中介绍了更多控制拟合过程的方法。

0

我发现了一些非常有趣的东西,可能会解决您的问题here。 该解决方案似乎使用函数sprintf和C的常用语法在字符串上进行打印。 I.E.,如链接:

f(x) = m*x + c 
fit f(x) "file" using 3:1 via m,c 
set label 1 sprintf("m = %3.4f",m) at 510,75 font ",18" 
set label 2 sprintf("c = %3.4f",c) at 510,70 font ",18"