我有一个包含多列的文件,我想使用循环对文件进行多次线性回归(在回归后绘制在同一图表中):
do for [i=1:6] {
g(i,x)= 'm'.i*x + 'b'.i
fit g(i,x) 'Dens.dat' using 1:(column(i+1)) via 'm'.i,'b'.i
}
但我收到错误:could not read parameter-file "m1"
我该如何解决这个问题?
答案 0 :(得分:1)
如果您的Gnuplot版本不支持数组,那么您可以调整alternative solution,例如:
vGet(name, i) = value(sprintf("%s%i", name, i))
vSet(name, i, val) = sprintf("%s%i = %.16e", name, i, val)
N = 2
#array m[N]
#array b[N]
do for [i=1:N] {
g(x)= alpha*x + beta
fit g(x) 'Dens.dat' using 1:(column(i+1)) via alpha,beta
eval vSet('m', i, alpha);
eval vSet('b', i, beta);
#m[i-1] = alpha
#b[i-1] = beta
}
set key top left
set terminal pngcairo
set output 'fig.png'
plot \
for [i=1:N] vGet('m', i)*x + vGet('b',i) w l t '', \
for [i=1:N] 'Dens.dat' u 1:(column(i+1)) w p t sprintf("column %d", i)
与Dens.dat
结合使用:
1 4 5
2 8 10
3 12 15
4 16 20