c ++数值分析准确的数据结构?

时间:2011-08-17 00:41:59

标签: c++ numerical-analysis

使用双I型立方样条插值算法。 这项工作似乎是成功的,但是当计算非常小的值时,相对误差约为6%。

双数据类型是否足以进行准确的科学数值分析?

4 个答案:

答案 0 :(得分:6)

Double对于大多数应用来说具有足够的精度。当然它是有限的,但总是可以通过使用不良算法来浪费任何精度。事实上,这应该是你的第一个嫌疑人。仔细查看你的代码,看看你是否正在做一些事情,让四舍五入的错误比必要的更快地积累,或者有些危险的东西,比如减去彼此非常接近的值。

答案 1 :(得分:1)

科学的数值分析很难做到正确,这就是为什么我把它留给专业人士。您是否考虑使用数字库而不是自己编写? Eigen是我目前最喜欢的:http://eigen.tuxfamily.org/index.php?title=Main_Page

我总是随身携带最新版本的数字食谱(nr.com),它确实有一个关于插值的优秀章节。 NR有限制性许可,但作者知道他们在做什么,并提供每种数字技术的简洁写作。其他要查看的库包括:ATLAS和GNU Scientific Library。

要回答你的问题,对于大多数科学应用来说,双重应该是绰绰有余的,我同意之前的海报应该是一个算法问题。您是否考虑过发布您正在使用的算法的代码?

答案 2 :(得分:0)

如果double足以满足您的需求,则取决于您使用的数字类型。正如亨宁建议的那样,最好先看一下你正在使用的算法,并确保它们在数值上稳定。

首先,这是一个很好的添加算法:Kahan summation algorithm

答案 3 :(得分:0)

双精度将最适合任何问题,但是如果多项式或函数快速振荡或重复或具有很高的维数,则三次样条将不能很好地工作。

在这种情况下,最好使用Legendre多项式,因为它们处理指数的变体。

通过一个简单的示例,如果您使用Euler,梯形或Simpson规则在三阶多项式内进行插值,则不需要很大的采样率即可获得插值(曲线下的面积)。但是,如果将它们应用于指数函数,则可能需要大大提高采样率,以免降低精度。勒让德多项式可以更轻松地满足这种情况。