fit 不支持迭代。这是你可以做到的,但它需要一些摆弄;)
# define the functions depending on the current number
fstr(N) = sprintf("f%d(x) = a%d*x + b%d", N, N, N)
# The fitting string for a specific file and the related function
fitstr(N) = sprintf("fit f%d(x) 'file%d.dat' via a%d,b%d", N, N, N, N)
n = 2
# Do all the fits
do for [i=1:n] {
eval(fstr(i))
eval(fitstr(i))
}
# construct the complete plotting string
plotstr = "plot "
do for [i=1:n] {
plotstr = plotstr . sprintf("f%d(x), 'file%d.dat'%s ", i, i, (i == n) ? "" : ", ")
}
eval(plotstr)
如果我使用以下两个测试文件,这对我来说很好:
文件file1.dat:
1 1
2 2.1
3 3
和file2.dat:
1 1.5
2 2.7
3 4
4.6.5的结果是:
要使拟合的实际结果显示在键中,您必须构造绘图字符串plotstr,如下所示:
plotstr = "plot "
do for [i=1:n] {
t = sprintf("f%d(x) = %.2f*x + %.2f", i, value(sprintf('a%d', i)), value(sprintf('b%d', i)))
plotstr = plotstr . sprintf("f%d(x) lt %d t '%s', ", i, i, t).\
sprintf(" 'file%d.dat' lt %d %s ", i, i, (i == n) ? "" : ", ")
}
结果