gnuplot - 迭代以获取数据文件中的变量

时间:2014-11-01 23:10:22

标签: loops gnuplot

我们说我已经获得了名为“myData.dat”的数据。在表格中

x  y
0  0
1  1
2  2
4  3
8  4
16 5

我需要从这些数据中找到以下内容:

  • 积分斜率
    • 0到5
    • 1至5
    • 2至5
    • 3至5
    • 4至5
  • y-intercept为相同的对
  • 连接相同对的线的等式

然后我需要绘制数据并覆盖线条;下面是我要求的图片。

enter image description here

我知道如何获得单对点的斜率和y截距,并绘制数据和线的方程。例如,对于第1点和第5点:

set table
plot "myData.dat" using 0:($0==0 ? y1=$2 : $2)
plot "myData.dat" using 0:($0==4 ? y5=$2 : $2)
unset table

m1 = (y5 - y1)/(5-1)
b1 = y1 - m1*1
y1(x) = m1*x + b1 

我是迭代(和gnuplot)的新手,我认为我的语法有问题。我已经尝试了很多东西但它们还没有奏效。我最好的猜测是它会以

的形式出现
plot for [i=1:4] using 0:($0==1 ? y.i=$1 : $1)

do for [i=1:5]{
m.i = (y5 - y.i)/(5-i)
b.i = y.i - m.i*1
y.i(x) = m.i*x + b.i    
}

set multiplot
plot "myData.dat" w lp
plot for [i=1:4] y.1(x)
unset multiplot

那么出了什么问题? gnuplot是否能够将循环计数器连接到变量?

1 个答案:

答案 0 :(得分:1)

您的语法不正确。虽然还有其他方法可以执行您想要的操作,但对于使用word(var,i)的实例,对您已有的最直接的修复方法是使用eval来计算可以连接变量的字符串: / p>

do for [i=1:5]{
eval "m".i." = (y5 - y".i.")/(5-".i.")"
eval "b".i." = y".i." - m".i."*1"
eval "y".i."(x) = m".i."*x + b".i    
}