2

我想使用 gnuplot 将函数与数据集拟合。

我在文件“data”中使用了一个数据集示例:

1 2
5 4
6 5
7 8

如果我在 gnuplot 中做

>f(x) = a*x+b
>fit f(x) "data" via a,b

它工作得很好,(在这个例子中,我得到 a≃0.855 和 b≃0.687)

现在我真正想做的是适应功能floor(a*x+b)。所以我尝试了完全相同的方式

>f(x) = floor(a*x+b)
>fit f(x) "data" via a,b

我得到了输出

 Iteration 0
 WSSR        : 8                 delta(WSSR)/WSSR   : 0
 delta(WSSR) : 0                 limit for stopping : 1e-005
 lambda   : 0

initial set of free parameter values

a               = 1
b               = 1
         Singular matrix in Givens()
         error during fit

谷歌搜索它对我没有帮助,我还试图找出使用 fit with floor 是否有一些禁忌症,但我还是没有找到任何东西。

有人有想法吗?

注意:我使用 Gnuplot 4.6 补丁级别 0,为 Windows 32 位构建

4

1 回答 1

4

与 floor 拟合存在一个基本问题,即最小二乘误差函数是分段常数,因此当您寻找误差相对于拟合参数的梯度时,您总是会得到零。

在此示例中,对于 0.85,1.5 附近的 a,b 范围,最小平方和误差恰好为 3

Mathermatica,(它更强大)给出了一个结果 1,1 以及一个警告,由于零梯度,它不能确定这是否真的是一个最小值。

于 2013-07-10T17:19:16.643 回答