Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gnuplot 从文件中读取函数系数_Gnuplot - Fatal编程技术网

Gnuplot 从文件中读取函数系数

Gnuplot 从文件中读取函数系数,gnuplot,Gnuplot,假设我有以下文件: 1,2,3 4,5,6 7,8,9 我想让gnuplot使用文件值作为系数,绘制3个形式为ax^2+bx+c的多项式。如果直接执行此操作,我将执行以下操作: plot x**2+2*x+3, 4*x**2+5*x+6, 7*x**2+8*x+9 但是我想通过编程的方式来实现这一点,对于输入文件中任意数量的行 我想我可能会接近以下代码的灵感: n=“'awk'END{print NR}'

假设我有以下文件:

1,2,3
4,5,6
7,8,9
我想让gnuplot使用文件值作为系数,绘制3个形式为ax^2+bx+c的多项式。如果直接执行此操作,我将执行以下操作:

plot x**2+2*x+3, 4*x**2+5*x+6, 7*x**2+8*x+9
但是我想通过编程的方式来实现这一点,对于输入文件中任意数量的行

我想我可能会接近以下代码的灵感:

n=“'awk'END{print NR}'虽然我多年来一直有同样的问题,但最终我设法找到了解决办法。
它需要创造性地使用
stats
函数将文件中的值分配给变量,并使用两个
do for[…]
循环将一些命令存储在临时文件中

filename = "InputFileName.dat"
stats filename nooutput
nlines = STATS_records-1
set print "temp.gnuplot"
do for [i=0:nlines] {\
  print sprintf("stats filename every ::%i::%i using (a%i=$1,b%i=$2,c%i=$3,0):(0) nooutput",i,i,i,i,i)}
set print
load "temp.gnuplot"
set print "temp.gnuplot"
do for [i=1:nlines] {print sprintf("replot  a%i*x**2 + b%i*x + c%i",i,i,i)}
plot a0*x**2 + b0*x +c0
load "temp.gnuplot"
set print
根据需要更改
filename
变量。您可以在完成像这样的系统调用后删除临时文件
!rm temp.gnuplot

我知道它不是特别优雅,我特别不喜欢使用临时文件,如果有人知道如何执行字符串变量,我很乐意知道。但是,嘿,它工作(即使在窗户下)


编辑:忘记为输入评分。

这是一个旧线程,但由于前面的回答,我可以使用字符串而不是临时文件来建议升级版本。这一个,没有必要麻烦删除无用的临时文件后

filename = "InputFileName.dat"
stats filename nooutput

nlines = STATS_records-1

paramstr(N) = sprintf("stats filename every ::%i::%i using (a%i=$1,b%i=$2,c%i=$3,0):(0) nooutput",N,N,N,N,N)
do for [i=0:nlines] {
    eval(paramstr(i))
}

plotstr = "p "
do for [i=0:nlines] {
    plotstr = plotstr . sprintf("a%i*x**2 + b%i*x + c%i%s",i,i,i,(i == nlines) ? "" : ", ")
}

eval(plotstr)

可能需要进行一些
设置xrange
设置yrange
调优,以查看您感兴趣的内容。

使用语法
绘制'test.dat'…
绘制的是数据文件,而不是x的函数。所以变量x没有定义。你也可以看看。无论如何,没有一个简单的解决方案。
filename = "InputFileName.dat"
stats filename nooutput

nlines = STATS_records-1

paramstr(N) = sprintf("stats filename every ::%i::%i using (a%i=$1,b%i=$2,c%i=$3,0):(0) nooutput",N,N,N,N,N)
do for [i=0:nlines] {
    eval(paramstr(i))
}

plotstr = "p "
do for [i=0:nlines] {
    plotstr = plotstr . sprintf("a%i*x**2 + b%i*x + c%i%s",i,i,i,(i == nlines) ? "" : ", ")
}

eval(plotstr)