Godunov's theorem

转自Wiki

简介

在数值计算和计算流体动力学中,Godunov定理(Godunov's theorem 或 Godunov's order barrier theorem)是采用高精度数值方法计算偏微分方程中的重要数学定理。

定理陈述为:

采用线性数值格式求解偏微分方程时,如果数值解不产生新的极值,那么格式精度最多为1阶。

Sergei K. Godunov 教授首先在其博士阶段(莫斯科国立大学)证明这个定理。这是他在应用数学研究中最具影响的工作,对科学与工程及其他领域特别是计算流体力学(CFD)有深刻的影响。

定理

同样可参考Wesseling (2001)。

假设一个连续体问题由PDE描述,并且使用数值方法在进行计算,只进行一步,均匀网格,\(M\)个节点,积分算法,显式或者隐式。如果 \(x_j = j\Delta x\),\(t^n = n\Delta t\),那么一个数值格式可以表示为

\[\begin{equation}
\sum^{M}_{m = 1}\beta_m \varphi_{j+m}^{n+1} = \sum^{M}_{m = 1}\alpha_m \varphi_{j+m}^{n}
\end{equation}\]

换句话说,计算值 \(\varphi_{j}^{n+1}\) 在时刻 \(n+1\) 节点 \(j\) 是当前时刻解 \(n\) 的线性函数形式。我们假设 \(\beta_m\) 唯一的决定了 \(\varphi_{j}^{n+1}\)。现在,既然上述方程代表了 \(\varphi_{j}^{n+1}\) 与 \(\varphi_{j}^{n}\) 之间线性关系,那么我们可以采用线性转换得到下面等价形式,

\[\begin{equation}
\varphi_{j}^{n+1} = \sum^{M}_{m = 1}\gamma_m \varphi_{j+m}^{n}
\end{equation}\]

定理1. 单调保持性(Monotonicity preserving)

若格式(2)是单调保持的,那么

\[\begin{equation}
\gamma_m \ge 0
\end{equation}\]

证明:Godunov (1959)

case 1:充分性

假设 \(\varphi_{j}^{n}\) 是随 \(j\) 单调递增的,那么,由于 $\varphi_{j}^{n} \le \varphi_{j+1}^{n} \le \cdots \le \varphi_{j+m}^{n} $,因此

\[\begin{equation}
\varphi_{j}^{n+1} - \varphi_{j-1}^{n+1} = \sum^{M}_{m = 1}\gamma_m (\varphi_{j+m}^{n} - \varphi_{j+m-1}^{n}) \ge 0
\end{equation}\]

即 $\varphi_{j}^{n+1} \le \varphi_{j+1}^{n+1} \le \cdots \le \varphi_{j+m}^{n+1} $,得证。

case 2:必要性

由矛盾证明必要性。

假设 \(\gamma_p < 0\),\(p\) 为某个节点,采用如下单调增加的序列 \(\varphi_{j}^{n}\)

\[\begin{equation}
\varphi_{j}^{n} = 0, \quad i < k; \quad \varphi_{j}^{n} = 1, \quad i \ge k.
\end{equation}\]

根据方程(2)可以得到

\[\begin{equation}
\varphi_{j}^{n+1} - \varphi_{j-1}^{n+1} = \sum^{M}_{m = 1}\gamma_m (\varphi_{j+m}^{n} - \varphi_{j+m-1}^{n}) = \left\{
\begin{array}{ll}
0, & [j+m \ne k] \cr
\gamma_m, & [j+m =k]
\end{array}
\right.
\end{equation}\]

现在令 \(j = k - p\), 那么

\[\begin{equation}
\varphi_{k-p}^{n+1} - \varphi_{k-p-1}^{n+1} = \gamma_p(\varphi_{k}^{n} - \varphi_{k-1}^{n}) < 0
\end{equation}\]

这与 \(\varphi_{j}^{n+1}\) 的单调性矛盾,得证。

定理2. Godunov’s Order Barrier Theorem

若使用单步,二阶精度求解对流方程

\[\begin{equation}
\frac{\partial \varphi}{\partial t} + c \frac{\partial \varphi}{\partial x} = 0, \quad t>0
\end{equation}\]

只有当

\[\begin{equation}
\sigma = |c|\frac{\Delta t}{\Delta x} \in \mathcal{N}
\end{equation}\]

时,格式才是单调保持的,

其中 \(\sigma\) 为柯朗数(Courant–Friedrichs–Lewy condition number)

证明:Godunov (1959)

假设初始解为

\[\begin{equation}
\varphi(0,x) = \big(\frac{x}{\Delta x} - \frac{1}{2} \big)^2 - \frac{1}{4}
\end{equation}\]

那么其精确解为

\[\begin{equation}
\varphi(t,x) = \big(\frac{x - ct}{\Delta x} - \frac{1}{2} \big)^2 - \frac{1}{4}
\end{equation}\]

假设格式至少有二阶精度,那么第0步与第1步精确解如下

\[\begin{equation}
\varphi_j^1 = \big(j - \sigma - \frac{1}{2} \big)^2 - \frac{1}{4}, \quad \varphi_j^0 = \big(j - \frac{1}{2} \big)^2 - \frac{1}{4}
\end{equation}\]

将方程(2)代入,得:

\[\begin{equation}
\big(j - \sigma - \frac{1}{2} \big)^2 - \frac{1}{4} = \sum_m^M \gamma_m \big[ \big(j+m - \frac{1}{2} \big)^2 - \frac{1}{4} \big]
\end{equation}\]

假设格式具有单调保持性质,那么根据定理1,\(\gamma_m \ge 0\)

因此

\[\begin{equation}
\big(j - \sigma - \frac{1}{2} \big)^2 - \frac{1}{4} \ge 0
\end{equation}\]

假设 \(\sigma>0\),并且 \(\sigma \notin \mathcal{N}\),那么存在 \(j\) 使得 \(j>\sigma>(j-1)\),这使得

\[\begin{equation}
\big(j - \sigma - \frac{1}{2} \big)^2 - \frac{1}{4} = (j- \sigma)(j - \sigma - 1) < 0
\end{equation}\]

这与方程(16)矛盾,因此得证。

这里 \(\sigma = |c|\frac{\Delta t}{\Delta x} \in \mathcal{N}\) 仅是用于理论证明,并无法将其当作实际计算时系数,CFL为整数情况在实际计算中并不实用。


这里,单调保持的格式即保证不出现新的极值

参考

Godunov's 定理的更多相关文章

  1. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  2. Mittag-Leffler定理,Weierstrass因子分解定理和插值定理

    Mittag-Leffler定理    设$D\subset\mathbb C$为区域,而$\{a_{n}\}$为$D$中互不相同且无极限点的点列,那么对于任意给定的一列自然数$\{k_{n}\}$, ...

  3. 【转】Polya定理

    转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...

  4. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  5. poj1006Biorhythms(同余定理)

    转自:http://blog.csdn.net/dongfengkuayue/article/details/6461298 本文转自head for better博客,版权归其所有,代码系本人自己编 ...

  6. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  7. 大组合数:Lucas定理

    最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...

  8. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    [题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...

  9. 洛谷 P2735 电网 Electric Fences Label:计算几何--皮克定理

    题目描述 在本题中,格点是指横纵坐标皆为整数的点. 为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网.他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n& ...

随机推荐

  1. 重学c#系列——list(十二)

    前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...

  2. 【UE4 C++】关卡切换、流关卡加载卸载

    切换关卡 基于 UGameplayStatics:: OenLevel UGameplayStatics::OpenLevel(GetWorld(), TEXT("NewMap") ...

  3. python的虚拟环境Anaconda使用

    Anaconda 使用conda常用命令   1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)con ...

  4. spring security中ajax超时处理

    spring security为我们的系统提供了方便的认证和授权操作.在系统中完成认证和授权后,一般页面页面上大多数是ajax和后台进行操作,那么这个时候可能就会面临session超时,ajax去访问 ...

  5. 面试官问:说说你对Java函数式编程的理解

    常见的面试问题 总结一下,在Java程序员的面试中,经常会被问到类似这样的问题: Java中的函数式接口是什么意思? 注解 @FunctionalInterface 的作用是什么? 实现一个函数式接口 ...

  6. js fetch异步请求使用详解

    目录 认识异步 fetch(url) response.json() 结合async和await 异常处理 post请求 认识异步 首先我们得明白请求是一个异步的过程. 因为请求需要时间向服务器发送请 ...

  7. Hadoop的安装与部署

    一.硬件及环境 服务器:3台,IP分别为:192.168.100.105.192.168.100.110.192.168.100.115 操作系统:Ubuntu Server 18.04 JDK:1. ...

  8. python解释器的下载与安装

    python解释器 1. 什么是python解释器 用一种能让电脑听的懂得语言,使得电脑可以听从人们的指令去进行工作(翻译官) Python解释器本身也是个程序, 它是解释执行Python代码的,所以 ...

  9. Python里字符串Format时的一个易错“点”

    这是一篇很小的笔记,原因是我做学习通的时候见到了这个题: 当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了... 看了一眼这个format的字符串对象,发现有个 {:7. ...

  10. 【java + selenium3】窗口基本操作及8大定位元素方法总结(一)

    一.窗口基本操作 1. 关于窗口的设置都是由window对象提供的: 获取window的对象方法: driver.manage().window(); //1.获取 window 对象 Window ...