1

我知道在 gnuplot 中拟合 2D 数据的 z 值在 [-1:4] 之间是

  f(x)=a*x+b
  fit [][-1:4] f(x) "data"

但是对于 3D 数据,如果我只想在 f(x) 的值介于 [-1:4] 之间时拟合数据

f(x)=a*x+b*y+c
fit [][-1:4] f(x) "data"
fit [][][-1:4] f(x) "data"

都是错误的。为什么 ?

4

2 回答 2

1

我不确定,如果您使用 2D 拟合描述的范围行为实际上是预期的,因为它不适用于 gnuplot 开发版本。根据文档,该fit命令的范围规范仅适用于虚拟变量(即xy)。因此,您的第一个 fit 命令可能仅因错误而起作用,这是您的一项功能。

要限制z-range,您可以将所需范围之外的所有值设置为1/0,这会导致未定义的数据点被忽略:

f(x, y) = a*x + b*y + c
zmin = -1
zmax = 4
fit f(x, y) "data" using 1:2:($3 < zmin || $3 > zmax ? 1/0 : $3):(1) via a,b,c

请注意,您的函数必须为两个虚拟变量x和定义y,并且您必须具有via语句,所有示例中都缺少该语句。

要拟合具有两个自变量 z=f(x,y) 的函数,所需的格式是using具有四个项 x:y:z:s。必须给出完整的格式 --- 没有为缺少的标记假定默认列。每个数据点的权重都是从上面的“s”评估的。如果误差估计不可用,则可以将常量值指定为常量表达式(请参阅plot datafile using),例如using 1:2:3:(1)

于 2013-08-21T21:04:17.687 回答
0

这会在 3D 中绘制一个平面,而不是一条线。我很困惑,直到我缩小并意识到。试试下面的 4 点数据集。“设置自动缩放”以确保您看到整个图像。或者只是阅读 fit.log 文件并意识到错误很高,表明不适合。

377.4202 -345.5518 2.1142

377.4201 -345.5505 2.5078

377.4206 -345.556 2.8359

377.4288 -345.5555 3.2109

于 2015-02-23T06:13:36.667 回答