是否有任何良好的在线资源可用于创建,维护和考虑编写数值分析代码的测试例程?
我可以看到的测试矩阵乘法之类的限制之一是明显的测试(比如将一个矩阵作为标识)可能无法完全测试代码的功能。
此外,您还经常处理大型数据结构。有没有人对如何处理这个问题有一些好的想法,或者有指向好看的地方?
答案 0 :(得分:3)
听起来好像你需要考虑至少以两种不同的方式进行测试:
一些数值方法允许一些元思维。例如,可逆操作允许您设置测试用例以查看结果是否在原始的可接受误差范围内。例如,矩阵 M-inverse 乘以矩阵 M *随机向量 V 应再次导致 V ,在一些可接受的误差测量范围内 显然,这个例子练习矩阵逆,矩阵乘法和矩阵向量乘法。我喜欢这样的链条,因为你可以生成相当多的随机测试用例,并获得统计覆盖,这将是一个必须手工编写的障碍。但是,他们不会孤立地进行单一操作。
某些数值方法的错误是封闭式表达式。如果您可以使用已知解决方案设置情境,则可以比较解决方案与计算结果之间的差异,查找超出这些已知范围的差异。
从根本上说,这个问题说明了测试复杂方法需要很多领域知识的问题。具体的参考资料需要更具体的信息来确定您正在测试的内容。我绝对建议您至少手头有Steve Yegge's recommended book list。
答案 1 :(得分:2)
如果您要进行矩阵计算,请使用LAPACK。这是经过良好测试的代码。几十年来,非常聪明的人一直在努力。他们深刻思考了那些不知不觉的问题。
一般来说,我建议两种测试:系统测试和随机测试。通过系统化我的意思是探索边缘情况等。如果您可以阅读源代码,它会有所帮助。通常算法具有分支点:对于此范围内的数字计算这种方式,对于另一范围内的数字计算这种方式等。测试值靠近任一侧的分支点,因为这是近似误差通常最大的地方。
随机输入值也很重要。如果您理性地选择所有测试用例,您可以系统地避免一些您没有意识到的问题。有时,即使您没有要测试的确切值,也可以充分利用随机输入值。例如,如果您有用于计算函数及其逆的代码,则可以生成1000个随机值,并查看是否应用该函数及其反函数会使您回到原来的位置。
答案 2 :(得分:1)
通过名为David Gries的The Science of Programming查看一本书。这是关于证明程序的正确性。如果你想确保你的程序是正确的(为了证明它们的正确性),这本书是一个很好的起点。
可能不完全是您正在寻找的东西,但它是计算机科学对软件工程问题的回答。