我想使用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
谷歌搜索它没有帮助我,我也试图找到是否有一些使用适合地板的禁忌症但我再也找不到任何东西。
有人有想法吗?
注意:我使用Gnuplot 4.6 patchlevel 0,专为Windows 32位
而构建答案 0 :(得分:4)
存在一个与地板拟合的基本问题,即最小二乘误差函数是分段常数,因此当您根据拟合参数查找误差的梯度时,总是得到零。
在这个例子中,对于a,b的范围,最小平方和误差恰好是3,在.85,1.5
附近Mathermatica(功能更强大)给出结果1,1以及由于零渐变而无法确定这是否真的是最小值的警告。