C++ GSL插值错误,值必须为x值必须单调递增

C++ GSL插值错误,值必须为x值必须单调递增,c++,c,gsl,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.99

嗨,我的问题是,我的数据集是单调递增的,但在接近数据的末尾时,它看起来是这样的,其中一些
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

如果你真的达到了双精度所允许的极限——你的delta是<机器ε——那么你对数据的现状无能为力。x数据不是单调递增的。相反,您必须返回到生成它们的位置,并对它们应用某种转换,以使尾部的差异更大。或者,您可以乘以一个标量因子,然后在x值之间动态插值;完成后,再将系数除以


编辑:tr(x)=(x-0.5)^3可以很好地将内容隔开,或者tr(x)=tan((x-0.5)*pi)。不过,在后一种情况下,必须注意极端值。当然,这些变换可能会搞砸你要做的分析,所以一个标量因子可能是答案——显然,必须是一个变换,在这个变换下你的分析是不变的。添加一个常数也是可能的。

如果你真的达到了双精度所允许的极限——你的delta是
编辑:tr(x)=(x-0.5)^3可以很好地将内容隔开,或者tr(x)=tan((x-0.5)*pi)。不过,在后一种情况下,必须注意极端值。当然,这些变换可能会搞砸你要做的分析,所以一个标量因子可能是答案——显然,必须是一个变换,在这个变换下你的分析是不变的。添加一个常量也是可能的。

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

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

我想我有点困惑,因为双精度给出的小数位数远远超过6位。单精度是6。双精度问题是它是一个庞大的数据集,数据越来越接近1,速度非常慢。我想我有点困惑,因为双精度给你的小数位数远远超过6位。单精度给你6。它是双精度问题是它是一个巨大的数据集,数据越来越接近1非常缓慢的超高速处理删除重复项,然后在每个案例之间插入删除的值…搞砸我的分析是我担心的也许我应该在计算科学上发表这篇文章溢出?@pyCthon从未去过CS溢出——但如果你的分析很复杂,那么也许你应该试试,不过,你在这里没有说过任何相关内容。也许删除重复项,然后在每个案例之间插入删除的值……我担心的是我的分析会出错,也许我应该将此发布在计算科学溢出上?@pyCthon从未访问过CS溢出——但如果你的分析很复杂,那么也许你你应该试试,不过你在这里什么也没说。