在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
$技巧不起作用所以我希望你能给我一些提示......
答案 0 :(得分:12)
你要做的事情很有可能。你要解决的问题是你的拟合算法由于奇异矩阵求逆而崩溃。您可以通过几种方式解决该问题。最简单的方法是限制迭代量以找到拟合曲线。所以这个脚本:
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
)中描述了控制拟合过程的其他方法。
答案 1 :(得分:1)
我找到了一些非常有趣的东西可以解决你的问题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"