偏微分方程算法之混合边界条件下的差分法

目录

一、研究目标

二、理论推导

三、算例实现

四、结论


一、研究目标

        我们在前几节中介绍了Poisson方程的边值问题,接下来对椭圆型偏微分方程的混合边值问题进行探讨,研究对象为:

\left\{\begin{matrix} -(\frac{\partial^{2}u(x,y)}{\partial x^{2}}+\frac{\partial^{2}u(x,y)}{\partial y^{2}})=f(x,y),(x,y)\in\Omega,\space\space(1)\\ \frac{\partial u(x,y)}{\partial \mathbf{n}}+\lambda(x,y)u=\mu(x,y),(x,y)\in\partial \Omega=\Gamma \end{matrix}\right.

其中,\Omega为矩形区域\Omega=[(x,y)|a\leqslant x\leqslant b,c\leqslant y\leqslant d]f(x,y)\Omega上的连续函数,\mathit{\mathbf{n}}\Gamma上的单位法向量,从而\frac{\partial u(x,y)}{\partial\mathbf{n}}表示方向导数,\lambda(x,y),\mu(x,y)\Gamma的连续函数且\lambda(x,y)非负。对于矩形区域\Omega而言,其边界上的法向量没有统一的表达式,需要对四条边界线段分别讨论。可见:

        在左边界\mathbf{n}_{1}=(-1,0),边界条件为(-\frac{\partial u}{\partial x}+\lambda(x,y)u)|_{(a,y)}=\mu_{1}(a,y)

        在右边界\mathbf{n}_{2}=(1,0),边界条件为(\frac{\partial u}{\partial x}+\lambda(x,y)u)|_{(b,y)}=\mu_{2}(b,y)

        在下边界\mathbf{n}_{3}=(0,-1),边界条件为(-\frac{\partial u}{\partial y}+\lambda(x,y)u)|_{(x,c)}=\mu_{3}(x,c)

        在上边界\mathbf{n}_{4}=(0,1),边界条件为(\frac{\partial u}{\partial y}+\lambda(x,y)u)|_{(x,d)}=\mu_{4}(x,d)

        于是,公式(1)可以具体写为:

\left\{\begin{matrix} -(\frac{\partial^{2}u(x,y)}{\partial x^{2}}+\frac{\partial^{2}u(x,y)}{\partial y^{2}})=f(x,y),(x,y)\in(a,b)\times (c,d),\\ (\frac{\partial u(x,y)}{\partial x}-\lambda(x,y)u)|_{(a,y)}=\varphi_{1}(y),c\leqslant y\leqslant d,\\ (\frac{\partial u(x,y)}{\partial x}+\lambda(x,y)u)|_{(b,y)}=\varphi_{2}(y),c\leqslant y\leqslant d,\\ (\frac{\partial u(x,y)}{\partial y}-\lambda(x,y)u)|_{(x,c)}=\Psi_{1}(x),a\leqslant x\leqslant b,\\ (\frac{\partial u(x,y)}{\partial y})+\lambda(x,y)u)|_{(x,d)},\Psi_{2}(x),a\leqslant x\leqslant b \end{matrix}\right.

二、理论推导

        首先进行矩形区域\Omega的等距剖分,得到各网格节点(x_{i},y_{j}),且x_{i}=a+i\cdot\Delta x,i=0,1,\cdot\cdot\cdot,m\Delta x=(b-a)/my_{j}=c+j\cdot\Delta y,j=0,1,\cdot\cdot\cdot,n\Delta y=(c-d)/n。然后弱化原方程,使其仅在离散节点上成立,从而有

\left\{\begin{matrix} -(\frac{\partial^{2}u(x,y)}{\partial x^{2}}+\frac{\partial^{2}u(x,y)}{\partial y^{2}})|_{(x_{i},y_{j})}=f(x_{i},y_{j}),1\leqslant i\leqslant m-1,1\leqslant j\leqslant n-1,\\ \frac{\partial u(x,y)}{\partial x}|_{(x_{0},y_{j})}-\lambda(x_{0},y_{j})u(x_{0},y_{j})=\varphi_{1}(y_{j}),0\leqslant j\leqslant n, \\ \frac{\partial u(x,y)}{\partial x}|_{(x_{m},y_{j})}+\lambda(x_{m},y_{j})u(x_{m},y_{j})=\varphi_{2}(y_{j}),0\leqslant j\leqslant n, \\ \frac{\partial u(x,y)}{\partial y}|_{(x_{i},y_{0})}-\lambda(x_{i},y_{0})u(x_{i},y_{0})=\Psi_{1}(x_{i}),0\leqslant i\leqslant m, \\ \frac{\partial u(x,y)}{\partial y}|_{(x_{i},y_{n})}+\lambda(x_{i},y_{n})u(x_{i},y_{n})=\Psi_{2}(x_{i}),0\leqslant i\leqslant m. \end{matrix}\right.

        将上式中的一阶、二阶偏导数分别用关于一阶导数的中心差商和关于二阶导数的中心差商来近似,得

\left\{\begin{matrix} -(\frac{u(x_{i-1},y_{j})-2u(x_{i},y_{j})+u(x_{i+1},y_{j})}{\Delta x^{2}}+\frac{u(x_{i},y_{j-1})-2u(x_{i},y_{j})+u(x_{i},y_{j+1})}{\Delta y^{2}})\\ =f(x_{i},y_{j})+O(\Delta x^{2}+\Delta y^{2}),1\leqslant i\leqslant m-1,1\leqslant j\leqslant n-1,\\ \frac{u(x_{1},y_{j})-u(x_{-1},y_{j})}{2\Delta x}-\lambda(x_{0},y_{j})u(x_{0},y_{j})=\varphi_{1}(y_{j})+O(\Delta x^{2}),0\leqslant j\leqslant n,\\ \frac{u(x_{m+1},y_{j})-u(x_{m-1},y_{j})}{2\Delta x}+\lambda(x_{m},y_{j})u(x_{m},y_{j})=\varphi(y_{j})+O(\Delta x^{2}),0\leqslant j\leqslant n,\\ \frac{u(x_{i},y_{1})-u(x_{i},y_{-1})}{2\Delta y}-\lambda(x_{i},y_{0})u(x_{i},y_{0})=\Psi_{1}(x_{i})+O(\Delta y^{2}),0\leqslant i\leqslant m,\\ \frac{u(x_{i},y_{n+1})-u(x_{i},y_{n-1})}{2\Delta y}+\lambda(x_{i},y_{n})u(x_{i},y_{n})=\Psi_{2}(x_{i})+O(\Delta y^{2}),0\leqslant i\leqslant m. \end{matrix}\right.

        用数值解代替精确解并忽略高阶项,得到以下数值格式:

\left\{\begin{matrix} -(\frac{u_{i-1,j}-2u_{i,j}+u_{i+1,j}}{\Delta x^{2}}+\frac{u_{i,j-1}-2u_{i,j}+u_{i,j+1}}{\Delta y^{2}})=f_{i,j},1\leqslant i\leqslant m-1,1\leqslant j\geqslant n-1,\\ u_{1,j}-u_{-1,j}=2\Delta x(\varphi_{1}(y_{j})+\lambda_{0,j}u_{0,j}),0\leqslant j\leqslant n,\\ u_{m+1,j}-u_{m-1,j}=2\Delta x(\varphi_{2}(y_{j})-\lambda_{m,j}u_{m,j}),0\leqslant j\leqslant n,\\ u_{i,1}-u_{i,-1}=2\Delta y(\Psi_{1}(x_{i})+\lambda_{i,0}u_{i,0}),0\leqslant i\leqslant m,\\ u_{i,n+1}-u_{i,n-1}=2\Delta y(\Psi_{2}(x_{i})-\lambda_{i,n}u_{i,n}),0\leqslant i\leqslant m. \end{matrix}\right.(2)

其中,\lambda_{i,j}=\lambda(x_{i},y_{j}),f_{i,j}=f(x_{i},y_{j})。该格式的局部截断误差为O(\Delta x^{2}+\Delta y^{2}),同时需要处理其中的下标越界问题。由于函数的连续性,我们认为公式(2)中的第1式对i=0也成立,即有

-(\frac{u_{-1,j}-2u_{0,j}+u_{1,j}}{\Delta x^{2}}+\frac{u_{0,j-1}-2u_{0,j}+u_{0,j+1}}{\Delta y^{2}})=f_{i,j},1\leqslant j\leqslant n-1

        再成公式(2)的第2式中解出u_{-1,j}=u_{1,j}-2\Delta x(\varphi_{1}(y_{j})+\lambda_{0,j}u_{0,j})代入上式,得

-\frac{2u_{1,j}-2(1+\Delta x\lambda_{0,j})u_{0,j}}{\Delta x^{2}}-\frac{u_{0,j-1}-2u_{0,j}+u_{0,j+1}}{\Delta y^{2}}=f_{i,j}-\frac{2}{\Delta x}\varphi_{1}(y_{j}),1\leqslant j\leqslant n-1

同样,设公式(2)中的第1式分别对i=m,j=0,j=n成立,再分别从公式(2)的第3、4、5式中解出u_{m+1,j},u_{i,-1},u_{i,n+1}代入前面刚得到的方程,就可以处理掉越界下标,得到以下格式:

\left\{\begin{matrix} -\frac{u_{i-1,j}-2u_{i,j}+u_{i+1,j}}{\Delta x^{2}}-\frac{u_{i,j-1}-2u_{i,j}+u_{i,j+1}}{\Delta y^{2}}=f_{i,j},1\leqslant i\leqslant m-1,1\leqslant j\leqslant n-1,\\ -\frac{2u_{1,j}-2(1+\Delta x\lambda_{0,j})u_{0,j}}{\Delta x^{2}}-\frac{u_{0,j-1}-2u_{0,j}+u_{0,j+1}}{\Delta y^{2}}=f_{0,j}-\frac{2}{\Delta x}\varphi_{1}(y_{j}),1\leqslant j\leqslant n-1,\\ -\frac{2u_{m-1,j}-2(1+\Delta x\lambda_{m,j})u_{m,j}}{\Delta x^{2}}-\frac{u_{m,j-1}-2u_{m,j}+u_{m,j+1}}{\Delta y^{2}}=f_{m,j}+\frac{2}{\Delta x}\varphi_{2}(y_{j}),1\leqslant j\leqslant n-1,\\ -\frac{u_{i-1,0}-2u_{i,0}+u_{i+1,0}}{\Delta x^{2}}-\frac{2u_{i,1}-2(1+\Delta y\lambda_{i,0})u_{i,0}}{\Delta y^{2}}=f_{i,0}-\frac{2}{\Delta y}\Psi_{1}(x_{i}),1\leqslant i\leqslant m-1,\\ -\frac{u_{i-1,n}-2u_{i,n}+u_{i+1,n}}{\Delta x^{2}}-\frac{2u_{i,n-1}-2(1+\Delta y\lambda_{i,n})u_{i,n}}{\Delta y^{2}}=f_{i,n}+\frac{2}{\Delta y}\Psi_{2}(x_{i}),1\leqslant i\leqslant m-1 \end{matrix}\right.

        至此我们共有(m+1)x(n+1)个待求量u_{i,j},0\leqslant i\leqslant m,0\leqslant j\leqslant n,而现有(m-1)x(n-1)个关于内节点的方程,2(n-1)个关于左、右边界上的节点(不含端点)的方程及2(m-1)个关于上、下边界上的节点(也不含端点)的方程,还需要补充

(m+1)(n+1)-(m-1)(n-1)-2(n-1)-2(m-1)=4

个方程,也就是关于矩形区域的4个顶点的方程。为此,设公式(2)中第1式对i=0,j=0成立,即

-\frac{u_{-1,0}-2u_{0,0}+u_{1,0}}{\Delta x^{2}}-\frac{u_{0,-1}-2u_{0,0}+u_{0,1}}{\Delta y^{2}}=f_{0,0} \; (3)

        然后再从公式(2)的第2式和第4式中分别解出u_{-1,0}=u_{1,0}-2\Delta x(\varphi_{1}(y_{0})+\lambda_{0,0}u_{0,0})u_{0,-1}=u_{0,1}-2\Delta y(\Psi_{1}(x_{0})+\lambda_{0,0}u_{0,0}),代入公式(3)中,得到\Omega左下顶点处的方程:

-\frac{2u_{1,0}-2(1+\Delta x\lambda_{0,0})u_{0,0}}{\Delta x^{2}}-\frac{2u_{0,1}-2(1+\Delta y\lambda_{0,0})u_{0,0}}{\Delta y^{2}}=f_{0,0}-\frac{2}{\Delta x}\varphi_{1}(y_{0})-\frac{2}{\Delta y}\Psi_{1}(x_{0})

上式可以简化为

-\frac{2u_{1,0}}{\Delta x^{2}}+[\frac{2(1+\Delta x\lambda_{0,0})}{\Delta x^{2}}+\frac{2(1+\Delta y\lambda_{0,0})}{\Delta y^{2}}]u_{0,0}-\frac{2u_{0,1}}{\Delta y^{2}}=f_{0,0}-\frac{2}{\Delta x}\varphi_{1}(y_{0})-\frac{2}{\Delta y}\Psi_{1}(x_{0})

        同样,设公式(2)中第1式分别对i=m,j=0i=0,j=ni=m,j=n成立,然后再从公式(2)中第3式和第4式解出u_{m+1,0},u_{m,-1},u_{-1,n},u_{0,n+1},u_{m+1,n},u_{m,n+1}分别代入刚才得到的3个方程,就得到\Omega的右下顶点、左上顶点、和右上顶点处的方程,这样,我们就有了完整的处理带导数边界条件的椭圆型方程的数值格式:

\left\{\begin{matrix} -\frac{u_{i,j-1}}{\Delta y^{2}}-\frac{u_{i-1,j}}{\Delta x^{2}}+2[\frac{1}{\Delta x^{2}}+\frac{1}{\Delta y^{2}}]u_{i,j}-\frac{u_{i+1,j}}{\Delta x^{2}}-\frac{u_{i,j+1}}{\Delta y^{2}}=f_{i,j},1\leqslant i\leqslant m-1,1\leqslant j\leqslant n-1,\\ -\frac{u_{0,j-1}}{\Delta y^{2}}+[\frac{2(1+\Delta x\lambda_{0,j})}{\Delta x^{2}}+\frac{2}{\Delta y^{2}}]u_{0,j}-\frac{2u_{1,j}}{\Delta x^{2}}-\frac{u_{0,j+1}}{\Delta y^{2}}=f_{0,j}-\frac{2}{\Delta x}\varphi_{1}(y_{j}),1\leqslant j\leqslant n-1,\\ -\frac{u_{m,j-1}}{\Delta y^{2}}-\frac{2u_{m-1,j}}{\Delta x^{2}}+[\frac{2(1+\Delta x\lambda_{m,j})}{\Delta x^{2}}+\frac{2}{\Delta y^{2}}]u_{m,j}-\frac{u_{m,j+1}}{\Delta y^{2}}=f_{m,j}+\frac{2}{\Delta x}\varphi_{2}(y_{j}),1\leqslant j\leqslant n-1,\\ -\frac{u_{i-1,0}}{\Delta x^{2}}+[\frac{2}{\Delta x^{2}}+\frac{2(1+\Delta y\lambda_{i,0})}{\Delta y^{2}}]u_{i,0}-\frac{u_{i+1,0}}{\Delta x^{2}}-\frac{2u_{i,1}}{\Delta y^{2}}=f_{i,0}-\frac{2}{\Delta y}\Psi_{1}(x_{i}),1\leqslant i\leqslant m-1,\\ -\frac{u_{i-1,n}}{\Delta x^{2}}-\frac{2u_{i,n-1}}{\Delta y^{2}}+[\frac{2}{\Delta x^{2}}+\frac{2(1+\Delta y\lambda_{i,n})}{\Delta y^{2}}]u_{i,n-\frac{u_{i+1,n}}{\Delta x^{2}}}=f_{i,n}+\frac{2}{\Delta y}\Psi_{2}(x_{i}),1\leqslant i\leqslant m-1,\\ [\frac{2(1+\Delta x\lambda_{0,0})}{\Delta x^{2}}+\frac{2(1+\Delta y \lambda_{0,0})}{\Delta y^{2}}]u_{0,0}-\frac{2u_{1,0}}{\Delta x^{2}}-\frac{2u_{0,1}}{\Delta y^{2}}=f_{0,0}-\frac{2}{\Delta x}\varphi_{1}(y_{0})-\frac{2}{\Delta y}\Psi_{1}(x_{0}),\\ -\frac{2u_{m-1,0}}{\Delta x^{2}}+[\frac{2(1+\Delta x\lambda_{m,0})}{\Delta x^{2}}+\frac{2(1+\Delta y \lambda_{m,0})}{\Delta y^{2}}]u_{m,0}-\frac{2u_{m,1}}{\Delta y^{2}}=f_{m,0}+\frac{2}{\Delta x}\varphi_{2}(y_{0})-\frac{2}{\Delta y}\Psi_{1}(x_{m}),\\ -\frac{2u_{0,n-1}}{\Delta y^{2}}+[\frac{2(1+\Delta x\lambda_{0,n})}{\Delta x^{2}}+\frac{2(1+\Delta y\lambda_{0,n})}{\Delta y^{2}}]u_{0,n}-\frac{2u_{1,n}}{\Delta x^{2}}=f_{0,n}-\frac{2}{\Delta x}\varphi_{1}(y_{n})+\frac{2}{\Delta y}\Psi_{2}(x_{0}),\\ -\frac{2u_{m,n-1}}{\Delta y^{2}}-\frac{2u_{m-1,n}}{\Delta x^{2}}+[\frac{2(1+\Delta x\lambda_{m,n})}{\Delta x^{2}}+\frac{2(1+\Delta y\lambda_{m,n})}{\Delta y^{2}}]u_{m,n}=f_{m,n}+\frac{2}{\Delta x}\varphi_{2}(y_{n})+\frac{2}{\Delta y}\Psi_{2}(x_{m}). \end{matrix}\right.

        记\beta =\frac{1}{\Delta x^{2}},\gamma=\frac{1}{\Delta y^{2}},\alpha=2(\frac{1}{\Delta x^{2}}+\frac{1}{\Delta y^{2}}),\xi=\frac{2}{\Delta x},\eta=\frac{2}{\Delta y},有

\begin{Bmatrix} -\gamma u_{i,j-1}-\beta u_{i-1,j}+\alpha u_{i,j}-\beta u_{i+1,j}-\gamma u_{i,j+1}=f_{i,j},1\leqslant i\leqslant m-1,1\leqslant j\leqslant n-1,\\ -\gamma u_{0,j-1}+[\alpha+\xi \lambda_{0,j}]u_{0,j}-2\beta u_{1,j}-\gamma u_{0,j+1}=f_{0,j}-\xi\varphi_{1}(y_{j}),1\leqslant j\leqslant n-1,\\ -\gamma u_{m,j-1}-2\beta u_{m-1,j}+[\alpha+\xi\lambda_{m,j}]u_{m,j}-\gamma u_{m,j+1}=f_{m,j}+\xi \varphi_{2}(y_{j}),1\leqslant j\leqslant n-1,\\ -\beta u_{i-1,0}+[\alpha+\eta\lambda_{i,0}]u_{i,0}-\beta u_{i+1,0}-2\gamma u_{i,1}=f_{i,0}-\eta\Psi_{1}(x_{i}),1\leqslant i\leqslant m-1,\\ -2\gamma u_{i,n-1}-\beta u_{i-1,n}+[\alpha+\eta\lambda_{i,n}]u_{i,n}-\beta u_{i+1,n}=f_{i,n}+\eta\Psi_{2}(x_{i}),1\leqslant i\leqslant m-1,\\ [\alpha+(\xi+\eta)\lambda_{0,0}]u_{0,0}-2\beta u_{1,0}-2\gamma u_{0,1}=f_{0,0}-\xi\varphi_{1}(y_{0})-\eta\Psi_{1}(x_{0}),\\ -2\beta u_{m-1,0}+[\alpha+(\xi+\eta)\lambda_{m,0}]u_{m,0}-2\gamma u_{m,1}=f_{m,0}+\xi\varphi_{2}(y_{0})-\eta\Psi_{1}(x_{m}),\\ -2\gamma u_{0,n-1}+[\alpha+(\xi+\eta)\lambda_{0,n}]u_{0,n}-2\beta u_{1,n}=f_{0,n}-\xi \varphi_{1}(y_{n})+\eta\Psi_{2}(x_{0}),\\ -2\gamma u_{m,n-1}-2\beta u_{m-1,n}+[\alpha+(\xi+\eta)\lambda_{m,n}]u_{m,n}=f_{m,n}+\xi\varphi_{2}(y_{n})+\eta\Psi_{2}(x_{m}). \end{Bmatrix}\;(4)

        为计算分别,可将上述方程组写成矩阵形式。

        首先,将公式(4)中第4、6、7式写成:

\begin{pmatrix} \alpha+(\xi+\eta)\lambda_{0,0} & -2\beta & & & & & \\ -\beta & \alpha+\eta\lambda_{1,0} & -\beta & & & & \\ & -\beta & \alpha+\eta\lambda_{2,0} & -\beta & & & \\ & & \ddots & \ddots & \ddots & & \\ & & & -\beta & \alpha+\eta\lambda_{m-2,0} & -\beta & \\ & & & & -\beta & \alpha+\eta\lambda_{m-1,0} & -\beta\\ & & & & & -2\beta & \alpha+(\xi+\eta)\lambda_{m,0} \end{pmatrix}+\begin{pmatrix} u_{0,0}\\ u_{1,0}\\ u_{2,0}\\ \vdots\\ u_{m-2,0}\\ u_{m-1,0}\\ u_{m,0} \end{pmatrix}+\begin{pmatrix} -2\gamma & & & & & & \\ & -2\gamma & & & & & \\ & & -2\gamma & & & & \\ & & & -2\gamma & & & \\ & & & & -2\gamma & & \\ & & & & & -2\gamma & \\ & & & & & & -2\gamma \end{pmatrix}\begin{pmatrix} u_{0,1}\\ u_{1,1}\\ u_{2,1}\\ \vdots\\ u_{m-2,1}\\ u_{m-1,1}\\ u_{m,1} \end{pmatrix}=\begin{pmatrix} f_{0,0}-\eta\Psi_{1}(x_{0})-\xi\varphi_{1}(y_{0})\\ f_{1,0}-\eta\Psi_{1}(x_{1})\\ f_{2,0}-\eta\Psi_{1}(x_{2})\\ \vdots\\ f_{m-2,0}-\eta\Psi_{1}(x_{m-2})\\ f_{m-1,0}-\eta\Psi_{1}(x_{m-1})\\ f_{m,0}-\eta\Psi_{1}(x_{m})-\xi\varphi_{2}(y_{0}) \end{pmatrix} \; (5)

         上面的式子可以简记为

C\mathbf{u_{0}}+2A\mathbf{u}_{1}=\mathbf{f}_{0}

其中,A=-\gamma II为m+1阶单位矩阵,且C为公式(5)最左端的三对角矩阵,\mathbf{f}_{0}为公式(5)右端的向量,\mathbf{u}_{j}=(u_{0,j},u_{1,j},\cdot\cdot\cdot ,u_{m-1,j},u_{m,j})^{T},0\leqslant j\leqslant n。接着,公式(4)中的第1,2,3式可以写成

\begin{pmatrix} -\gamma & & & & & & \\ & -\gamma & & & & & \\ & & -\gamma & & & & \\ & &\ddots &\ddots &\ddots & & \\ & & & & -\gamma & & \\ & & & & & -\gamma & \\ & & & & & & -\gamma \end{pmatrix}\begin{pmatrix} u_{0,j-1}\\ u_{1,j-1}\\ u_{2,j-1}\\ \vdots\\ u_{m-2,j-1}\\ u_{m-1,j-1}\\ u_{m,j-1} \end{pmatrix}+\begin{pmatrix} \alpha+\xi\lambda_{0,j} & -2\beta & & & & & \\ -\beta & \alpha & -\beta & & & & \\ & -\beta & \alpha & -\beta & & & \\ & & \ddots & \ddots & \ddots & & \\ & & & -\beta & \alpha & -\beta & \\ & & & & -\beta & \alpha & -\beta\\ & & & & & -2\beta & \alpha+\xi\lambda_{m,j} \end{pmatrix}\begin{pmatrix} u_{0,j}\\ u_{1,j}\\ u_{2,j}\\ \vdots\\ u_{m-2,j}\\ u_{m-1,j}\\ u_{m,j} \end{pmatrix}+\begin{pmatrix} -\gamma & & & & & & \\ & -\gamma & & & & & \\ & & -\gamma & & & & \\ & &\ddots &\ddots &\ddots & & \\ & & & & -\gamma & & \\ & & & & & -\gamma & \\ & & & & & & -\gamma \end{pmatrix}\begin{pmatrix} u_{0,j+1}\\ u_{1,j+1}\\ u_{2,j+1}\\ \vdots\\ u_{m-2,j+1}\\ u_{m-1,j+1}\\ u_{m,j+1} \end{pmatrix}=\begin{pmatrix} f_{0,j}-\xi \varphi_{1}(y_{j})\\ f_{1,j}\\ f_{2,j}\\ \vdots\\ f_{m-2,j}\\ f_{m-1,j}\\ f_{m,j}+\xi \varphi_{2}(y_{j}) \end{pmatrix}\;(6),1\leqslant j\leqslant n-1

         该式可以简记为

A\mathbf{u}_{j-1}+B_{j}\mathbf{u}_{j}+A\mathbf{u}_{j+1}=\mathbf{f}_{j},1\leqslant j\leqslant n-1

其中,B_{j}为公式(6)中的三对角矩阵,\mathbf{f}_{j}为公式(6)右端的向量。最后,公式(4)的第5、8、9式可以写成

\begin{pmatrix} -2\gamma & & & & & & \\ & -2\gamma & & & & & \\ & & -2\gamma & & & & \\ & & \ddots& \ddots& \ddots& & \\ & & & & -2\gamma & & \\ & & & & & -2\gamma & \\ & & & & & & -2\gamma \end{pmatrix}\begin{pmatrix} u_{0,n-1}\\ u_{1,n-1}\\ u_{2,n-1}\\ \vdots\\ u_{m-2,n-1}\\ u_{m-1,n-1}\\ u_{m,n-1} \end{pmatrix}+\begin{pmatrix} \alpha+(\xi+\eta)\lambda_{0,n} & -2\beta & & & & & \\ -\beta & \alpha+\eta\lambda_{1,n} & -\beta & & & & \\ & -\beta & \alpha+\eta\lambda_{2,n} & -\beta & & & \\ & & \ddots & \ddots & \ddots & & \\ & & & -\beta & \alpha+\eta\lambda_{m-2,n} & -\beta & \\ & & & & -\beta & \alpha+\eta\lambda_{m-1,n} & -\beta\\ & & & & & -2\beta & \alpha+(\xi+\eta)\lambda_{m,n} \end{pmatrix}\begin{pmatrix} u_{0,n}\\ u_{1,n}\\ u_{2,n}\\ \vdots\\ u_{m-2,n}\\ u_{m-1,n}\\ u_{m,n} \end{pmatrix}==\begin{pmatrix} f_{0,n}+\eta\Psi_{1}(x_{0})-\xi\varphi_{1}(y_{n})\\ f_{1,n}+\eta\Psi_{2}(x_{1})\\ f_{2,n}-\eta\Psi_{2}(x_{2})\\ \vdots\\ f_{m-2,n}+\eta\Psi_{2}(x_{m-2})\\ f_{m-1,n}+\eta\Psi_{2}(x_{m-1})\\ f_{m,n}+\eta\Psi_{2}(x_{m})+\xi\varphi_{2}(y_{n}) \end{pmatrix} \; (7)

        该式可以简记为

2A\mathbf{u}_{n-1}+D\mathbf{u}_{n}=\mathbf{f}_{n}

其中,D为公式(7)中的三对角矩阵,\mathbf{f}_{n}为公式(7)右端的向量。于是,由公式(5)、(6)、(7)可得到公式(4)写成块三对角矩阵为

\begin{pmatrix} C & 2A & & & & & \\ A & B_{1} & A & & & & \\ & A & B_{2} & A & & & \\ & & \ddots & \ddots & \ddots & & \\ & & & A & B_{m-2} & A & \\ & & & & A & B_{m-1} & A\\ & & & & & 2A & D \end{pmatrix}\begin{pmatrix} \mathbf{u}_{0}\\ \mathbf{u}_{1}\\ \mathbf{u}_{2}\\ \vdots\\ \mathbf{u}_{m-2}\\ \mathbf{u}_{m-1}\\ \mathbf{u}_{m} \end{pmatrix}=\begin{pmatrix} \mathbf{f}_{0}\\ \mathbf{f}_{1}\\ \mathbf{f}_{2}\\ \vdots\\ \mathbf{f}_{m-2}\\ \mathbf{f}_{m-1}\\ \mathbf{f}_{m} \end{pmatrix}\;(8)

        采用Gauss-Seidel迭代法求解公式(8)。

三、算例实现

        用差分格式-公式(8)求解椭圆型方程混合边值问题:

\left\{\begin{matrix} -(\frac{\partial^{2}u}{\partial x^{2}}+\frac{\partial^{2}u}{\partial y^{2}})=(\pi^{2}-1)e^{x}sin(\pi y),0<x<2,0<y<1,\\ (\frac{\partial u(x,y)}{\partial x}-(x^{2}+y^{2})u)|_{(0,y)}=(1-y^{2})sin(\pi y),0\leqslant y\leqslant 1,\\ (\frac{\partial u(x,y)}{\partial x}+(x^{2}+y^{2})u)|_{(2,y)}=(5+y^{2})e^{2}sin(\pi y),0\leqslant y\leqslant 1,\\ (\frac{\partial u(x,y)}{\partial y}-(x^{2}+y^{2})u)|_{(x,c)}=\pi e^{x},0\leqslant x\leqslant 1,\\ (\frac{\partial u(x,y)}{\partial y}+(x^{2}+y^{2})u)|_{(x,d)}=-\pi e^{x},0\leqslant x\leqslant 1 \end{matrix}\right.

已知精确解为u(x,y)=e^{x}sin(\pi y)。分别取步长为\Delta x=\Delta y=\frac{1}{16}\Delta x=\Delta y=\frac{1}{32},输出6个节点(0.5i,0.25)(0.5i,0.50),i=1,2,3处的数值解,并给出误差,要求在各节点处最大误差的迭代误差限为0.5\times10^{-10}

代码如下:


#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#define pi 3.14159265359int main(int argc, char*argv[])
{int m,n,i,j,k;double xa,xb,ya,yb,dx,dy,alpha,beta,gamma,maxerr;double *x,*y,**u,**v,**lambda,*d,kexi,eta,temp;double f(double x, double y);double lambda_function(double x, double y);double phi1(double y);double phi2(double y);double psi1(double x);double psi2(double x);double exact(double x, double y);xa=0.0;xb=2.0;ya=0.0;yb=1.0;m=64;n=32;printf("m=%d,n=%d.\n",m,n);dx=(xb-xa)/m;dy=(yb-ya)/n;beta=1.0/(dx*dx);gamma=1.0/(dy*dy);alpha=2*(beta+gamma);kexi=2.0/dx;eta=2.0/dy;x=(double*)malloc(sizeof(double)*(m+1));for(i=0;i<=m;i++)x[i]=xa+i*dx;y=(double*)malloc(sizeof(double)*(n+1));for(j=0;j<=n;j++)y[j]=ya+j*dy;u=(double**)malloc(sizeof(double*)*(m+1));v=(double**)malloc(sizeof(double*)*(m+1));lambda=(double**)malloc(sizeof(double*)*(m+1));for(i=0;i<=m;i++){u[i]=(double*)malloc(sizeof(double)*(n+1));v[i]=(double*)malloc(sizeof(double)*(n+1));lambda[i]=(double*)malloc(sizeof(double)*(n+1));}for(i=0;i<=m;i++){for(j=0;j<=n;j++){u[i][j]=0.0;v[i][j]=0.0;lambda[i][j]=lambda_function(x[i],y[j]);}}d=(double*)malloc(sizeof(double)*(m+1));k=0;do{maxerr=0.0;for(i=0;i<=m;i++)d[i]=f(x[i],y[0])-eta*psi1(x[i]);d[0]=d[0]-kexi*phi1(y[0]);d[m]=d[m]+kexi*phi2(y[0]);v[0][0]=(d[0]+2*gamma*u[0][1]+2*beta*u[1][0])/(alpha+(kexi+eta)*lambda[0][0]);for(i=1;i<m;i++)v[i][0]=(d[i]+2*gamma*u[i][1]+beta*(v[i-1][0]+u[i+1][0]))/(alpha+eta*lambda[i][0]);v[m][0]=(d[m]+2*gamma*u[m][1]+2*beta*v[m-1][0])/(alpha+(kexi+eta)*lambda[m][0]);for(j=1;j<n;j++){for(i=0;i<=m;i++){d[i]=f(x[i],y[j]);}d[0]=d[0]-kexi*phi1(y[j]);d[m]=d[m]+kexi*phi2(y[j]);v[0][j]=(d[0]+gamma*(u[0][j+1]+v[0][j-1])+2*beta*u[1][j])/(alpha+kexi*lambda[0][j]);for(i=1;i<m;i++){v[i][j]=(d[i]+gamma*(v[i][j-1]+u[i][j+1])+beta*(v[i-1][j]+u[i+1][j]))/alpha;}v[m][j]=(d[m]+gamma*(v[m][j-1]+u[m][j+1])+2*beta*v[m-1][j])/(alpha+kexi*lambda[m][j]);}for(i=0;i<=m;i++)d[i]=f(x[i],y[n])+eta*psi2(x[i]);d[0]=d[0]-kexi*phi1(y[n]);d[m]=d[m]+kexi*phi2(y[n]);v[0][n]=(d[0]+2*gamma*v[0][n-1]+2*beta*u[1][n])/(alpha+(kexi+eta)*lambda[0][n]);for(i=1;i<m;i++)v[i][n]=(d[i]+2*gamma*v[i][n-1]+beta*(v[i-1][n]+u[i+1][n]))/(alpha+eta*lambda[i][n]);v[m][n]=(d[m]+2*gamma*v[m][n-1]+2*beta*v[m-1][n])/(alpha+(kexi+eta)*lambda[m][n]);for(i=0;i<=m;i++){for(j=0;j<=n;j++){temp=fabs(u[i][j]-v[i][j]);if(temp>maxerr)maxerr=temp;u[i][j]=v[i][j];}}k=k+1;}while((maxerr>0.5*1e-10)&&(k<=1e+8));printf("k=%d\n",k);k=m/4;for(i=k;i<m;i=i+k){printf("(%.2f,0.25), y=%f, err=%.4e.\n",x[i],u[i][n/4],fabs(exact(x[i],y[n/4])-u[i][n/4]));}k=m/4;for(i=k;i<m;i=i+k){printf("(%.2f,0.50), y=%f, err=%.4e.\n",x[i],u[i][n/2],fabs(exact(x[i],y[n/2])-u[i][n/2]));}for(i=0;i<=m;i++){free(u[i]);free(v[i]);free(lambda[i]);}free(u);free(v);free(lambda);free(x);free(y);free(d);return 0;
}double f(double x, double y)
{return (pi*pi-1)*exp(x)*sin(pi*y);
}
double lambda_function(double x, double y)
{return x*x+y*y;
}
double phi1(double y)
{return (1-y*y)*sin(pi*y);
}
double phi2(double y)
{return (5.0+y*y)*exp(2.0)*sin(pi*y);
}
double psi1(double x)
{return pi*exp(x);
}
double psi2(double x)
{return -pi*exp(x);
}
double exact(double x, double y)
{return exp(x)*sin(pi*y);
}

\Delta x=\Delta y=\frac{1}{16}时,计算结果如下:

m=32,n=16.
k=4323
(0.50,0.25), y=1.152179, err=1.3643e-02.
(1.00,0.25), y=1.911016, err=1.1100e-02.
(1.50,0.25), y=3.162159, err=6.8738e-03.
(0.50,0.50), y=1.638607, err=1.0115e-02.
(1.00,0.50), y=2.711255, err=7.0265e-03.
(1.50,0.50), y=4.479936, err=1.7526e-03.

\Delta x=\Delta y=\frac{1}{32}时,计算结果如下:

m=64,n=32.
k=16007
(0.50,0.25), y=1.162412, err=3.4097e-03.
(1.00,0.25), y=1.919341, err=2.7745e-03.
(1.50,0.25), y=3.167313, err=1.7193e-03.
(0.50,0.50), y=1.646193, err=2.5286e-03.
(1.00,0.50), y=2.716524, err=1.7575e-03.
(1.50,0.50), y=4.481249, err=4.3972e-04.

四、结论

        从计算结果可知,当步长减小为1/2时,误差减小为原来的1/4,可见该数值格式是二阶收敛的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巴东电子商务奖励标准!巴东县网红直播基地、电子商务示范企业奖励补贴

巴东电子商务奖励标准&#xff01;巴东县网红直播基地、电子商务示范企业奖励补贴的内容整理如下&#xff1a;奖励内容较多 查找想了解的奖励可按 CtrlF 然后输入关键词即可 巴东县电子商务发展专项资金支持对象 本项目奖补对象适用于在我县注册、纳税、从事电子商务的商贸类企…

ISIS的基本概念

1.ISIS概述 IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似&#xff0c; 例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此&#xff0c;然后建立邻接关系&#xff0c;并交互链路状态信息。 CLNS由以下三个部分组成&#xff1a; CLNP&#xf…

VALSE 2024特邀报告内容解析|多模态视觉融合方法:是否存在性能极限?

2024年视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道&#xff0c;方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

No space left on device

报错提示 [ERROR] Upload Local File hwzt-third-party-out.jar Failed [ERROR] java.lang.RuntimeException: cp: error writing : No space left on device [ERROR] com.alibabacloud.commons.ssh.sshj.SshjConnection.executeCustomCharset(SshjConnection.java:172) …

flask网站开发计划

我想写一个flask开发网站的合集文章&#xff0c;该网站主要是采集网络上的文章&#xff08;不同站点&#xff0c;用Python识别出正文内容&#xff09;&#xff0c;然后做成长图形式&#xff0c;发布到flask站点&#xff0c;并提供“下载”按钮&#xff0c;点击下载按钮&#xf…

送给正在入行的小白:最全最有用的网络安全学习路线已经安排上了

在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发安全研究&#xff1a;二进制方向安全研究&#xff1a;网络渗透方向 下面逐一说明一下。 第一个方向&#xff1a;安全研发 你可以把网络安全理解成电商行业、教育行业等其他行业一样&#xf…

基于 Spring Boot 博客系统开发(七)

基于 Spring Boot 博客系统开发&#xff08;七&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;六&#xff09;&#x1f…

【RAG 博客】Haystack 中的 DiversityRanker 与 LostInMiddleRanker 用来增强 RAG pipelines

Blog&#xff1a;Enhancing RAG Pipelines in Haystack: Introducing DiversityRanker and LostInTheMiddleRanker ⭐⭐⭐⭐ 文章目录 Haystack 是什么1. DiversityRanker2. LostInTheMiddleRanker使用示例 这篇 blog 介绍了什么是 Haystack&#xff0c;以及如何在 Haystack 框…

AI把OpenAI内斗魔改成晋江文学,插图也能画,最新工具爆火,网友冲崩服务器

AI魔改OpenAI内斗大戏…… 这晋江味儿要冲出屏幕了&#xff01; Ilya就是这样的人&#xff0c;对待身边的人冷漠如冰&#xff0c;对待工作却不择手段…… △来自知乎Midreal小助手 而且剧情还不那么离谱&#xff0c;AI自由发挥下很多点都符合逻辑。 “所以我们在评估投资回报…

Surya:强大的开源 OCR 文字识别工具

在当今数字化时代&#xff0c;文字识别技术扮演着至关重要的角色。VikParuchuri/surya 便是一款令人瞩目的开源 OCR 文字识别工具。 主要功能&#xff1a; 支持 90 多种语言的文字识别&#xff1a;Surya 具备强大的语言兼容性&#xff0c;能够轻松应对多种语言的文字识别任务&…

翻译《The Old New Thing》 - What are SYSTEM_FONT and DEFAULT_GUI_FONT?

What are SYSTEM_FONT and DEFAULT_GUI_FONT? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050707-00/?p35013 Raymond Chen 2005年07月07日 在 Windows 编程中&#xff0c;GetStockObject 函数提供了两种特殊的字体&#xff1a;SYST…

【数据库原理及应用】期末复习汇总高校期末真题试卷05

试卷 一、选择题 1.( )是存储在计算机内有结构的数据的集合。 A.数据库系统 B.数据库 C.数据库管理系统 D.数据结构 2.数据库的三级模式结构中&#xff0c;数据库对象—视图是( ) A.外模式 B.内模式 C.存储模式 D.模式 3.在下列关于关系表的陈述中&#xff0c;错误的是(…

【源码】WordPress主题Modown9.1+Erphpdown17.1虚拟素材资源付费下载

Modown是基于Erphpdownwordpress下载插件开发的一款付费下载资源、付费下载源码、收费附件下载、付费阅读查看隐藏内容的WordPress主题&#xff0c;一款针对收费付费下载资源/付费查看内容/付费阅读/VIP会员免费下载查看/虚拟资源售卖的WordPress主题&#xff0c;一款为erphpdo…

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW&#xff0c;GA&#xff0c;PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

20240503解决Ubuntu20.04和WIN10双系统下WIN10的时间异常的问题

20240503解决Ubuntu20.04和WIN10双系统下WIN10的时间异常的问题 2024/5/3 9:33 缘起&#xff1a;因为工作需要&#xff0c;编译服务器上都会安装Ubuntu20.04。 但是因为WINDOWS强悍的生态系统&#xff0c;偶尔还是有必须要用WINDOWS的时候&#xff0c;于是也安装了WIN10。 双系…

5月6(信息差)

&#x1f30d;一次预测多个token&#xff0c;Meta新模型推理加速3倍&#xff0c;编程任务提高17% https://hub.baai.ac.cn/view/36857 &#x1f384; LeetCode 周赛超越 80% 人类选手&#xff0c;推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…

高情商回复(不是)

背景介绍 在抖音上有这样的视频&#xff0c;视频就是一张图&#xff0c;图上问了一个问题&#xff1a;饭局上&#xff0c;你去帮领导盛饭&#xff0c;领导接过后说&#xff1a;‘盛这么多&#xff0c;喂猪呢&#xff1f;’咋回&#xff1f; 底下有一个搞笑评论&#xff1a;猪可…

一篇文章,系统性聊聊Java注解

你好&#xff01; 这类系统性聊聊***知识点的文章&#xff0c;是希望给大家带来对某个技术的全貌认识&#xff0c;如果大家喜欢&#xff0c;后续可以陆续更新此系列 下面&#xff0c;开始今天的分享 在之前&#xff0c;我们已经分享过注解相关的三个面试题&#xff0c; 今天的…

syncGradle项目时报错Unknown Kotlin JVM target: 22

解决方案1 定位到build.gradle.kts的出问题行&#xff0c;将其注释掉然后把sourceCompatibility行也注释掉重新sync. 这样会自动使用默认兼容的版本 你也可以根据文档手动解决兼容问题2 Configure a Gradle project | Kotlin Documentation (kotlinlang.org) ↩︎ Compatibil…

Autodesk AutoCAD 2025 for Mac:强大的二维三维绘图工具

Autodesk AutoCAD 2025 for Mac是一款专为Mac用户打造的计算机辅助设计软件&#xff0c;它在继承了AutoCAD系列软件的优秀传统的基础上&#xff0c;针对Mac系统进行了全面优化&#xff0c;为用户提供了更出色的绘图和设计体验。 这款软件不仅支持用户创建和编辑复杂的二维几何图…