如何检查我实现的微分方程数值方案的正确性

计算科学 数值分析
2021-12-12 13:30:32

我知道构建解决方案的方法。例如,我有一个 BVP:

uxx+u=0
经受:
ux(0)=f1,
ux(1)=f2

如果我想检查我的数值实现的正确性,只需插入u(x)=sin(x)接着f1=cos(0),f2=cos(1)然后运行脚本来实现。如果数值解的图形和u(x)=sin(x)大约匹配然后我有正确的实现。

当用不那么简单的微分方程构造解时,这可能会出现一些问题。目前我很难找到一个: ut=kuxx.

还有其他方法吗?或者这个方法有简单的功能吗?

1个回答

制造解决方案的方法(PDF 链接)如下所述。您选择一个能够激发足够多的操作员模式并满足边界条件和初始条件的解决方案,然后转动曲柄以获得可以实现的右侧函数。但是,仅使用裸正弦和余弦是一个糟糕的选择,因为它们可能是您的运算符的特征函数,并导致具有错误准确性的解决方案。通常使用超越函数的乘积。

在你实现了 RHS 函数之后,你应该在一系列更精细的网格上生成一系列数值解。然后,您应该计算计算值与某个标准或其他指标中每个网格上的精确值之间的差异。该范数的选择应基于您对数值方法的收敛理论。此时,目标是检查您的方法是否达到理论预测的准确度。这通常是O(h(p+k))在哪里h是网格尺寸,p是方法的顺序,并且k取决于您选择的规范。

如果,对于足够小h,您的方法的行为就像理论预测的那样,那么您已经对实现的准确性/正确性进行了一种衡量。