数值代数课设(99分)--基于Jacobi迭代,GS迭代,SOR迭代对泊松方程的求解[matlab](上)
基于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
總結
以上是生活随笔為你收集整理的数值代数课设(99分)--基于Jacobi迭代,GS迭代,SOR迭代对泊松方程的求解[matlab](上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习:用生成对抗网络(GAN)来恢复
- 下一篇: matlab对图片边缘化处理