我知道在 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"
都是错误的。为什么 ?
我知道在 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"
都是错误的。为什么 ?
我不确定,如果您使用 2D 拟合描述的范围行为实际上是预期的,因为它不适用于 gnuplot 开发版本。根据文档,该fit
命令的范围规范仅适用于虚拟变量(即x
和y
)。因此,您的第一个 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)
。
这会在 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