数值代数课设(99分)--基于Jacobi迭代,GS迭代,SOR迭代对泊松方程的求解[matlab](上)
基于Jacobi迭代,GS迭代,SOR迭代對泊松方程的求解
摘要
隨著大數(shù)據(jù)時(shí)代的到來,人們需要處理的數(shù)據(jù)越來越多,所需要考慮的條件因素也在增加。在工程方面,人們所需要處理的問題往往會(huì)轉(zhuǎn)化為找出大規(guī)模方程組的解的問題,而找出大規(guī)模方程組的解的計(jì)算復(fù)雜度非常的高,因此設(shè)計(jì)一些高效并且較為精準(zhǔn)的算法來求解大規(guī)模方程組的近似解顯的尤為重要。本文以著一維和二維泊松方程為例子,考慮了Jacobi迭代,GS迭代,SOR迭代這三種經(jīng)典迭代對于求解一維和二維泊松方程的速度與準(zhǔn)度,用matlab 寫出了相關(guān)代碼,并且進(jìn)行了對比與分析,最后得出了如下結(jié)論:SOR迭代的求解一維和二維泊松方程的速度最快,GS迭代次之,Jacobi迭代最慢,但是SOR迭代的速度依賴于松弛變量ω,并且當(dāng)ω=1時(shí),SOR迭代的速度與GS迭代的速度相同(在理論上可以證明)。當(dāng)然,本文也考慮了不同松弛變量ω對于SOR迭代的速度的影響,發(fā)現(xiàn),松弛變量ω在區(qū)間[1.2,1.6]之間時(shí),SOR迭代的速度達(dá)到最快。
關(guān)鍵詞: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方程的效率,在離散化中使用中心差分近似。
 問題背景:泊松方程是數(shù)學(xué)中一個(gè)常見于靜電學(xué)、機(jī)械工程和理論物理的偏微分方程,尤其是在靜電學(xué)中,在這里很容易遇到泊松方程。
 二、使用方法及其分析
 2.1.理論方法
 2.1.1總體思路
 我們先將泊松方程的系數(shù)矩陣進(jìn)行一個(gè)分裂:
 
 我們可以先用M來近似代替A,則我們考慮方程:
 
 
 
 
 
 
 
 三、測試?yán)雍徒Y(jié)果
 3.1.一維泊松方程
 3.1.1.三種迭代第一種方式((1)式)對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:80
 cpu時(shí)間為:0.000960 迭代步數(shù)為:77
 cpu時(shí)間為:0.000940 迭代步數(shù)為:77
 cpu時(shí)間為:0.000940
 n=10 迭代步數(shù)為:252
 cpu時(shí)間為:0.002321 迭代步數(shù)為:244
 cpu時(shí)間為:0.002694 迭代步數(shù)為:244
 cpu時(shí)間為:0.002686
 n=15 迭代步數(shù)為:519
 cpu時(shí)間為:0.005216 迭代步數(shù)為:491
 cpu時(shí)間為:0.006030 迭代步數(shù)為:491
 cpu時(shí)間為:0.004651
2.GS迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:41
 cpu時(shí)間為:0.000676 迭代步數(shù)為:38
 cpu時(shí)間為:0.000588 迭代步數(shù)為:40
 cpu時(shí)間為:0.000599
 n=10 迭代步數(shù)為:127
 cpu時(shí)間為:0.001700 迭代步數(shù)為:120
 cpu時(shí)間為:0.001239 迭代步數(shù)為:123
 cpu時(shí)間為:0.001189
 n=15 迭代步數(shù)為:255
 cpu時(shí)間為:0.003256 迭代步數(shù)為:241
 cpu時(shí)間為:0.003108 迭代步數(shù)為:245
 cpu時(shí)間為:0.002490
3.SOR迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:25
 cpu時(shí)間為:0.000519 迭代步數(shù)為:24
 cpu時(shí)間為:0.000425 迭代步數(shù)為:25
 cpu時(shí)間為:0.000416
 n=10 迭代步數(shù)為:84
 cpu時(shí)間為:0.001036 迭代步數(shù)為:79
 cpu時(shí)間為:0.001074 迭代步數(shù)為:81
 cpu時(shí)間為:0.001145
 n=15 迭代步數(shù)為:169
 cpu時(shí)間為:0.002122 迭代步數(shù)為:159
 cpu時(shí)間為:0.001940 迭代步數(shù)為:163
 cpu時(shí)間為:0.002270
誤差向量范數(shù)圖片(n=5,x=0時(shí)的初值條件U(0)=1,x=1時(shí)的初值條件U(1)=1):
 
 分析:
 1.通過對比在不同維數(shù),不同初值下Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),他們所需cpu時(shí)間,迭代步數(shù),我們可以看出SOR迭代比較好,因?yàn)樗牡綌?shù)少,cpu時(shí)間短,而Jacobi迭代比較差,因?yàn)樗牡綌?shù)多,cpu時(shí)間長。
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.1.2.三種迭代第二種方式((2)式)對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:81
 cpu時(shí)間為:0.000876 迭代步數(shù)為:78
 cpu時(shí)間為:0.001069 迭代步數(shù)為:78
 cpu時(shí)間為:0.000997
 n=10 迭代步數(shù)為:253
 cpu時(shí)間為:0.003969 迭代步數(shù)為:245
 cpu時(shí)間為:0.003152 迭代步數(shù)為:245
 cpu時(shí)間為:0.003506
 n=15 迭代步數(shù)為:520
 cpu時(shí)間為:0.007711 迭代步數(shù)為:492
 cpu時(shí)間為:0.008893 迭代步數(shù)為:492
 cpu時(shí)間為:0.007350
2.GS1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:42
 cpu時(shí)間為:0.000636 迭代步數(shù)為:39
 cpu時(shí)間為:0.000635 迭代步數(shù)為:41
 cpu時(shí)間為:0.000667
 n=10 迭代步數(shù)為:128
 cpu時(shí)間為:0.002025 迭代步數(shù)為:121
 cpu時(shí)間為:0.002108 迭代步數(shù)為:124
 cpu時(shí)間為:0.001451
 n=15 迭代步數(shù)為:256
 cpu時(shí)間為:0.003981 迭代步數(shù)為:242
 cpu時(shí)間為:0.004628 迭代步數(shù)為:246
 cpu時(shí)間為:0.004564
3.SOR1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:26
 cpu時(shí)間為:0.000418 迭代步數(shù)為:25
 cpu時(shí)間為:0.000430 迭代步數(shù)為:26
 cpu時(shí)間為:0.000436
 n=10 迭代步數(shù)為:85
 cpu時(shí)間為:0.001150 迭代步數(shù)為:80
 cpu時(shí)間為:0.001195 迭代步數(shù)為:82
 cpu時(shí)間為:0.001119
 n=15 迭代步數(shù)為:170
 cpu時(shí)間為:0.003529 迭代步數(shù)為:160
 cpu時(shí)間為:0.003593 迭代步數(shù)為:164
 cpu時(shí)間為:0.003454
誤差向量范數(shù)圖片(n=5,x=0時(shí)的初值條件U(0)=1,x=1時(shí)的初值條件U(1)=1):
 
 分析:
 1.通過對比在不同維數(shù),不同初值下Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),他們所需cpu時(shí)間,迭代步數(shù),我們可以看出SOR迭代比較好,因?yàn)樗牡綌?shù)少,cpu時(shí)間短,而Jacobi迭代比較差,因?yàn)樗牡綌?shù)多,cpu時(shí)間長。
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.1.3.Jacobi迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:80
 cpu時(shí)間為:0.000960 迭代步數(shù)為:77
 cpu時(shí)間為:0.000940 迭代步數(shù)為:77
 cpu時(shí)間為:0.000940
 n=10 迭代步數(shù)為:252
 cpu時(shí)間為:0.002321 迭代步數(shù)為:244
 cpu時(shí)間為:0.002694 迭代步數(shù)為:244
 cpu時(shí)間為:0.002686
 n=15 迭代步數(shù)為:519
 cpu時(shí)間為:0.005216 迭代步數(shù)為:491
 cpu時(shí)間為:0.006030 迭代步數(shù)為:491
 cpu時(shí)間為:0.004651
2.Jacobi1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:81
 cpu時(shí)間為:0.000876 迭代步數(shù)為:78
 cpu時(shí)間為:0.001069 迭代步數(shù)為:78
 cpu時(shí)間為:0.000997
 n=10 迭代步數(shù)為:253
 cpu時(shí)間為:0.003969 迭代步數(shù)為:245
 cpu時(shí)間為:0.003152 迭代步數(shù)為:245
 cpu時(shí)間為:0.003506
 n=15 迭代步數(shù)為:520
 cpu時(shí)間為:0.007711 迭代步數(shù)為:492
 cpu時(shí)間為:0.008893 迭代步數(shù)為:492
 cpu時(shí)間為:0.007350
誤差向量范數(shù)圖片(n=5,x=0時(shí)的初值條件U(0)=1,x=1時(shí)的初值條件U(1)=1):
 
 分析
 1.通過比較兩種jacobi迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種jacobi迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.1.4.GS迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了GS迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.GS迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:41
 cpu時(shí)間為:0.000676 迭代步數(shù)為:38
 cpu時(shí)間為:0.000588 迭代步數(shù)為:40
 cpu時(shí)間為:0.000599
 n=10 迭代步數(shù)為:127
 cpu時(shí)間為:0.001700 迭代步數(shù)為:120
 cpu時(shí)間為:0.001239 迭代步數(shù)為:123
 cpu時(shí)間為:0.001189
 n=15 迭代步數(shù)為:255
 cpu時(shí)間為:0.003256 迭代步數(shù)為:241
 cpu時(shí)間為:0.003108 迭代步數(shù)為:245
 cpu時(shí)間為:0.002490
2.GS1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:42
 cpu時(shí)間為:0.000636 迭代步數(shù)為:39
 cpu時(shí)間為:0.000635 迭代步數(shù)為:41
 cpu時(shí)間為:0.000667
 n=10 迭代步數(shù)為:128
 cpu時(shí)間為:0.002025 迭代步數(shù)為:121
 cpu時(shí)間為:0.002108 迭代步數(shù)為:124
 cpu時(shí)間為:0.001451
 n=15 迭代步數(shù)為:256
 cpu時(shí)間為:0.003981 迭代步數(shù)為:242
 cpu時(shí)間為:0.004628 迭代步數(shù)為:246
 cpu時(shí)間為:0.004564
誤差向量范數(shù)圖片(n=5,x=0時(shí)的初值條件U(0)=1,x=1時(shí)的初值條件U(1)=1):
 
 分析:
 1.通過比較兩種GS迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種GS迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.1.5.SOR迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了GS迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.SOR迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:25
 cpu時(shí)間為:0.000519 迭代步數(shù)為:24
 cpu時(shí)間為:0.000425 迭代步數(shù)為:25
 cpu時(shí)間為:0.000416
 n=10 迭代步數(shù)為:84
 cpu時(shí)間為:0.001036 迭代步數(shù)為:79
 cpu時(shí)間為:0.001074 迭代步數(shù)為:81
 cpu時(shí)間為:0.001145
 n=15 迭代步數(shù)為:169
 cpu時(shí)間為:0.002122 迭代步數(shù)為:159
 cpu時(shí)間為:0.001940 迭代步數(shù)為:163
 cpu時(shí)間為:0.002270
2.SOR1迭代
維數(shù)n
初值 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=1 x=0時(shí)的初值條件U(0)=1
 x=1時(shí)的初值條件U(1)=0 x=0時(shí)的初值條件U(0)=0
 x=1時(shí)的初值條件U(1)=1
 n=5 迭代步數(shù)為:26
 cpu時(shí)間為:0.000418 迭代步數(shù)為:25
 cpu時(shí)間為:0.000430 迭代步數(shù)為:26
 cpu時(shí)間為:0.000436
 n=10 迭代步數(shù)為:85
 cpu時(shí)間為:0.001150 迭代步數(shù)為:80
 cpu時(shí)間為:0.001195 迭代步數(shù)為:82
 cpu時(shí)間為:0.001119
 n=15 迭代步數(shù)為:170
 cpu時(shí)間為:0.003529 迭代步數(shù)為:160
 cpu時(shí)間為:0.003593 迭代步數(shù)為:164
 cpu時(shí)間為:0.003454
誤差向量范數(shù)圖片(n=5,x=0時(shí)的初值條件U(0)=1,x=1時(shí)的初值條件U(1)=1):
 
 分析:
 1.通過比較兩種SOR迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種SOR迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
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迭代,在ω取不同值的時(shí)候,對于求解一維泊松方程在達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
松弛變量ω的取值 迭代步數(shù),cpu時(shí)間
 w=0.100000 迭代步數(shù)為:800,cpu時(shí)間為:0.005910
 w=0.200000 迭代步數(shù)為:379,cpu時(shí)間為:0.004643
 w=0300000 迭代步數(shù)為:239,cpu時(shí)間為:0.003080
 w=0.400000 迭代步數(shù)為:168,cpu時(shí)間為:0.001416
 w=0.500000 迭代步數(shù)為:126,cpu時(shí)間為:0.001711
 w=0.600000 迭代步數(shù)為:98,cpu時(shí)間為:0.001366
 w=0.700000 迭代步數(shù)為:78,cpu時(shí)間為:0.001172
 w=0800000 迭代步數(shù)為:62,cpu時(shí)間為:0.000790
 w=0.900000 迭代步數(shù)為:50,cpu時(shí)間為:0.000786
 w=1.000000 迭代步數(shù)為:41,cpu時(shí)間為:0.000688
 w=1.100000 迭代步數(shù)為:32,cpu時(shí)間為:0.000542
 w=1.200000 迭代步數(shù)為:25,cpu時(shí)間為:0.000287
 w=1.300000 迭代步數(shù)為:18,cpu時(shí)間為:0.000249
 w=1.400000 迭代步數(shù)為:15,cpu時(shí)間為:0.000367
 w=1.500000 迭代步數(shù)為:19,cpu時(shí)間為:0.000231
 w=1.600000 迭代步數(shù)為:25,cpu時(shí)間為:0.000297
 w=1.700000 迭代步數(shù)為:35,cpu時(shí)間為:0.000540
 w=1.800000 迭代步數(shù)為:57,cpu時(shí)間為:0.000533
 w=1.900000 迭代步數(shù)為:119,cpu時(shí)間為:0.001056
圖片較多,就放了四張:
 ω=0.2 ω=0.7
 :
 
 我們擬合了一下w和迭代次數(shù)的關(guān)系
 w和迭代次數(shù)的關(guān)系: -907.2834 w^5 + 5397.1052 w^4 - 12047.5579 w^3 + 12601.6016 w^2- 6265.6695 w + 1277.8504
 
 分析:圖中可以看出當(dāng)松弛變量ω在[1.2,1.6]之間時(shí),此時(shí)SOR迭代次數(shù)少,而且所需時(shí)間短。
 3.2.二維泊松方程
 3.2.1.三種迭代第一種方式((1)式)對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi迭代
維數(shù)n
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:82
 cpu時(shí)間為:0.001181 迭代步數(shù)為:82
 cpu時(shí)間為:0.001178 迭代步數(shù)為:86
 cpu時(shí)間為:0.001159
 n=100 迭代步數(shù)為:268
 cpu時(shí)間為:0.008718 迭代步數(shù)為:273
 cpu時(shí)間為:0.010592 迭代步數(shù)為:286
 cpu時(shí)間為:0.009390
 n=225 迭代步數(shù)為:553
 cpu時(shí)間為:0.060857 迭代步數(shù)為:564
 cpu時(shí)間為:0.061327 迭代步數(shù)為:589
 cpu時(shí)間為:0.067140
2.GS迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:42
 cpu時(shí)間為:0.000602 迭代步數(shù)為:43
 cpu時(shí)間為:0.000750 迭代步數(shù)為:45
 cpu時(shí)間為:0.000784
 n=100 迭代步數(shù)為:136
 cpu時(shí)間為:0.005501 迭代步數(shù)為:139
 cpu時(shí)間為:0.005547 迭代步數(shù)為:145
 cpu時(shí)間為:0.005270
 n=225 迭代步數(shù)為:278
 cpu時(shí)間為:0.035151 迭代步數(shù)為:285
 cpu時(shí)間為:0.028184 迭代步數(shù)為:297
 cpu時(shí)間為:0.032679
3.SOR迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:26
 cpu時(shí)間為:0.000482 迭代步數(shù)為:27
 cpu時(shí)間為:0.000427 迭代步數(shù)為:28
 cpu時(shí)間為:0.000523
 n=100 迭代步數(shù)為:89
 cpu時(shí)間為:0.003519 迭代步數(shù)為:91
 cpu時(shí)間為:0.003950 迭代步數(shù)為:95
 cpu時(shí)間為:0.003958
 n=225 迭代步數(shù)為:184
 cpu時(shí)間為:0.018887 迭代步數(shù)為:189
 cpu時(shí)間為:0.019066 迭代步數(shù)為:197
 cpu時(shí)間為:0.023953
誤差向量范數(shù)圖片(n=25,初值條件a1(x,y)=x2+y2+x):
 
 分析:
 1.通過對比在不同維數(shù),不同初值下Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解二維泊松方程達(dá)到相同精度時(shí),他們所需cpu時(shí)間,迭代步數(shù),我們可以看出SOR迭代比較好,因?yàn)樗牡綌?shù)少,cpu時(shí)間短,而Jacobi迭代比較差,因?yàn)樗牡綌?shù)多,cpu時(shí)間長。
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.2.2.三種迭代第二種方式((2)式)對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi1迭代
維數(shù)n
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:83
 cpu時(shí)間為:0.002537 迭代步數(shù)為:83
 cpu時(shí)間為:0.002077 迭代步數(shù)為:87
 cpu時(shí)間為:0.002442
 n=100 迭代步數(shù)為:269
 cpu時(shí)間為:0.067003 迭代步數(shù)為:274
 cpu時(shí)間為:0.067514 迭代步數(shù)為:287
 cpu時(shí)間為:0.073143
 n=225 迭代步數(shù)為:554
 cpu時(shí)間為:0.705603 迭代步數(shù)為:565
 cpu時(shí)間為:0.720653 迭代步數(shù)為:590
 cpu時(shí)間為:0.756126
2.GS1迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:43
 cpu時(shí)間為:0.001448 迭代步數(shù)為:44
 cpu時(shí)間為:0.001453 迭代步數(shù)為:46
 cpu時(shí)間為:0.001378
 n=100 迭代步數(shù)為:137
 cpu時(shí)間為:0.037669 迭代步數(shù)為:140
 cpu時(shí)間為:0.038784 迭代步數(shù)為:146
 cpu時(shí)間為:0.039983
 n=225 迭代步數(shù)為:279
 cpu時(shí)間為:0.395037 迭代步數(shù)為:286
 cpu時(shí)間為:0.409789 迭代步數(shù)為:298
 cpu時(shí)間為:0.424843
3.SOR1迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:27
 cpu時(shí)間為:0.000752 迭代步數(shù)為:28
 cpu時(shí)間為:0.000800 迭代步數(shù)為:29
 cpu時(shí)間為:0.001054
 n=100 迭代步數(shù)為:90
 cpu時(shí)間為:0.026739 迭代步數(shù)為:92
 cpu時(shí)間為:0.025387 迭代步數(shù)為:96
 cpu時(shí)間為:0.026531
 n=225 迭代步數(shù)為:185
 cpu時(shí)間為:0.265589 迭代步數(shù)為:190
 cpu時(shí)間為:0.270464 迭代步數(shù)為:198
 cpu時(shí)間為:0.284036
誤差向量范數(shù)圖片(n=25,初值條件a1(x,y)=x2+y2+x):
 
 分析:
 1.通過對比在不同維數(shù),不同初值下Jacobi迭代,GS迭代,SOR迭代這三種迭代方式對于求解二維泊松方程達(dá)到相同精度時(shí),他們所需cpu時(shí)間,迭代步數(shù),我們可以看出SOR迭代比較好,因?yàn)樗牡綌?shù)少,cpu時(shí)間短,而Jacobi迭代比較差,因?yàn)樗牡綌?shù)多,cpu時(shí)間長。
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.2.3.Jacobi迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了Jacobi迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.Jacobi迭代
維數(shù)n
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:82
 cpu時(shí)間為:0.001181 迭代步數(shù)為:82
 cpu時(shí)間為:0.001178 迭代步數(shù)為:86
 cpu時(shí)間為:0.001159
 n=100 迭代步數(shù)為:268
 cpu時(shí)間為:0.008718 迭代步數(shù)為:273
 cpu時(shí)間為:0.010592 迭代步數(shù)為:286
 cpu時(shí)間為:0.009390
 n=225 迭代步數(shù)為:553
 cpu時(shí)間為:0.060857 迭代步數(shù)為:564
 cpu時(shí)間為:0.061327 迭代步數(shù)為:589
 cpu時(shí)間為:0.067140
2.Jacobi1迭代
維數(shù)n
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:83
 cpu時(shí)間為:0.002537 迭代步數(shù)為:83
 cpu時(shí)間為:0.002077 迭代步數(shù)為:87
 cpu時(shí)間為:0.002442
 n=100 迭代步數(shù)為:269
 cpu時(shí)間為:0.067003 迭代步數(shù)為:274
 cpu時(shí)間為:0.067514 迭代步數(shù)為:287
 cpu時(shí)間為:0.073143
 n=225 迭代步數(shù)為:554
 cpu時(shí)間為:0.705603 迭代步數(shù)為:565
 cpu時(shí)間為:0.720653 迭代步數(shù)為:590
 cpu時(shí)間為:0.756126
誤差向量范數(shù)圖片(n=25,初值條件a1(x,y)=x2+y2+x):
 
 分析:
 1.通過比較兩種jacobi迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種jacobi迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.2.4.GS迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了GS迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.GS迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:42
 cpu時(shí)間為:0.000602 迭代步數(shù)為:43
 cpu時(shí)間為:0.000750 迭代步數(shù)為:45
 cpu時(shí)間為:0.000784
 n=100 迭代步數(shù)為:136
 cpu時(shí)間為:0.005501 迭代步數(shù)為:139
 cpu時(shí)間為:0.005547 迭代步數(shù)為:145
 cpu時(shí)間為:0.005270
 n=225 迭代步數(shù)為:278
 cpu時(shí)間為:0.035151 迭代步數(shù)為:285
 cpu時(shí)間為:0.028184 迭代步數(shù)為:297
 cpu時(shí)間為:0.032679
2.GS1迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:43
 cpu時(shí)間為:0.001448 迭代步數(shù)為:44
 cpu時(shí)間為:0.001453 迭代步數(shù)為:46
 cpu時(shí)間為:0.001378
 n=100 迭代步數(shù)為:137
 cpu時(shí)間為:0.037669 迭代步數(shù)為:140
 cpu時(shí)間為:0.038784 迭代步數(shù)為:146
 cpu時(shí)間為:0.039983
 n=225 迭代步數(shù)為:279
 cpu時(shí)間為:0.395037 迭代步數(shù)為:286
 cpu時(shí)間為:0.409789 迭代步數(shù)為:298
 cpu時(shí)間為:0.424843
誤差向量范數(shù)圖片(n=25,初值條件a1(x,y)=x2+y2+x):
 
 分析:
 1.通過比較兩種GS迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種GS迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.2.5.SOR迭代兩種實(shí)現(xiàn)方式對比
 在本次測試中,我們選取不同的分割細(xì)度n,初值條件,測試了GS迭代,兩種不同方式對于求解一維泊松方程達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 1.SOR迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:26
 cpu時(shí)間為:0.000482 迭代步數(shù)為:27
 cpu時(shí)間為:0.000427 迭代步數(shù)為:28
 cpu時(shí)間為:0.000523
 n=100 迭代步數(shù)為:89
 cpu時(shí)間為:0.003519 迭代步數(shù)為:91
 cpu時(shí)間為:0.003950 迭代步數(shù)為:95
 cpu時(shí)間為:0.003958
 n=225 迭代步數(shù)為:184
 cpu時(shí)間為:0.018887 迭代步數(shù)為:189
 cpu時(shí)間為:0.019066 迭代步數(shù)為:197
 cpu時(shí)間為:0.023953
2.SOR1迭代
維數(shù)n
初值 初值條件
 a1(x,y)=x 初值條件
 a1(x,y)=y 初值條件a1(x,y)=x2+y2+x
n=25 迭代步數(shù)為:27
 cpu時(shí)間為:0.000752 迭代步數(shù)為:28
 cpu時(shí)間為:0.000800 迭代步數(shù)為:29
 cpu時(shí)間為:0.001054
 n=100 迭代步數(shù)為:90
 cpu時(shí)間為:0.026739 迭代步數(shù)為:92
 cpu時(shí)間為:0.025387 迭代步數(shù)為:96
 cpu時(shí)間為:0.026531
 n=225 迭代步數(shù)為:185
 cpu時(shí)間為:0.265589 迭代步數(shù)為:190
 cpu時(shí)間為:0.270464 迭代步數(shù)為:198
 cpu時(shí)間為:0.284036
誤差向量范數(shù)圖片(n=25,初值條件a1(x,y)=x2+y2+x):
 
 分析:
 1.通過比較兩種SOR迭代的cpu時(shí)間和迭代次數(shù),我們發(fā)現(xiàn),在維數(shù)較小的情況下,兩種迭代方法的效率差不多,但是隨著n的變大,我們發(fā)現(xiàn),第一種SOR迭代cpu時(shí)間都明顯小于第二種迭代的cpu時(shí)間.
 2.通過橫向和縱向比較,我們發(fā)現(xiàn),初值對cpu時(shí)間,迭代步數(shù)影響不大,但是,維數(shù)對cpu時(shí)間,迭代步數(shù)影響較大
3.2.6.SOR迭代中ω的值對迭代的影響
 在本次測試中,我們選取n取25,初值條件a1(x,y)=x2+y2+x(可換),f(x,y)=x^2+x+1+exp(x)+y(可換),測試了SOR迭代,在ω取不同值的時(shí)候,對于求解二維泊松方程在達(dá)到相同精度時(shí),比較他們所需時(shí)間,迭代步數(shù),誤差大小等信息。
 松弛變量ω的取值 迭代步數(shù),cpu時(shí)間
 w=0.100000 迭代步數(shù)為:876,cpu時(shí)間為:0.008003
 w=0.200000 迭代步數(shù)為:415,cpu時(shí)間為:0.004819
 w=0300000 迭代步數(shù)為:262,cpu時(shí)間為:0.004344
 w=0.400000 迭代步數(shù)為:185,cpu時(shí)間為:0.001974
 w=0.500000 迭代步數(shù)為:138,cpu時(shí)間為:0.002564
 w=0.600000 迭代步數(shù)為:108,cpu時(shí)間為:0.001548
 w=0.700000 迭代步數(shù)為:85,cpu時(shí)間為:0.001554
 w=0800000 迭代步數(shù)為:69,cpu時(shí)間為:0.000749
 w=0.900000 迭代步數(shù)為:55,cpu時(shí)間為:0.001033
 w=1.000000 迭代步數(shù)為:45,cpu時(shí)間為:0.000499
 w=1.100000 迭代步數(shù)為:36,cpu時(shí)間為:0.000421
 w=1.200000 迭代步數(shù)為:28,cpu時(shí)間為:0.000365
 w=1.300000 迭代步數(shù)為:20,cpu時(shí)間為:0.000272
 w=1.400000 迭代步數(shù)為:17,cpu時(shí)間為:0.000299
 w=1.500000 迭代步數(shù)為:23,cpu時(shí)間為:0.000323
 w=1.600000 迭代步數(shù)為:29,cpu時(shí)間為:0.000374
 w=1.700000 迭代步數(shù)為:40,cpu時(shí)間為:0.000474
 w=1.800000 迭代步數(shù)為:62,cpu時(shí)間為:0.000799
 w=1.900000 迭代步數(shù)為:132,cpu時(shí)間為:0.001397
 圖片較多,就放了四張:
 ω=0.2 ω=0.7
 :
 
 我們擬合了一下w和迭代次數(shù)的關(guān)系
 w和迭代次數(shù)的關(guān)系: -991.1608 w^5 + 5895.5817 w^4 - 13160.8454 w^3 + 13769.5701 w^2 - 6849.542 w + 1398.1992
 
 分析:圖中可以看出當(dāng)松弛變量ω在[1.2,1.6]之間時(shí),SOR迭代次數(shù)少,而且所需時(shí)間短。
四、結(jié)論和未來的工作
 4.1結(jié)論
 1.SOR迭代比較好,因?yàn)樗牡綌?shù)少,cpu時(shí)間短,而Jacobi迭代比較差,因?yàn)樗牡綌?shù)多,cpu時(shí)間長,但是如果我們從算法角度來看,Jacobi迭代是可以并行運(yùn)算的,但是GS迭代,SOR迭代都不行。
 2.對于一維和二維泊松方程來說,當(dāng)松弛變量ω在[1.2,1.6]之間時(shí),SOR迭代次數(shù)少,而且所需時(shí)間短。
 3.對于Jacobi迭代來說,對等式(1)和對等式(2)所設(shè)計(jì)出來的兩種算法,等式(2)對應(yīng)的算法更好一些,這個(gè)算法相較于等式(1)來說,迭代次數(shù)和所需時(shí)間都較少;但是對于GS迭代來說,對等式(1)和對等式(2)所設(shè)計(jì)出來的兩種算法在迭代次數(shù),所需時(shí)間等方面卻差不多;而對于SOR迭代來說,對等式(1)和對等式(2)所設(shè)計(jì)出來的兩種算法,等式(1)對應(yīng)的算法更好一些。
 4.當(dāng)然這里的數(shù)據(jù)會(huì)隨著初值的改變而改變,這是顯然的,如果取到的初值距離真實(shí)解很近,那么迭代次數(shù)與所需時(shí)間自然就會(huì)減少,相反,如果取到的初值距離真實(shí)解很遠(yuǎn),那么迭代次數(shù)與所需時(shí)間自然就會(huì)增加。當(dāng)然這里的遠(yuǎn)近是用范數(shù)來刻畫的,采用哪種范數(shù)都可以,他們是等價(jià)的,在本文中,我們采用的是二范數(shù)。
 4.2未來的工作
 1.在本文中,由于計(jì)算機(jī)處理數(shù)據(jù)能力的限制,所考慮的n并不是很大,即方程組的系數(shù)矩陣的階并不是很大,所以我們想嘗試一下當(dāng)對區(qū)間[0,1]分割的很細(xì)密的時(shí)候,相應(yīng)的迭代次數(shù),所需時(shí)間會(huì)有什么變化。
 2.本文在做二維泊松方程問題的時(shí)候,只考慮了一種排序方式,即自然排序,我們想要再嘗試一下其他排序方法,比如紅黑排序,對相應(yīng)的迭代次數(shù),所需時(shí)間會(huì)有什么影響。
 3.目前,我們只能確定SOR迭代中,當(dāng)弛變量ω在[1.2,1.6]之間時(shí),SOR迭代次數(shù)少,而且所需時(shí)間短。范圍還是很大,我們想要在今后的工作中將范圍縮小,最好能確定到10^(-2)左右,因?yàn)檫@個(gè)精度比較具有工程價(jià)值。
五、參考文獻(xiàn)
 [1]Round-off error analysis of iterations for large linear systems[J] . ??Numerische Mathematik . 1978
 [2]實(shí)用數(shù)值分析[M]. 重慶大學(xué)出版社 , 楊大地,談駿渝編著, 2000
 [3]二維泊松方程和擴(kuò)散方程的一類顯式并行算法[D]. 許秋燕.山東大學(xué) 2010
總結(jié)
以上是生活随笔為你收集整理的数值代数课设(99分)--基于Jacobi迭代,GS迭代,SOR迭代对泊松方程的求解[matlab](上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 深度学习:用生成对抗网络(GAN)来恢复
 - 下一篇: 微软提前发新版音乐播放器 阻击苹果新iP