【问题标题】:gnuplot: Plot and fit 2d function with two variablesgnuplot:用两个变量绘制和拟合二维函数
【发布时间】:2013-01-21 18:55:38
【问题描述】:

是否可以在 gnuplot 中绘制和拟合具有两个变量的函数?例如,依赖于高度h 和温度T 的物理函数,其中T 相关性应该只计算但不能绘制(对于f、h 和T 存在实验数据):

f(h,T) = a * h * (1 + alpha * T) + f0

其中a 和f0 由拟合确定,alpha 是已知的。最后,我需要一个在 y 轴上带有 f 并在 x 轴上带有 h 的绘图。整个 T 依赖应该被妥善处理,但我不需要它与 splot 一起显示。

以下是我尝试过但失败的方法。我假设是因为无法设置两个虚拟变量:

set term png;
set output 'test.png';
set dummy h;
set dummy T;
f(h,T) = a * h * (1 + alpha * T) + f0;
fit f(h,T) 'data.txt' using 2:4:1 via a, f0;
plot f(h,T);

给出undefined variable: h。有什么想法吗?

【问题讨论】:

  • 您是否尝试过删除set dummy 的内容,然后只执行fit f(x,y) 'data.txt' using 2:4:1:(1) via a,f0?

标签: gnuplot curve-fitting dimension data-fitting


【解决方案1】:

来自文档中的示例:

Examples:
       f(x) = a*x**2 + b*x + c
       g(x,y) = a*x**2 + b*y**2 + c*x*y
       FIT_LIMIT = 1e-6
       fit f(x) 'measured.dat' via 'start.par'
       fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
       fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
       fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c

如果您这样做,我希望您的脚本能够正常工作:

set term png
set output 'test.png'
f(h,T) = a * h * (1 + alpha * T) + f0
fit f(x,y) 'data.txt' using 2:4:1:(1) via a, f0

set view 90,0  #possibly `set view 0,90` or `set view map`?
splot f(x,y)

【讨论】:

  • “使用”中的“:(1)”是什么意思?
  • 这是每个点应该被赋予的权重(例如错误)。请参阅 gnuplot 中的 help fit。这对每个点的权重相同。
  • 啊,好的。但尽管如此。如果我将所有切换到 x 和 y 并删除虚拟对象,则会收到错误 line 5: undefined variable: y(第 5 行是 plot)。我必须先在某处启用多变量图吗?拟合似乎工作得很好(我得到了合理的值),但绘图却不行。
  • @FooBar -- 抱歉,我没想到。您正在绘制 2 个变量的函数,因此您将需要 splot 而不是 plot。然后变量变为u 和v,而不是x 和y。我已经更新了,希望它现在可以工作。
  • 但是splot 绘制了一个曲面图(3D),但我想拟合f(h,T),但只绘制f(h)(2D)上的投影。所以从 3D 矢量(h, T, f(h,T)) 在(h, 0, f(h,T)) -> (h, f(h,T)) 上的投影。这样,如果我从仅显示 f(h) 部分的特定角度查看 3D f(h,T) 图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
相关资源
最近更新 更多