偏微分方程数值解大作业 有限差分方法
- 格式: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。