基于Jacobi迭代,GS迭代,SOR迭代对泊松方程的求解
摘要
随着大数据时代的到来,人们需要处理的数据越来越多,所需要考虑的条件因素也在增加。在工程方面,人们所需要处理的问题往往会转化为找出大规模方程组的解的问题,而找出大规模方程组的解的计算复杂度非常的高,因此设计一些高效并且较为精准的算法来求解大规模方程组的近似解显的尤为重要。本文以着一维和二维泊松方程为例子,考虑了Jacobi迭代,GS迭代,SOR迭代这三种经典迭代对于求解一维和二维泊松方程的速度与准度,用matlab 写出了相关代码,并且进行了对比与分析,最后得出了如下结论:SOR迭代的求解一维和二维泊松方程的速度最快,GS迭代次之,Jacobi迭代最慢,但是SOR迭代的速度依赖于松弛变量ω,并且当ω=1时,SOR迭代的速度与GS迭代的速度相同(在理论上可以证明)。当然,本文也考虑了不同松弛变量ω对于SOR迭代的速度的影响,发现,松弛变量ω在区间[1.2,1.6]之间时,SOR迭代的速度达到最快。
关键词:Jacobi迭代,GS迭代,SOR迭代,泊松方程,matlab
Based on Jacobi iteration, GS iteration and SOR iteration to solve Poisson equation
Abstract
With the advent of the era of big data, people need to deal with more and more data, and the factors that need to be considered are also increasing. In engineering, the problem that people need to deal with is often transformed into the problem of finding the solution of large-scale equations, and the computational complexity of finding the solution of large-scale equations is very high, so it is particularly important to design some efficient and more accurate algorithms to solve the approximate solution of large-scale equations. In this paper, taking the one-dimensional and two-dimensional Poisson equation as an example, three classical iterations, Jacobi iteration, GS iteration and SOR iteration, are considered to compare and analyze the speed and accuracy of solving the one-dimensional and two-dimensional Poisson equation. At last, the following conclusions are drawn: the speed of solving one-dimensional and two-dimensional Poisson equation by sor iteration is the fastest, GS iteration is the second, Jacobi iteration is the slowest, but the speed of solving one-dimensional and two-dimensional Poisson equation by sor iteration is the fastest The speed depends on the relaxation variable ω, and when ω = 1, the speed of SOR iteration is the same as that of GS iteration (which can be proved theoretically). Of course, this paper also considers the influence of different relaxation variables ω on the speed of SOR iteration. It is found that when the relaxation variables ω are between intervals [1.2,1.6], the speed of SOR iteration is the fastest.
Keywords: Jacobi iteration, GS iteration, SOR iteration, Poisson equation,matlab
一、问题简介
考虑泊松方程(一维和二维)。比较Jacobi迭代,G-S迭代和SOR迭代求解离散Poisson方程的效率,在离散化中使用中心差分近似。
问题背景:泊松方程是数学中一个常见于静电学、机械工程和理论物理的偏微分方程,尤其是在静电学中,在这里很容易遇到泊松方程。
二、使用方法及其分析
2.1.理论方法
2.1.1总体思路
我们先将泊松方程的系数矩阵进行一个分裂:
我们可以先用M来近似代替A,则我们考虑方程:
三、测试例子和结果
3.1.一维泊松方程
3.1.1.三种迭代第一种方式((1)式)对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:80
cpu时间为:0.000960 迭代步数为:77
cpu时间为:0.000940 迭代步数为:77
cpu时间为:0.000940
n=10 迭代步数为:252
cpu时间为:0.002321 迭代步数为:244
cpu时间为:0.002694 迭代步数为:244
cpu时间为:0.002686
n=15 迭代步数为:519
cpu时间为:0.005216 迭代步数为:491
cpu时间为:0.006030 迭代步数为:491
cpu时间为:0.004651
2.GS迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:41
cpu时间为:0.000676 迭代步数为:38
cpu时间为:0.000588 迭代步数为:40
cpu时间为:0.000599
n=10 迭代步数为:127
cpu时间为:0.001700 迭代步数为:120
cpu时间为:0.001239 迭代步数为:123
cpu时间为:0.001189
n=15 迭代步数为:255
cpu时间为:0.003256 迭代步数为:241
cpu时间为:0.003108 迭代步数为:245
cpu时间为:0.002490
3.SOR迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:25
cpu时间为:0.000519 迭代步数为:24
cpu时间为:0.000425 迭代步数为:25
cpu时间为:0.000416
n=10 迭代步数为:84
cpu时间为:0.001036 迭代步数为:79
cpu时间为:0.001074 迭代步数为:81
cpu时间为:0.001145
n=15 迭代步数为:169
cpu时间为:0.002122 迭代步数为:159
cpu时间为:0.001940 迭代步数为:163
cpu时间为:0.002270
误差向量范数图片(n=5,x=0时的初值条件U(0)=1,x=1时的初值条件U(1)=1):
分析:
1.通过对比在不同维数,不同初值下Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,他们所需cpu时间,迭代步数,我们可以看出SOR迭代比较好,因为他的迭代步数少,cpu时间短,而Jacobi迭代比较差,因为他的迭代步数多,cpu时间长。
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.1.2.三种迭代第二种方式((2)式)对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:81
cpu时间为:0.000876 迭代步数为:78
cpu时间为:0.001069 迭代步数为:78
cpu时间为:0.000997
n=10 迭代步数为:253
cpu时间为:0.003969 迭代步数为:245
cpu时间为:0.003152 迭代步数为:245
cpu时间为:0.003506
n=15 迭代步数为:520
cpu时间为:0.007711 迭代步数为:492
cpu时间为:0.008893 迭代步数为:492
cpu时间为:0.007350
2.GS1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:42
cpu时间为:0.000636 迭代步数为:39
cpu时间为:0.000635 迭代步数为:41
cpu时间为:0.000667
n=10 迭代步数为:128
cpu时间为:0.002025 迭代步数为:121
cpu时间为:0.002108 迭代步数为:124
cpu时间为:0.001451
n=15 迭代步数为:256
cpu时间为:0.003981 迭代步数为:242
cpu时间为:0.004628 迭代步数为:246
cpu时间为:0.004564
3.SOR1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:26
cpu时间为:0.000418 迭代步数为:25
cpu时间为:0.000430 迭代步数为:26
cpu时间为:0.000436
n=10 迭代步数为:85
cpu时间为:0.001150 迭代步数为:80
cpu时间为:0.001195 迭代步数为:82
cpu时间为:0.001119
n=15 迭代步数为:170
cpu时间为:0.003529 迭代步数为:160
cpu时间为:0.003593 迭代步数为:164
cpu时间为:0.003454
误差向量范数图片(n=5,x=0时的初值条件U(0)=1,x=1时的初值条件U(1)=1):
分析:
1.通过对比在不同维数,不同初值下Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,他们所需cpu时间,迭代步数,我们可以看出SOR迭代比较好,因为他的迭代步数少,cpu时间短,而Jacobi迭代比较差,因为他的迭代步数多,cpu时间长。
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.1.3.Jacobi迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:80
cpu时间为:0.000960 迭代步数为:77
cpu时间为:0.000940 迭代步数为:77
cpu时间为:0.000940
n=10 迭代步数为:252
cpu时间为:0.002321 迭代步数为:244
cpu时间为:0.002694 迭代步数为:244
cpu时间为:0.002686
n=15 迭代步数为:519
cpu时间为:0.005216 迭代步数为:491
cpu时间为:0.006030 迭代步数为:491
cpu时间为:0.004651
2.Jacobi1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:81
cpu时间为:0.000876 迭代步数为:78
cpu时间为:0.001069 迭代步数为:78
cpu时间为:0.000997
n=10 迭代步数为:253
cpu时间为:0.003969 迭代步数为:245
cpu时间为:0.003152 迭代步数为:245
cpu时间为:0.003506
n=15 迭代步数为:520
cpu时间为:0.007711 迭代步数为:492
cpu时间为:0.008893 迭代步数为:492
cpu时间为:0.007350
误差向量范数图片(n=5,x=0时的初值条件U(0)=1,x=1时的初值条件U(1)=1):
分析
1.通过比较两种jacobi迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种jacobi迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.1.4.GS迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了GS迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.GS迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:41
cpu时间为:0.000676 迭代步数为:38
cpu时间为:0.000588 迭代步数为:40
cpu时间为:0.000599
n=10 迭代步数为:127
cpu时间为:0.001700 迭代步数为:120
cpu时间为:0.001239 迭代步数为:123
cpu时间为:0.001189
n=15 迭代步数为:255
cpu时间为:0.003256 迭代步数为:241
cpu时间为:0.003108 迭代步数为:245
cpu时间为:0.002490
2.GS1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:42
cpu时间为:0.000636 迭代步数为:39
cpu时间为:0.000635 迭代步数为:41
cpu时间为:0.000667
n=10 迭代步数为:128
cpu时间为:0.002025 迭代步数为:121
cpu时间为:0.002108 迭代步数为:124
cpu时间为:0.001451
n=15 迭代步数为:256
cpu时间为:0.003981 迭代步数为:242
cpu时间为:0.004628 迭代步数为:246
cpu时间为:0.004564
误差向量范数图片(n=5,x=0时的初值条件U(0)=1,x=1时的初值条件U(1)=1):
分析:
1.通过比较两种GS迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种GS迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.1.5.SOR迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了GS迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.SOR迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:25
cpu时间为:0.000519 迭代步数为:24
cpu时间为:0.000425 迭代步数为:25
cpu时间为:0.000416
n=10 迭代步数为:84
cpu时间为:0.001036 迭代步数为:79
cpu时间为:0.001074 迭代步数为:81
cpu时间为:0.001145
n=15 迭代步数为:169
cpu时间为:0.002122 迭代步数为:159
cpu时间为:0.001940 迭代步数为:163
cpu时间为:0.002270
2.SOR1迭代
维数n
初值 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=1 x=0时的初值条件U(0)=1
x=1时的初值条件U(1)=0 x=0时的初值条件U(0)=0
x=1时的初值条件U(1)=1
n=5 迭代步数为:26
cpu时间为:0.000418 迭代步数为:25
cpu时间为:0.000430 迭代步数为:26
cpu时间为:0.000436
n=10 迭代步数为:85
cpu时间为:0.001150 迭代步数为:80
cpu时间为:0.001195 迭代步数为:82
cpu时间为:0.001119
n=15 迭代步数为:170
cpu时间为:0.003529 迭代步数为:160
cpu时间为:0.003593 迭代步数为:164
cpu时间为:0.003454
误差向量范数图片(n=5,x=0时的初值条件U(0)=1,x=1时的初值条件U(1)=1):
分析:
1.通过比较两种SOR迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种SOR迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.1.6.SOR迭代中ω的值对迭代的影响
在本次测试中,我们选取n=5,初值条件U(0)=1,U(1)=1,b=zeros(n,1),f(x)=x^2+x+1+exp(x),测试了SOR迭代,在ω取不同值的时候,对于求解一维泊松方程在达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
松弛变量ω的取值 迭代步数,cpu时间
w=0.100000 迭代步数为:800,cpu时间为:0.005910
w=0.200000 迭代步数为:379,cpu时间为:0.004643
w=0300000 迭代步数为:239,cpu时间为:0.003080
w=0.400000 迭代步数为:168,cpu时间为:0.001416
w=0.500000 迭代步数为:126,cpu时间为:0.001711
w=0.600000 迭代步数为:98,cpu时间为:0.001366
w=0.700000 迭代步数为:78,cpu时间为:0.001172
w=0800000 迭代步数为:62,cpu时间为:0.000790
w=0.900000 迭代步数为:50,cpu时间为:0.000786
w=1.000000 迭代步数为:41,cpu时间为:0.000688
w=1.100000 迭代步数为:32,cpu时间为:0.000542
w=1.200000 迭代步数为:25,cpu时间为:0.000287
w=1.300000 迭代步数为:18,cpu时间为:0.000249
w=1.400000 迭代步数为:15,cpu时间为:0.000367
w=1.500000 迭代步数为:19,cpu时间为:0.000231
w=1.600000 迭代步数为:25,cpu时间为:0.000297
w=1.700000 迭代步数为:35,cpu时间为:0.000540
w=1.800000 迭代步数为:57,cpu时间为:0.000533
w=1.900000 迭代步数为:119,cpu时间为:0.001056
图片较多,就放了四张:
ω=0.2 ω=0.7
:
我们拟合了一下w和迭代次数的关系
w和迭代次数的关系: -907.2834 w^5 + 5397.1052 w^4 - 12047.5579 w^3 + 12601.6016 w^2- 6265.6695 w + 1277.8504
分析:图中可以看出当松弛变量ω在[1.2,1.6]之间时,此时SOR迭代次数少,而且所需时间短。
3.2.二维泊松方程
3.2.1.三种迭代第一种方式((1)式)对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi迭代
维数n
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:82
cpu时间为:0.001181 迭代步数为:82
cpu时间为:0.001178 迭代步数为:86
cpu时间为:0.001159
n=100 迭代步数为:268
cpu时间为:0.008718 迭代步数为:273
cpu时间为:0.010592 迭代步数为:286
cpu时间为:0.009390
n=225 迭代步数为:553
cpu时间为:0.060857 迭代步数为:564
cpu时间为:0.061327 迭代步数为:589
cpu时间为:0.067140
2.GS迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:42
cpu时间为:0.000602 迭代步数为:43
cpu时间为:0.000750 迭代步数为:45
cpu时间为:0.000784
n=100 迭代步数为:136
cpu时间为:0.005501 迭代步数为:139
cpu时间为:0.005547 迭代步数为:145
cpu时间为:0.005270
n=225 迭代步数为:278
cpu时间为:0.035151 迭代步数为:285
cpu时间为:0.028184 迭代步数为:297
cpu时间为:0.032679
3.SOR迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:26
cpu时间为:0.000482 迭代步数为:27
cpu时间为:0.000427 迭代步数为:28
cpu时间为:0.000523
n=100 迭代步数为:89
cpu时间为:0.003519 迭代步数为:91
cpu时间为:0.003950 迭代步数为:95
cpu时间为:0.003958
n=225 迭代步数为:184
cpu时间为:0.018887 迭代步数为:189
cpu时间为:0.019066 迭代步数为:197
cpu时间为:0.023953
误差向量范数图片(n=25,初值条件a1(x,y)=x2+y2+x):
分析:
1.通过对比在不同维数,不同初值下Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解二维泊松方程达到相同精度时,他们所需cpu时间,迭代步数,我们可以看出SOR迭代比较好,因为他的迭代步数少,cpu时间短,而Jacobi迭代比较差,因为他的迭代步数多,cpu时间长。
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.2.2.三种迭代第二种方式((2)式)对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi1迭代
维数n
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:83
cpu时间为:0.002537 迭代步数为:83
cpu时间为:0.002077 迭代步数为:87
cpu时间为:0.002442
n=100 迭代步数为:269
cpu时间为:0.067003 迭代步数为:274
cpu时间为:0.067514 迭代步数为:287
cpu时间为:0.073143
n=225 迭代步数为:554
cpu时间为:0.705603 迭代步数为:565
cpu时间为:0.720653 迭代步数为:590
cpu时间为:0.756126
2.GS1迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:43
cpu时间为:0.001448 迭代步数为:44
cpu时间为:0.001453 迭代步数为:46
cpu时间为:0.001378
n=100 迭代步数为:137
cpu时间为:0.037669 迭代步数为:140
cpu时间为:0.038784 迭代步数为:146
cpu时间为:0.039983
n=225 迭代步数为:279
cpu时间为:0.395037 迭代步数为:286
cpu时间为:0.409789 迭代步数为:298
cpu时间为:0.424843
3.SOR1迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:27
cpu时间为:0.000752 迭代步数为:28
cpu时间为:0.000800 迭代步数为:29
cpu时间为:0.001054
n=100 迭代步数为:90
cpu时间为:0.026739 迭代步数为:92
cpu时间为:0.025387 迭代步数为:96
cpu时间为:0.026531
n=225 迭代步数为:185
cpu时间为:0.265589 迭代步数为:190
cpu时间为:0.270464 迭代步数为:198
cpu时间为:0.284036
误差向量范数图片(n=25,初值条件a1(x,y)=x2+y2+x):
分析:
1.通过对比在不同维数,不同初值下Jacobi迭代,GS迭代,SOR迭代这三种迭代方式对于求解二维泊松方程达到相同精度时,他们所需cpu时间,迭代步数,我们可以看出SOR迭代比较好,因为他的迭代步数少,cpu时间短,而Jacobi迭代比较差,因为他的迭代步数多,cpu时间长。
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.2.3.Jacobi迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了Jacobi迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.Jacobi迭代
维数n
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:82
cpu时间为:0.001181 迭代步数为:82
cpu时间为:0.001178 迭代步数为:86
cpu时间为:0.001159
n=100 迭代步数为:268
cpu时间为:0.008718 迭代步数为:273
cpu时间为:0.010592 迭代步数为:286
cpu时间为:0.009390
n=225 迭代步数为:553
cpu时间为:0.060857 迭代步数为:564
cpu时间为:0.061327 迭代步数为:589
cpu时间为:0.067140
2.Jacobi1迭代
维数n
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:83
cpu时间为:0.002537 迭代步数为:83
cpu时间为:0.002077 迭代步数为:87
cpu时间为:0.002442
n=100 迭代步数为:269
cpu时间为:0.067003 迭代步数为:274
cpu时间为:0.067514 迭代步数为:287
cpu时间为:0.073143
n=225 迭代步数为:554
cpu时间为:0.705603 迭代步数为:565
cpu时间为:0.720653 迭代步数为:590
cpu时间为:0.756126
误差向量范数图片(n=25,初值条件a1(x,y)=x2+y2+x):
分析:
1.通过比较两种jacobi迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种jacobi迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.2.4.GS迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了GS迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.GS迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:42
cpu时间为:0.000602 迭代步数为:43
cpu时间为:0.000750 迭代步数为:45
cpu时间为:0.000784
n=100 迭代步数为:136
cpu时间为:0.005501 迭代步数为:139
cpu时间为:0.005547 迭代步数为:145
cpu时间为:0.005270
n=225 迭代步数为:278
cpu时间为:0.035151 迭代步数为:285
cpu时间为:0.028184 迭代步数为:297
cpu时间为:0.032679
2.GS1迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:43
cpu时间为:0.001448 迭代步数为:44
cpu时间为:0.001453 迭代步数为:46
cpu时间为:0.001378
n=100 迭代步数为:137
cpu时间为:0.037669 迭代步数为:140
cpu时间为:0.038784 迭代步数为:146
cpu时间为:0.039983
n=225 迭代步数为:279
cpu时间为:0.395037 迭代步数为:286
cpu时间为:0.409789 迭代步数为:298
cpu时间为:0.424843
误差向量范数图片(n=25,初值条件a1(x,y)=x2+y2+x):
分析:
1.通过比较两种GS迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种GS迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.2.5.SOR迭代两种实现方式对比
在本次测试中,我们选取不同的分割细度n,初值条件,测试了GS迭代,两种不同方式对于求解一维泊松方程达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
1.SOR迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:26
cpu时间为:0.000482 迭代步数为:27
cpu时间为:0.000427 迭代步数为:28
cpu时间为:0.000523
n=100 迭代步数为:89
cpu时间为:0.003519 迭代步数为:91
cpu时间为:0.003950 迭代步数为:95
cpu时间为:0.003958
n=225 迭代步数为:184
cpu时间为:0.018887 迭代步数为:189
cpu时间为:0.019066 迭代步数为:197
cpu时间为:0.023953
2.SOR1迭代
维数n
初值 初值条件
a1(x,y)=x 初值条件
a1(x,y)=y 初值条件a1(x,y)=x2+y2+x
n=25 迭代步数为:27
cpu时间为:0.000752 迭代步数为:28
cpu时间为:0.000800 迭代步数为:29
cpu时间为:0.001054
n=100 迭代步数为:90
cpu时间为:0.026739 迭代步数为:92
cpu时间为:0.025387 迭代步数为:96
cpu时间为:0.026531
n=225 迭代步数为:185
cpu时间为:0.265589 迭代步数为:190
cpu时间为:0.270464 迭代步数为:198
cpu时间为:0.284036
误差向量范数图片(n=25,初值条件a1(x,y)=x2+y2+x):
分析:
1.通过比较两种SOR迭代的cpu时间和迭代次数,我们发现,在维数较小的情况下,两种迭代方法的效率差不多,但是随着n的变大,我们发现,第一种SOR迭代cpu时间都明显小于第二种迭代的cpu时间.
2.通过横向和纵向比较,我们发现,初值对cpu时间,迭代步数影响不大,但是,维数对cpu时间,迭代步数影响较大
3.2.6.SOR迭代中ω的值对迭代的影响
在本次测试中,我们选取n取25,初值条件a1(x,y)=x2+y2+x(可换),f(x,y)=x^2+x+1+exp(x)+y(可换),测试了SOR迭代,在ω取不同值的时候,对于求解二维泊松方程在达到相同精度时,比较他们所需时间,迭代步数,误差大小等信息。
松弛变量ω的取值 迭代步数,cpu时间
w=0.100000 迭代步数为:876,cpu时间为:0.008003
w=0.200000 迭代步数为:415,cpu时间为:0.004819
w=0300000 迭代步数为:262,cpu时间为:0.004344
w=0.400000 迭代步数为:185,cpu时间为:0.001974
w=0.500000 迭代步数为:138,cpu时间为:0.002564
w=0.600000 迭代步数为:108,cpu时间为:0.001548
w=0.700000 迭代步数为:85,cpu时间为:0.001554
w=0800000 迭代步数为:69,cpu时间为:0.000749
w=0.900000 迭代步数为:55,cpu时间为:0.001033
w=1.000000 迭代步数为:45,cpu时间为:0.000499
w=1.100000 迭代步数为:36,cpu时间为:0.000421
w=1.200000 迭代步数为:28,cpu时间为:0.000365
w=1.300000 迭代步数为:20,cpu时间为:0.000272
w=1.400000 迭代步数为:17,cpu时间为:0.000299
w=1.500000 迭代步数为:23,cpu时间为:0.000323
w=1.600000 迭代步数为:29,cpu时间为:0.000374
w=1.700000 迭代步数为:40,cpu时间为:0.000474
w=1.800000 迭代步数为:62,cpu时间为:0.000799
w=1.900000 迭代步数为:132,cpu时间为:0.001397
图片较多,就放了四张:
ω=0.2 ω=0.7
:
我们拟合了一下w和迭代次数的关系
w和迭代次数的关系: -991.1608 w^5 + 5895.5817 w^4 - 13160.8454 w^3 + 13769.5701 w^2 - 6849.542 w + 1398.1992
分析:图中可以看出当松弛变量ω在[1.2,1.6]之间时,SOR迭代次数少,而且所需时间短。
四、结论和未来的工作
4.1结论
1.SOR迭代比较好,因为他的迭代步数少,cpu时间短,而Jacobi迭代比较差,因为他的迭代步数多,cpu时间长,但是如果我们从算法角度来看,Jacobi迭代是可以并行运算的,但是GS迭代,SOR迭代都不行。
2.对于一维和二维泊松方程来说,当松弛变量ω在[1.2,1.6]之间时,SOR迭代次数少,而且所需时间短。
3.对于Jacobi迭代来说,对等式(1)和对等式(2)所设计出来的两种算法,等式(2)对应的算法更好一些,这个算法相较于等式(1)来说,迭代次数和所需时间都较少;但是对于GS迭代来说,对等式(1)和对等式(2)所设计出来的两种算法在迭代次数,所需时间等方面却差不多;而对于SOR迭代来说,对等式(1)和对等式(2)所设计出来的两种算法,等式(1)对应的算法更好一些。
4.当然这里的数据会随着初值的改变而改变,这是显然的,如果取到的初值距离真实解很近,那么迭代次数与所需时间自然就会减少,相反,如果取到的初值距离真实解很远,那么迭代次数与所需时间自然就会增加。当然这里的远近是用范数来刻画的,采用哪种范数都可以,他们是等价的,在本文中,我们采用的是二范数。
4.2未来的工作
1.在本文中,由于计算机处理数据能力的限制,所考虑的n并不是很大,即方程组的系数矩阵的阶并不是很大,所以我们想尝试一下当对区间[0,1]分割的很细密的时候,相应的迭代次数,所需时间会有什么变化。
2.本文在做二维泊松方程问题的时候,只考虑了一种排序方式,即自然排序,我们想要再尝试一下其他排序方法,比如红黑排序,对相应的迭代次数,所需时间会有什么影响。
3.目前,我们只能确定SOR迭代中,当弛变量ω在[1.2,1.6]之间时,SOR迭代次数少,而且所需时间短。范围还是很大,我们想要在今后的工作中将范围缩小,最好能确定到10^(-2)左右,因为这个精度比较具有工程价值。
五、参考文献
[1]Round-off error analysis of iterations for large linear systems[J] . Numerische Mathematik . 1978
[2]实用数值分析[M]. 重庆大学出版社 , 杨大地,谈骏渝编著, 2000
[3]二维泊松方程和扩散方程的一类显式并行算法[D]. 许秋燕.山东大学 2010