Testing 如何测试数值分析例程?

Testing 如何测试数值分析例程?,testing,numerical,Testing,Numerical,关于如何创建、维护和考虑为数值分析代码编写测试例程,是否有好的在线资源 对于测试矩阵乘法之类的东西,我看到的一个限制是,明显的测试(比如让一个矩阵作为恒等式)可能无法完全测试代码的功能 此外,您通常也在处理大型数据结构。有没有人对这方面的方法有一些好的想法,或者有好的地方可以看的指针呢?看看一本叫的书。这是关于证明程序的正确性。如果你想确保你的程序是正确的(为了证明它们的正确性),这本书是一个很好的开始 可能不完全是您想要的,但这是一个软件工程问题的计算机科学答案。听起来您至少需要以两种不同的方

关于如何创建、维护和考虑为数值分析代码编写测试例程,是否有好的在线资源

对于测试矩阵乘法之类的东西,我看到的一个限制是,明显的测试(比如让一个矩阵作为恒等式)可能无法完全测试代码的功能

此外,您通常也在处理大型数据结构。有没有人对这方面的方法有一些好的想法,或者有好的地方可以看的指针呢?

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


可能不完全是您想要的,但这是一个软件工程问题的计算机科学答案。

听起来您至少需要以两种不同的方式考虑测试:

  • 一些数值方法允许一些元思维。例如,可逆操作允许您设置测试用例,以查看结果是否在原始测试的可接受误差范围内。例如,矩阵M-逆乘以矩阵M*随机向量V应再次得出V,在某种可接受的误差度量范围内。
    显然,本例练习矩阵求逆、矩阵乘法和矩阵向量乘法。我喜欢这样的链,因为你可以生成相当多的随机测试用例,并获得统计覆盖率,这将是一个艰苦的手工编写。不过,它们并不是孤立地执行单个操作

  • 一些数值方法的误差有一个封闭的形式表示。如果可以使用已知的解决方案设置情况,则可以比较解决方案和计算结果之间的差异,查找超出这些已知界限的差异


  • 从根本上说,这个问题说明了一个问题,即测试复杂的方法需要相当多的领域知识。具体的参考资料需要更多关于测试内容的具体信息。我绝对建议您至少手头有。

    如果您要进行矩阵计算,请使用LAPACK。这是经过良好测试的代码。非常聪明的人在这方面已经工作了几十年。他们深入思考了那些外行永远不会想到的问题

    一般来说,我推荐两种测试:系统测试和随机测试。我所说的系统化是指探索边缘案例等。如果你能阅读源代码,这会有所帮助。算法通常有分支点:用这种方法计算这个范围内的数字,用另一种方法计算另一个范围内的数字,等等。测试靠近两侧分支点的值,因为这是近似误差最大的地方


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

    如果使用随机输入值,则放置固定种子是一个好主意。这样,如果出现问题,您可以准确地重现导致问题的值。