重叠型Schwarz算法利用Crank-Nicolson格式解Fisher-kpp方程
Fisher-kpp方程有如下的形式和解析解:
这份代码解的是如下的Fisher-kpp方程:
$$\frac{\partial u}{\partial t} = \alpha\frac{\partial^2 u}{\partial x^2} + \beta u(1-u)$$
这份代码使用了如下的Crank-Nicolson格式:
其中
$$f(u) = \beta u(1-u)$$
对上式差分得
易知,在每一时间步长需要求解如下方程组:
其中
$$r = \alpha\frac{\tau}{h^2}$$
由于 $U^n_0,U^n_{J}$ 已知且 $U^n_0,U^n_{J} \neq 0$
简化上式得
其中
为简化表达,由于 $\overrightarrow{U}^{n}$ 已知,不妨令
$$D=B\overrightarrow{U}^{n}+\frac{\tau}{2}F(\overrightarrow{U}^{n})+C$$
则 $D$ 已知,只需求解以下方程组:
$$A\overrightarrow{U}^{n+1}-\frac{\tau}{2}F(\overrightarrow{U}^{n+1})=D$$
考虑Newton迭代法:
$$f(x)=0 \ x_{n+1}=x_n-\frac{f(x)}{f'(x)}$$
而矩阵形式的Newton迭代法为:
$$\overrightarrow{x}_{n+1}=\overrightarrow{x}_n - J^{-1}_n F(\overrightarrow{x}_n)$$
其中
这里,使
$$G(\overrightarrow{U})=A\overrightarrow{U}^{n+1}-\frac{\tau}{2}F(\overrightarrow{U}^{n+1})-D=0$$
取 $\overrightarrow{U}_0=\overrightarrow{U}^n$ ,则Newton迭代法过程如下:
$$\overrightarrow{U}_{n+1}=\overrightarrow{U}_n-J^{-1}_nG(\overrightarrow{U}_n)$$
其中
迭代2次就可取得不错的结果,最后令 $\overrightarrow{U}^{n+1}=\overrightarrow{U}_2$ ,进行下一个时间步长的运算。