Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Loops Gnuplot工作流程,涉及多个拟合循环_Loops_Gnuplot - Fatal编程技术网

Loops Gnuplot工作流程,涉及多个拟合循环

Loops Gnuplot工作流程,涉及多个拟合循环,loops,gnuplot,Loops,Gnuplot,我想在gnuplot中执行以下操作: 阅读我的文件,这些文件被方便地标记为“filenameN.txt”,其中N是第N个文件 使用,bN,…,将一些多项式fN(x)拟合到数据中,。。。 并使用multiplot在单个图形(多个绘图)中绘制所有这些图形 但是,我无法使用gnuplot中可用的循环来实现这一点。 例如,工作原理是创建一个文件,该文件符合我对N的要求,然后运行一个传递N=1…M的外部循环 这会产生M个图,但不会产生单个多点图 为了实现这一点,我需要为拟合指定变量名(f1、f2、…a1、

我想在gnuplot中执行以下操作: 阅读我的文件,这些文件被方便地标记为“filenameN.txt”,其中N是第N个文件

使用,bN,…,将一些多项式fN(x)拟合到数据中,。。。 并使用multiplot在单个图形(多个绘图)中绘制所有这些图形

但是,我无法使用gnuplot中可用的循环来实现这一点。 例如,工作原理是创建一个文件,该文件符合我对N的要求,然后运行一个传递N=1…M的外部循环

这会产生M个图,但不会产生单个多点图

为了实现这一点,我需要为拟合指定变量名(f1、f2、…a1、a2、…)(因为我可能希望以某种方式将所有变量一起使用)

我还希望plot循环在multiplot中生成简单的plot(每个plot包含数据及其拟合,M次),而不是第一个plot包含所有行,其余plot为空的multiplot

那么我有两个问题:

  • 如何分配变量名
  • 如何在多点布局中使用循环

您可以根据N定义您的函数,例如:

fstr(N) = sprintf('f%d(x) = a%d*x**2 + b%d*x + c%d', N, N, N, N)
eval(fstr(1))
这定义了函数
f1(x)=a1*x**2+b1*x+c1

fitstr(N) = sprintf('fit ''filename%d.txt'' f%d(x) via a%d,b%d,c%d', N, N, N, N, N)
然后你先做所有的配合:

do for [i=0:N] {
    eval(fstr(i))
    eval(fitstr(i))
}
然后用点绘制每个数据文件
,用线
绘制相应的拟合
。为了将所有绘图都绘制在一个图形中,必须使用单个
plot
命令并用逗号分隔绘图

但为了将拟合和数据分组到键中,您可以使用
replot
添加绘图。您必须使用
宏来获得绘图中的正确函数,
eval
在这里不起作用:

set style data points
set style func lines
plot 'filename0.txt' lt 1, f0(x) lt 1
set macros
do for [i=1:N] {
    f = sprintf('f%d(x)', i)
    replot sprintf('filename%d.txt', i) lt (i+1), @f lt (i+1)
}
只需将所有内容放在一个文件中并使用它运行gnuplot