2008-08-19 48 views
7

如何创建,维护和思考编写数值分析代码的测试例程,是否有很好的在线资源?如何测试数值分析例程?

对于像测试矩阵乘法这样的东西,其中一个局限性是,明显的测试(如使用一个矩阵作为标识)可能无法完全测试代码的功能。

此外,有一个事实,即您通常也处理大型数据结构。有没有人有一些好的想法来解决这个问题,或者有指向好看的地方?

回答

3

听起来好像你需要考虑测试至少两种不同的方式:

  1. 一些数值方法允许一些元思维。例如,可逆操作允许您设置测试用例,以查看结果是否在原始可接受的误差范围内。例如,矩阵M-逆倍矩阵中号 *随机矢量V应导致V再次,对错误的一些可接受的度量内。
    很明显,这个例子演示了矩阵求逆,矩阵乘法和矩阵向量乘法。我喜欢这样的链条,因为你可以产生大量的随机测试用例,并获得统计学的覆盖范围,这将成为必须手动编写的难题。不过,他们并没有单独行动。

  2. 一些数值方法具有它们的误差的封闭表达式。如果您可以使用已知解决方案来设置情况,则可以比较解决方案和计算结果之间的差异,寻找超出这些已知边界的差异。

从根本上说,这个问题说明了测试复杂方法的问题需要相当多的领域知识。具体的参考文献需要更多关于你正在测试的信息。我肯定会建议你至少有Steve Yegge's recommended book list在手边。

1

看看书David GriesThe Science of Programming。这是关于证明程序的正确性。如果你想确保你的程序是正确的(为了证明它们的正确性),这本书是一个很好的开始。

可能不是你要找的东西,但它是软件工程问题的计算机科学答案。

2

如果您打算进行矩阵计算,请使用LAPACK。这是经过很好测试的代码。几十年来,非常聪明的人一直在努力。他们深刻思考了那些外行绝不会想到的问题。

一般来说,我会推荐两种测试:系统性和随机性。系统的意思是探索边缘案例等。它可以帮助您阅读源代码。通常算法有分支点:对这个范围内的数字计算这种方式,对另一个范围内的数字以另一种方式计算等。测试值靠近两侧的分支点,因为这是近似误差通常最大的地方。

随机输入值也很重要。如果你理性地选择所有的测试用例,你可以系统地避免你没有意识到的东西是一个问题。有时,即使您没有准确的值进行测试,您也可以很好地使用随机输入值。例如,如果您有用于计算函数及其反函数的代码,则可以生成1000个随机值,并查看应用函数及其反函数是否使您回到开始位置附近。