偏微分方程数值解大作业 有限差分方法

  • 格式:docx
  • 大小:1.67 MB
  • 文档页数:17

偏微分方程数值解 第一次大作业

0 问题重述

求解边值问题:

2()2(sincoscossin),(,)(0,1)(0,1)0,(,)xyuexyxyxyGuxyG

其精确解为

()(x,y)sinsinxyuexy+——

分别取步长h=1/64,1/128,做五点差分格式,用雅可比方法,高斯赛德尔方法和共轭梯度法解差分方程,并比较精度与迭代步数

1 方程的导出

设在x,y方向均取N个网格,步长h=1/N。对拉普拉斯算子中的二阶导数项用二阶中心差商代替,离散化后得到逼近该问题的差分方程:

21,,11,,1,,,1(),,1,2,...,1440,,0 ,ijijijijijijijhuuuuufijNuijorijN

其中:

2(),2(sincoscossin)ihjhijfeihjhihjh

这样,便得到了相应的差分方程,理论上已经可以通过求解线性方程组进行解的数值逼近

2 代数方程组的构建

问题已经转化为构建并求解如上所示的(N-1)X(N-1)维的线性方程组。这里我们首先将空间网格点,iju拉成向量

11121121(1)11(,,...,,,....,,...,)TNNijNNuuuuuuu

其系数矩阵也会发生相应的变化。为了更方便得构建出系数矩阵,这里先引入边界点,即引入

0001010,1112121(1)(,,...,,,,...,,,....,,...,)TNNNijNNuuuuuuuuuuu

初始化矩阵A为(N+1)阶零方阵。对i,j=1,2,…,N-1进行赋值:

A((i0-1)(N+1)+j0,(i0-1)(N+1)+j0)=-1;A((i0-1)(N+1)+j0,(i0-1-1)(N+1)+j0)=1/4;A((i0-1)(N+1)+j0,(i0-1)(N+1)+j0-1)=1/4;A((i0-1)(N+1)+j0,(i0+1-1)(N+1)+j0)=1/4;A((i0-1)(N+1)+j0,(i0-1)(N+1)+j0+1)=1/4;

由于边界条件中函数在边界点的取值是0,上述操作相当于在网格内点运算的同时考虑到了边界条件。例如N=3时,其系数矩阵为:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0.25 0 0 0.25 -1 0.25 0 0 0.25 0 0 0 0 0 0

0 0 0.25 0 0 0.25 -1 0.25 0 0 0.25 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0.25 0 0 0.25 -1 0.25 0 0 0.25 0 0 0 0 0 0 0 0 0.25 0 0 0.25 1 0.25 0 0 0.25 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

接下来剔除边界点所在的行和列,即剔除满足条件

3|i,3|j ,0,1,...,Nij

的行和列,便得到了系数矩阵A的最终形式。仍以N=3为例,最终得到的系数矩阵A为

-1 0.25 0.25 0

0.25 -1 0 0.25

0.25 0 -1 0.25

0 0.25 0.25 -1

这样,代数方程组的系数矩阵便构建出来了。方程组的右端常数项由

1112(1)11(,,...,,...,)iNjNNbffff

给出。至此,需要求解的线性方程组已经构建出来了,可以开始用各种数值方法来进行近似求解。

3 雅可比方法的求解与误差分析

雅可比方法是求解线性方程组的基本方法之一。其大致思想为:首先将系数矩阵A分解为

ALDU

其中L是矩阵A的下三角部分,U是矩阵A的上三角部分,D是矩阵A的对角部分。这样,方程Ax=b变形为

11()xDLUxDb 构造迭代格式

111()kkxDLUxDb

这就是雅可比方法的迭代格式。现在我们应用该方法对N=32,N=64,N=128的差分格式进行求解,停机准则取残差向量的二范数小于1e-3或迭代次数大于4000,并计算数值解与真解在每点处的值以及在二范数意义下的误差,将数值解、真解与误差的图像做出,并对收敛阶进行分析,所得结果如下:

N=32

数值解:

真解:

误差:

二范数意义下的误差err=1.9148,迭代次数count=1617,用时t=1.5287s。 N=64

数值解:

真解:

误差: 二范数意义下的误差err=9.0111,迭代次数count=4000(达到先前设定的停机准则),用时t=51.9357 s。

N=128

数值解:

真解:

误差:

二范数意义下的误差err=614,9357,迭代次数count=4000(达到先前设定的停机准则),用时t=1304.3176s。

4 高斯-赛德尔方法的求解与误差分析

将雅可比方法每次迭代中优先计算出的第k个值用于此次迭代的后n-k个值的计算,这种思想所导出的方法便是雅可比方法对应的高斯-赛德尔方法。其矩阵格式为:

111()()kkxDLUxDLb

应用该方法对N=32,N=64,N=128的差分格式进行求解,停机准则取残差向量的二范数小于1e-3或迭代次数大于4000,并计算数值解与真解在每点处的值以及在二范数意义下的误差,将数值解、真解与误差的图像做出,并对收敛阶进行分析,所得结果如下: N=32

数值解

真解:

误差: 二范数意义下的误差err=1.8136,迭代次数count=890(达到先前设定的停机准则),用时t=0.9528s。

N=64

数值解

真解:

误差:

二范数意义下的误差err=1.2569,迭代次数count=3255,用时t=43.3433s。

N=128

数值解

真解:

误差:

二范数意义下的误差err=186.7581,迭代次数count=4000(达到先前设定的停机准则),用时t=1107.6972s。

5 共轭梯度法的求解与误差分析

共轭梯度法是应用变分原理得到的方法,是一种不必选择松弛因子而收敛速度不低于SOR法的迭代方法。其基本格式为: 000111111(,)(,)(,)(,)mmmmmmmmmmmmmmmmmmmmmprfAurrAppuuprrAprrrrprp

应用共轭梯度法对N=32,N=64,N=128的差分格式进行求解,停机准则取残差向量的二范数小于1e-3或迭代次数大于4000,并计算数值解与真解在每点处的值以及在二范数意义下的误差,将数值解、真解与误差的图像做出,并对收敛阶进行分析,所得结果如下:

N=32:

数值解:

真解:

误差:

二范数意义下的误差err=1.7131,迭代次数count=71,用时t=0.6695s。 N=64:

数值解:

真解:

二范数意义下的误差err=0.8582,迭代次数count=140,用时t=13.3856s。

误差:

N=128:

数值解:

真解:

误差:

二范数意义下的误差err=0.4290,迭代次数count=280,用时t=486.2057s。