gnuplot中的多个fit参数

gnuplot中的多个fit参数,gnuplot,Gnuplot,我有几个函数f1(x),f2(x)…fn(x)。 每个函数都适合一个称为v(i)的数据集 每个都有这样的形式,例如:f1(x)=a1*x 现在我想通过调用for循环来绘制它们 plot for [i=i0:ie:di] v(i) using 1:($3) 到目前为止还不错。 现在我想为每个i调用a1,a2,a3..等等,例如重新缩放数据,我会这样写 plot for [i=i0:ie:di] v(i) using 1:($3/a(i)) 在哪里 问题是从字符串传递到浮点,然后传递到gnup

我有几个函数f1(x),f2(x)…fn(x)。 每个函数都适合一个称为v(i)的数据集 每个都有这样的形式,例如:f1(x)=a1*x 现在我想通过调用for循环来绘制它们

plot for [i=i0:ie:di] v(i) using 1:($3)
到目前为止还不错。 现在我想为每个i调用a1,a2,a3..等等,例如重新缩放数据,我会这样写

 plot for [i=i0:ie:di] v(i) using 1:($3/a(i))
在哪里

问题是从字符串传递到浮点,然后传递到gnuplot以将其识别为已定义的参数。我尝试添加零来进行隐式转换,但没有效果。即使我打印

print (a(i)+0)
是否有人有想法获得我的a(i)

非常感谢你的建议

感谢您对真实函数的建议,但我仍然遇到以下问题,这可以看作是这个最小的示例

a1=12
a(x)=sprintf("a%01.0f",x)
print real(a(i)) #want to get 12 here
Non-numeric string found where a numeric expression was expected

要将字符串转换为浮点,可以使用
real
函数:

my_val=2.3
my_str=sprintf("%f",my_val)
print my_str # this is a string
print real(my_str) # this is a float
a1=12
a(x)=sprintf("a%01.0f",x)
print real(value(a(1)))
help real

real(x)
函数返回其参数的实数部分

如果
x
是字符串函数(即返回变量名称的函数),则需要在其上使用
函数:

my_val=2.3
my_str=sprintf("%f",my_val)
print my_str # this is a string
print real(my_str) # this is a float
a1=12
a(x)=sprintf("a%01.0f",x)
print real(value(a(1)))
p、 还有
int
函数,它对整数也有同样的作用


否则,如果您需要存储一个数组(gnuplot无法存储该数组),您可能希望查看以下建议:

要将字符串转换为浮点,您可以使用
real
函数:

my_val=2.3
my_str=sprintf("%f",my_val)
print my_str # this is a string
print real(my_str) # this is a float
a1=12
a(x)=sprintf("a%01.0f",x)
print real(value(a(1)))
help real

real(x)
函数返回其参数的实数部分

如果
x
是字符串函数(即返回变量名称的函数),则需要在其上使用
函数:

my_val=2.3
my_str=sprintf("%f",my_val)
print my_str # this is a string
print real(my_str) # this is a float
a1=12
a(x)=sprintf("a%01.0f",x)
print real(value(a(1)))
p、 还有
int
函数,它对整数也有同样的作用


否则,如果您需要存储一个数组(gnuplot无法存储该数组),您可能需要考虑以下建议:

您需要使用value函数(请参见
帮助值
)。value函数接受一个字符串并返回名为该字符串的变量的值

比如说

a1 = 2
a2 = 3
a3 = 1

plot for[i=1:3] x**value(sprintf("a%d",i)) t sprintf("a%d",i)
产生

这里,对于i的每个值,我们用
sprintf(“a%d”,i)
建立了一个变量的名称,它根据i的值返回a1、a2或a3。为了获得变量的值,我们将该字符串传递给value函数,该函数将字符串视为变量的名称并查找值。我们看到a1的曲线是x^2(a1是2),a2的曲线是x^3(a2是3),a3的曲线是x(a3是1)

在您的例子中,您可以将a(i)函数定义为

a(i)=value(sprintf("a%01.0f",i))

然后a(1)将是a1的值,a(2)将是a2的值,依此类推。通过此更改,您的代码将完全按照编写的方式工作。

您需要使用功能(请参阅
帮助值
)。value函数接受一个字符串并返回名为该字符串的变量的值

比如说

a1 = 2
a2 = 3
a3 = 1

plot for[i=1:3] x**value(sprintf("a%d",i)) t sprintf("a%d",i)
产生

这里,对于i的每个值,我们用
sprintf(“a%d”,i)
建立了一个变量的名称,它根据i的值返回a1、a2或a3。为了获得变量的值,我们将该字符串传递给value函数,该函数将字符串视为变量的名称并查找值。我们看到a1的曲线是x^2(a1是2),a2的曲线是x^3(a2是3),a3的曲线是x(a3是1)

在您的例子中,您可以将a(i)函数定义为

a(i)=value(sprintf("a%01.0f",i))

然后a(1)将是a1的值,a(2)将是a2的值,依此类推。通过此更改,您的代码将完全按照编写的方式工作。

我更新了答案。在您的情况下,您需要执行
i=1;打印实值(a(i))
。希望这能修复脚本谢谢,值函数是缺少的部分…我更新了答案。在您的情况下,您需要执行
i=1;打印实值(a(i))
。希望这能修复脚本谢谢,值函数是缺少的部分。。。