0

嗨,我的问题是我的数据集是单调递增的,但在数据的最后,它看起来像下面这样,其中一些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
4

2 回答 2

2

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

于 2013-03-06T18:21:33.693 回答
1

如果你真的达到了双精度允许的极限——你的增量小于机器 epsilon——那么你就无法对数据做任何事情。x 数据不是单调递增的。相反,您必须返回它们的生成位置并对它们应用某种变换以使尾部的差异更大。或者你可以乘以一个标量因子,然后在 x 值之间进行插值;然后在完成后将因子除以。

编辑: tr(x) = (x-0.5)^3 可能会很好地分隔事物,或者 tr(x) = tan( (x-0.5)*pi )。不过,在后一种情况下必须注意极端值。当然,这些转换可能会破坏您尝试执行的分析,因此标量因子可能是答案 - 显然,必须是您的分析不变的转换。添加一个常数也是可能的。

于 2012-09-18T15:29:45.107 回答