2014-11-01 64 views
1

变量比方说,我已经得到了数据的形式被称为“MYDATA.DAT”gnuplot的 - 迭代获得的数据文件

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轴截距为同一对
  • 方程用于连接同一对线

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

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能够将循环计数器连接到变量吗?

+0

的Gnuplot的脚本能力是相当有限的;这是一个阴谋计划。为了做好自己的工作,你最好使用一种不同的脚本语言来生成方程的函数字符串,然后你可以“加载”。 – Christoph 2014-11-02 10:11:07

回答

1

您的语法不正确。虽然有其他方法可以做到你想要什么,对于instace使用word(var,i),最简单的修复到什么你已经是使用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  
} 
+0

这对于获得每对点的方程式非常有用。至于使用'plot'函数进行迭代,我还没有完全想到那个......但是就像Christoph在上面所说的那样,gnuplot在这方面相当有限,所以我认为我会从另一个角度攻击它。 – 2014-11-07 05:47:18

+0

@ chocolate.broccoli我今天回答了类似的问题,并对您的案例进行了修改。这里是你如何使用'word()'在循环中创建数组和访问值:http://stackoverflow.com/a/26819987/1792075 – Miguel 2014-11-09 00:38:11