我将开始研究数字ODE求解器的软件库,并且正在为如何为求解器实现制定测试而苦苦挣扎。我的目标是,库,最终将包括两个非刚性和刚性问题解决者,以及至少一个隐式求解(或多或少看齐的能力将ode
在Matlab程序),所以测试方法需要反映各问题类型和针对不同求解器的条件。
我现在的问题是,我不知道从哪里开始测试。我可以想到几种不同的方法来测试算法的输出:
测试具有解析解的问题,并检查数值解是否在所有返回的数据点的公差范围内。这需要了解许多分析问题,这些问题具有我想要不同求解器使用的所有属性(刚度,隐式问题等),而我却没有,至少没有超出我的头脑。
此方法测试求解器方法的结果。因此,不能保证求解器实际上是有效的,只是不能解决给定的测试问题。因此,我怀疑需要大量测试问题才能放心地验证求解器是否正常工作。
使用我打算实现的算法在几个时间步骤内手动计算解决方案,然后对求解器进行相同的操作,并检查结果是否相同。这不需要真正解决问题的知识,但是反过来又需要大量动手工作。
这种方法,在另一方面,只测试算法由我来说,这是很好的-如果别人已经证明,4 次阶龙格库塔的作品,我不觉得一个迫切需要。但是,我确实担心制定测试用例会非常麻烦,因为我不知道一种生成测试数据的好方法(除了可能需要手工,否则很多工作……)。
根据我目前的知识,上述两种方法都对我造成严重的限制-我不了解第一个方法的一系列好的测试问题,也不了解第二个方法的良好生成方法。
还有其他方法可以验证数值ODE求解器吗?在实现方面还有其他标准需要验证吗?有没有很好的(免费)资源可以测试ODE求解器1?
编辑:
由于这个问题非常广泛,我想澄清一下。我要创建的测试套件将满足两个主要目的:
验证求解器是否可以按预期工作,以解决他们要解决的问题。换句话说,非刚性问题的求解器可以解决刚性问题,但应在非刚性问题上表现出色。同样,如果库中还有其他提供更高准确性的求解器,则可能不必强制执行非常准确的结果-只需“足够准确”即可。因此,我的问题的一部分是对哪些求解程序应使用哪些测试;或至少应该如何决定这一点。
安装磁带库后进行完整性测试。这些测试不必(不应)详尽或费时;只是可以在5秒钟内运行的最基础知识,但是如果有些东西太奇怪了,这将提醒用户。因此,我还需要一种构造测试的方法,该方法非常简单,但是仍然可以告诉我有关库状态的信息。
1是的,我一直在搜寻我的眼睛,但是我发现的大部分内容都是带有非常琐碎示例的讲义,但值得注意的是Bari的CWI ODE测试集例外,我不知道我是否或如何做。可以用于我的目的,因为它比我要测试的解决方案更复杂。