在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
$技巧不起作用所以我希望你能给我一些提示......
在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"