Loops gnuplot——在数据文件中获取变量的迭代

Loops gnuplot——在数据文件中获取变量的迭代,loops,gnuplot,Loops,Gnuplot,假设我在表单中有一个名为“myData.dat”的数据 x y 0 0 1 1 2 2 4 3 8 4 16 5 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]

假设我在表单中有一个名为“myData.dat”的数据

x  y
0  0
1  1
2  2
4  3
8  4
16 5
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
我需要从这些数据中找到以下内容:

  • 点的斜率
    • 0到5
    • 1至5
    • 2至5
    • 3至5
    • 4至5
  • 相同对的y截距
  • 连接相同线对的线的方程
然后我需要绘制数据并覆盖线;下面是我要的东西的图片

我知道如何获得一对点的斜率和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)的新手,我认为我的语法有问题。我试过很多方法,但都不管用。我最好的猜测是它会以

x  y
0  0
1  1
2  2
4  3
8  4
16 5
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是否能够将循环计数器关联到变量?

您的语法不正确。尽管有其他方法可以满足您的需要,但对于使用
word(var,i)
的Instance来说,最简单的解决方法是使用
eval
来计算可以连接变量的字符串:

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    
}

Gnuplot的脚本编写能力相当有限;这是一个绘图程序。要完成这些工作,最好使用不同的脚本语言,为方程生成函数字符串,然后加载这些字符串。这对于获得每对点的方程非常有用。至于使用“plot”函数进行迭代,我还没有完全弄清楚这一点。。。但正如Christoph在上面所评论的,gnuplot在这方面是非常有限的,所以我想我会从另一个角度来探讨它。@chocolate.brocoli我今天回答了类似的问题,并回忆了你的案例。以下是如何使用
word()
在循环中创建数组和访问值: