【问题标题】:Multiple fit parameters in gnuplotgnuplot 中的多个拟合参数
【发布时间】:2016-08-09 07:01:14
【问题描述】:

我有几个函数 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

【问题讨论】:

  • 我更新了答案。在您的情况下,您需要执行i=1; print real(value(a(i)))。希望这可以修复脚本
  • 谢谢,价值函数是缺失的部分......

标签: gnuplot


【解决方案1】:

您需要使用 value 函数(请参阅help 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) 建立一个变量的名称,它返回 a1a2a3 em> 取决于 i 的值。为了获取变量的值,我们将该字符串传递给 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 的值 等等。通过此更改,您的代码将完全按照编写的方式运行。

【讨论】:

    【解决方案2】:

    要将字符串转换为浮点数,可以使用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)))
    

    附言你也有 int 函数,它对整数做同样的事情

    否则,如果您需要存储一个数组(gnuplot 无法做到),您可能需要查看以下建议:https://stackoverflow.com/a/35729052/2743307

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多