gnuplot中的多个拟合参数

时间:2016-04-17 15:54:56

标签: 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..etc,例如重新缩放数据,我会像这样写它

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

,其中

a(i)=sprintf("a%01.0f",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

2 个答案:

答案 0 :(得分:1)

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

例如

a1 = 2
a2 = 3
a3 = 1

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

产生

enter image description here

此处,对于i的每个值,我们使用sprintf("a%d",i)建立变量的名称,该变量返回 a1 a2 a3 取决于i的值。为了获得变量的值,我们将该字符串传递给函数,该函数将字符串视为变量的名称并查找该值。我们看到 a1 的曲线是x ^ 2(因为 a1 是2), a2 的曲线是x ^ 3(如< em> a2 是3), a3 的曲线是x(因为 a3 是1)。

在您的情况下,您可以将 a(i)功能定义为

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

然后 a(1)将是 a1 的值, a(2)将是 a2的值等等。通过此更改,您的代码将完全按照书面形式工作。

答案 1 :(得分:-1)

要将字符串转换为float,您可以使用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

来自help real

  

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

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

a1=12
a(x)=sprintf("a%01.0f",x)
print real(value(a(1)))

P.S。你还有int函数,它与整数

相同

否则,如果您需要存储数组(gnuplot不具备该数组),您可能需要查看此建议:https://stackoverflow.com/a/35729052/2743307