在Gnuplot的for循环中拟合了许多数据

时间:2015-04-23 15:48:40

标签: for-loop plot gnuplot

数据

Model Decreasing-err Constant-err Increasing-err
2025 73-78 80-85 87-92 
2035 63-68 80-85 97-107 
2050 42-57 75-90 104.5-119.5 

哪个数据结构(使用-err)描述了here

为了绘制点,我运行

set terminal qt size 560,270; 
set grid; set offset 1,1,0,0; 
set datafile separator " -"; 
set key autotitle columnhead;
plot for [i=2:6:2] "data.dat" using 1:(0.5*(column(i)+column(i+1))):(0.5*(column(i+1)-column(i))) with yerror; 

并获取

enter image description here

但是,我想添加一个适合这些点的线条,由于扭结,你不能只使用with yerrorlines

我的伪代码用于拟合增加和减少的行

inc(x) = k1*x + k2; 
con(x) = n1*x + n2;
dec(x) = m1*x + m2;
fit inc(x), con(x) dec(x) for [i=2:6:2] "data.dat" 
   using 1:(0.5*(column(i)+column(i+1))):(0.5*(column(i+1)-column(i))) 
   via k1,k2,n1,n2,m1,m2; 

问题在于使用带有for循环的函数fit

如何在for循环中使用Gnuplot? 我想在数据上同时插入许多行。

1 个答案:

答案 0 :(得分:2)

我会将doeval结合使用来执行此操作:

# Define your functions (you can also use do + eval to do this)
f1(x) = a1*x+b1
f2(x) = a2*x+b2
f3(x) = a3*x+b3

# Loop
do for [i=1:3] {
eval sprintf("fit f%g(x) 'data.dat' u 0:%g via a%g, b%g", i, i, i, i)
}

您可以根据自己的目的调整上述内容。