GSL插补误差,值必须是x值必须单调递增

时间:2012-09-18 14:59:33

标签: c++ c gsl

您好我的问题是我的数据集单调增加但是接近数据的结尾看起来如下所示,其中一些x[i-1] = x[i]如下所示。这会导致GSL中出现错误,因为它认为值不是单调增加的。是否有解决方案,修复或解决此问题?

值已经是双精度,此特定数据集从9.86553e-06开始,到.999999结束

唯一的解决方案是抵消for循环中的每个值吗?

0.999981
0.999981
0.999981
0.999982
0.999982
0.999983
0.999983
0.999983
0.999984
0.999984
0.999985
0.999985
0.999985

2 个答案:

答案 0 :(得分:2)

我有类似的问题。我通过一个简单的条件运算符(if语句)删除了重复项,这不会影响最终结果(由MatLab检查)。虽然,这可能有点问题。

答案 1 :(得分:1)

如果你真的达到了双精度所允许的极限 - 你的delta是<机器epsilon - 那么你无法对数据做任何事情。 x数据不是单调递增。相反,你将不得不回到它们生成的地方,并对它们应用某种变换,以使尾部的差异更大。或者您可以乘以标量因子,然后在运行中的x值之间进行插值;完成后再将因子分开。

编辑:tr(x)=(x-0.5)^ 3可以很好地解决问题,或者tr(x)= tan((x-0.5)* pi)。但是,在后一种情况下必须注意极端值。当然,这些转换可能会搞砸你试图做的分析,因此标量因素可能就是答案 - 显然,你的分析是不变的。也可能添加常数。