在数字中,能够识别不稳定的方案并提高其稳定性非常重要。如何识别不稳定的浮点计算?
我正在做一个非常复杂的仿真,其中许多数值方案一起工作,我正在寻找一种方法来识别其薄弱部分。我正在研究涉及微分方程的物理模型。整个过程的鸟瞰图是:
(初步步骤)收集物理观测P。
确定模拟的初始参数。这使用了一种优化算法,在该算法中,我们进入参数空间并查找参数C,以使某些误差函数E(F(C),P)降至最小,其中F为参数的某些导出量。
将C插入仿真引擎。这是EDP的Euler方案,因此,在每个时间步上,我们都会计算驱动动态项(每个项都是一个复杂的函数,可能会受到不稳定性的影响),并向Euler方案提供这些动态项以计算下一个州。这持续了数千个时间点。
在模拟结束时,我们计算最终状态S的某些函数Proof(S),并将其与从观察到的数量推导出的一些Require(P)进行比较。这不是结果的正式证明,更多是真实性检查。
此外,我看到了一个复杂的操作塔(在Euler方案中,在Proof中,动态项的计算)。并希望识别并修复“不良零件”。
我推测使用精度降低的浮点数的软件实现会放大数值方案的不稳定性,从而简化了不同实现之间的比较。这是调查这个问题的常用技术吗?是否可以使用虚拟机(例如Bochs)来实现此目的而无需更改程序?
为了适当地处理稳定性问题,有时可以将数值过程的典型输入作为目标,因此可以对其进行调整以使其在该输入上效果很好,而在其他有效但不太可能的输入上效果可能不太好。给定典型输入的样本,就有可能窥探一些中间结果并为它们准备统计数据。同样,这是研究稳定性问题的常用技术吗?虚拟机对此有用吗?