在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=1
和b=0
。我想用之类的东西打印它们
set label 'a=$a, b=$b' at (1,1)
show label
$的把戏不起作用,所以我希望你能给我一些提示。。。
您想要做的事情是完全可能的。你遇到的问题是,你的拟合算法由于奇异矩阵求逆而崩溃。你可以用几种方法来解决这个问题。最简单的方法是限制迭代次数以找到拟合曲线。所以这个脚本:
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
(中描述了控制装配过程的其他方法。
我发现了一些非常有趣的东西,可以在这里解决您的问题。解决方案似乎是使用函数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"