算法调试体会:错误的原因需要外求
关于映射(mapping)阶数、流形(manifold)类型、有限元空间阶数对于 Laplace 方程解的影响,我摸索并测试了一个多星期,终于得到了合理的解释。
程序的运行总会有一些结果超出我们的预期。这是因为,虽然我们对于基本原理和程序的流程逻辑有着大体正确的认识与代码实现,但是对于更为具体而微(nuances)的量与量之间的关系——包括定量的约束与不等式约束,关于变量值的绝对与相对大小的心理感受(sense),则与实际情况往往是不相符的,甚至是完全脱离实际的。因此,真正导致程序出现异常现象的原因总是在我们的认知之外。
此时,若仅局限于现有代码的逻辑,对其是否存在疏漏进行检查,或对自己在推导或编码过程中是否犯了粗心大意的毛病进行反思,就相当于在细枝末节的问题上用蛮力,往往不会得到什么有用的结果。如果一个人处于 focus mode (参考《A Mind for Numbers》)无法自拔,就容易陷入这样的困境。
真正的起因与答案要在自己的认知之外去找,也就是要启用发散性思维,采用 relaxed mode,以便跳出当前的系统(jump out of the box),得以从不同的维度审视或使用更高级的工具来尝试解决。经历了这个“外求”的过程之后,我们的认知和经验才能得到扩充与提升。