用SOR迭代法
sor迭代法手算例题
![sor迭代法手算例题](https://img.taocdn.com/s3/m/e4c5a97ff11dc281e53a580216fc700abb68521b.png)
sor迭代法手算例题SOR迭代法是求解线性方程组的一种经典方式,其基本思想是通过不断迭代来逼近方程组的解。
这种方法在大规模问题上具有很好的效率,因此得到了广泛的应用。
本文将介绍SOR迭代法的基本原理,并以一个手算例题来展示其具体步骤和计算结果。
一、SOR迭代法的基本原理在介绍SOR迭代法的原理之前,我们先来看一下迭代法本身的思想。
假设有一个线性方程组:$$Ax=b$$其中,A是一个$n\times n$的系数矩阵,b是一个$n\times 1$的常数向量,x是一个$n\times 1$的未知向量。
迭代法的基本思想是将方程组表示为:$$x^{(k+1)}=Tx^{(k)}+C$$其中,$x^{(k)}$表示第k次迭代的近似解,$T$是一个$n\times n$的矩阵,$C$是一个$n\times 1$的常数向量。
迭代法的步骤是从一个初始点$x^{(0)}$开始,不断应用上述公式来寻找更好的解$x^{(k+1)}$。
当接近真解时,迭代的过程会不断收敛,即$x^{(k+1)}$会不断逼近真解$x$。
那么,如何确定矩阵$T$和向量$C$呢?最简单的方法是将方程组表示为:$$x^{(k+1)}=(I-\omega A)x^{(k)}+\omega b$$其中,I是$n\times n$的单位矩阵,$\omega$是一个常数,称作松弛因子。
当$\omega=1$时,这就是最基本的迭代法——雅克比迭代法。
但是,雅克比迭代法的收敛速度比较慢,因此需要调整$\omega$的值,从而得到更好的迭代效果。
SOR迭代法就是一种改良的迭代方法,其基本思想是通过加速松弛因子的变化来改善雅克比迭代法的效率。
具体来说,SOR迭代法的公式为:$$x_i^{(k+1)}=(1-\omega)x_i^{(k)}+\frac{\omega}{a_{ii}}\left(b_i-\sum_{j<i}a_{ij}x_j^{(k+1)}-\sum_{j>i}a_{ij}x_j^{(k)}\right)$$其中,$i=1,2,\cdots,n$。
对称超松弛迭代法 -回复
![对称超松弛迭代法 -回复](https://img.taocdn.com/s3/m/9dc9307430126edb6f1aff00bed5b9f3f80f7256.png)
对称超松弛迭代法-回复对称超松弛迭代法(Symmetric Successive Over-Relaxation, SSOR)是一种用于求解线性方程组的迭代解法。
它是对超松弛迭代法(Successive Over-Relaxation, SOR)的改进和扩展,适用于具有对称正定系数矩阵的方程组。
本文将详细介绍SSOR的原理、算法步骤和收敛性分析。
一、SSOR原理:1. 对称正定系数矩阵:对称正定系数矩阵是指一个n阶实对称矩阵A,满足以下两个条件:(1) 矩阵A的所有特征值大于零;(2) 对于任意非零列向量x,都有x^T * A * x > 0,其中x^T表示向量x的转置。
2. SSOR分解:对称正定系数矩阵A可以进行SSOR分解,即将A分解为A = D - L - U,其中D、L、U分别为A的对角线元素、下三角和上三角元素组成的矩阵。
3. 迭代格式:SSOR迭代格式为:x(k+1) = (D - ωL)^(-1) * [ωU * x(k) + (1-ω) * b],其中x(k)表示第k次迭代的解向量,ω为松弛因子,b为常数向量。
4. SSOR与SOR:SSOR是对SOR方法的改进和拓展,当松弛因子ω=1时,SSOR退化为SOR方法。
SSOR方法在SOR方法的基础上引入了前向迭代和后向迭代,使得收敛速度更快。
二、SSOR算法步骤:1. 初始化:给出初始近似解向量x(0),选择松弛因子ω的初值。
2. 迭代过程:(1) 前向迭代:根据迭代格式,计算x(k+1/2) = (D - ωL)^(-1) * [ωU * x(k) + (1-ω) * b]。
(2) 后向迭代:继续根据迭代格式,计算x(k+1) = (D - ωU)^(-1) * [ωL * x(k+1/2) + (1-ω) * b]。
(3) 重复步骤(1)和(2),直到满足收敛准则(如迭代次数达到指定值或解的误差小于给定阈值)为止。
3. 输出结果:输出近似解向量x(k+1)。
(完整版)6.4超松弛迭代法
![(完整版)6.4超松弛迭代法](https://img.taocdn.com/s3/m/917e0f68a1c7aa00b52acbac.png)
0.75 x2( ( k 1)
6 0.25x3(k
)
7.5
x (k 1) 3
0.25x2(k1)
6
②取ω=1.25 ,即SOR迭代法:
xx21((kk11))
0.25x1(k) 0.9375x2(k) 7.5 0.9375x1(k1) 0.25x2(k) 0.3125x3(k)
-5.0183105
3.1333027
4.0402646
-5.0966863
4
3.0549316
3.9542236
-5.0114410
2.9570512
4.0074838
-4.9734897
5
3.0343323
3.9713898
-5.0071526
3.0037211
4.0029250
-5.0057135
6
3.0214577
3.9821186
-5.0044703
2.9963276
4.0009262
-4.9982822
7 3.0134110
3.9888241
-5.0027940
3.0000498
4.0002586
-5.0003486
迭代法若要精确到七位小数, Gauss-Seidel迭代法需要34次迭代; 而用SOR迭代法(ω=1.25),只需要14次迭代。
因子ω。
返回引用
opt
(1
2
1 [(BJ )]2 )
(4)
这时,有ρ(Bopt
)=
ω
opt
-
1。
SOR法分类与现状
通常,
(1)当ω>1 时,称为超松弛算法; (2)当ω<1 时,称为亚松弛算法。
第一次迭代解法之SOR
![第一次迭代解法之SOR](https://img.taocdn.com/s3/m/2c8c8dd067ec102de3bd89b3.png)
种相容范数都有 ρ(A)≤||A||
(6.2)
2021/6/17
13
另一个更深刻的结果,对于任意的ε>0,必存在一种相
容的矩阵范数,使
|| A ||≤ ρ(A) +ε
(6.3)
式(6.2)和(6.3)表明,矩阵A的谱半径是它所有相 容范数的下确界。
定义6.4 设有n×n矩阵序列 A(k) (ai(jk) ), k 1, 2, 方阵A=(aij), 如果
多大算病态没有标准。如果主元很小或者元素数量级相差大,可能是病态
cond ( A) A A1 AA1 1
2021/6/17
18
§2 迭代解法与收敛性
一、迭代解法
设有线性方程组
Ax=b
(1)
A∈Rn×n, b∈Rn .
对A 进行分裂, A=A1+A2 , 其中 A1 可逆,
则 (A1+A2)x=b A1x = - A2x+b x = - A1-1 A2 x + A1-1 b
再由 Ax =b,得到 || b||= || Ax || ≤||A || ||x||
2021/6/17
16
于是,由 || △x ||≤||A-1 || ||△b||
及 ||b || ≤||A || ||x|| 1 A
x
b
得到解的相对误差为
x A
A1
b
x
b
令 Cond(A)=||A || ||A-1 || ,并称其为矩阵A的条件数。
14 20
则它的特征方程为:
I AT A 10 14
2 30 4 0
14
20
2021/6/17
10
此方程的根为矩阵ATA的特征值,解得
sor迭代法
![sor迭代法](https://img.taocdn.com/s3/m/3a9e0009c4da50e2524de518964bcf84b9d52d8e.png)
SOR迭代法的Matlab程序function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b)); % 赋初值tol=10^(-2); % 给定误差界N=1000; % 给定最大迭代次数[n,n]=size(A); % 确定矩阵A的阶w=1; % 给定松弛因子k=1;% 迭代过程while k<=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);endif max(abs(x-x0))<=tolfid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'x的值\n\n');fprintf(fid, '%12.8f \n', x);break;endk=k+1;x0=x;endif k==N+1fid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);end常微分方程的数值解法实验目的:熟悉在Matlab平台上直接求解常微分方程初值问题试验方法1、利用改进欧拉法解方程:程序内容为:fun=@(x,y)x^(-2)-y/x;h=0.05;X=1:h:2;Y(1)=1;for i=2:21Y(i)=Y(i-1)+h/2*(fun(X(i-1),Y(i-1))+fun(X(i),Y(i-1))+h*fun(X(i-1),Y(i-1))); end;Y运行结果为:Y =Columns 1 through 91.0000 0.9989 0.9957 0.9909 0.9848 0.9778 0.9701 0.9618 0.9530Columns 10 through 180.9440 0.9348 0.9254 0.9160 0.9065 0.8971 0.8876 0.8783 0.8690Columns 19 through 210.8598 0.8508 0.8418真实解的求法为:x=1:0.05:2;y=1./x.*(log(x)+1)y =Columns 1 through 81.0000 0.9988 0.9957 0.9911 0.9853 0.9785 0.9710 0.9630Columns 9 through 160.9546 0.9459 0.9370 0.9279 0.9188 0.9096 0.9004 0.8912Columns 17 through 210.8821 0.8731 0.8641 0.8553 0.8466用四阶R-K算法解常微分方程的程序为:fun=@(x,y)x^(-2)-y/x;h=0.1;X=1:h:2;Y(1)=1;for n=2:11k1=fun(x(n-1),Y(n-1));k2=fun(x(n-1)+h/2,Y(n-1)+h/2*k1);k3=fun(x(n-1)+h/2,Y(n-1)+h/2*k2);k4=fun(x(n-1)+h,Y(n-1)+h*k3);Y(n)=Y(n-1)+h/6*(k1+2*k2+2*k3+k4)end;Y运行后了结果为:Y =Columns 1 through 91.0000 0.9957 0.9853 0.9710 0.9546 0.9370 0.9188 0.9004 0.8821Columns 10 through 110.8641 0.8466真实解的求法为:x=1:0.1:2;y=1./x.*(log(x)+1)y =Columns 1 through 91.0000 0.9957 0.9853 0.9710 0.9546 0.9370 0.9188 0.9004 0.8821Columns 10 through 110.8641 0.8466可见其精确度至少已达到0.0012、MATLAB中数值解法“ode45”为:[x1,y1] = ode45(@(x,y)x^(-2)-y/x,[1,2],y0);符号解法“dsolve”求解为:dsolve('Dy=x^(-2)-y/x','y(1) = 1','x')ans =(log(x)+1)/x画出两种算法的图形位:[x1,y1] = ode45(@(x,y)x^(-2)-y/x,[1,2],1);fplot('(log(x)+1)/x',[1,2]);hold on, plot(x1,y1,'ro');数值算法同解析算法几乎完全吻合。
SOR迭代法
![SOR迭代法](https://img.taocdn.com/s3/m/43c67d62a5e9856a5712603b.png)
ω
0.6 0.8 1 1.1 1.15 1.25 1.3 1.5 1.8
迭代次数 16 10 8 7 8 11 15 15 15
近似解与 5 5 5 5 5 5 5 4 1 准确解重 复合位数
使 SOR 法收敛最快的松弛因子通常称为最 优 松
弛因子。目前,只有少数特殊类型的矩阵,才有确定 的最优松弛因子的理论公式,但实际使用时也有一定 困难。通常的办法,是选不同的 进行试算,以确定
SOR迭代法常以这种形式进行计算。
格式(3.4)的矩阵形式为
X (k1) (1 ) X k D1 b LX k UX (k) ,
3.5
其中
a11
D
a22
O
0
0
,
ann
0 a12 L
U
0O
O
0
a1n
an1,n
0
显然,A D L U.
0
0
L
a21
O
OO
aij x(jk )
3.1
若记
i1
n
r(k)
i
(bi
a x(k 1) ij j
aij
x
(k j
)
),
j 1
j i
i 1,2,L ,n
则 3.1 式可写为
x( k 1) i
x(k) i
1 aii
r(k)
i
3.2
由此可以看出, Gauss Seidel 迭代法的第 k 1
步 ,相当于在第 k 步的基础上每一个分量增加
上述定理说明,对于任何系数矩阵 A,若要 SOR
法收敛,必须选取松弛因子 0,2 , 然而,当松
弛因子满足条件 0 2 时,并不是对所有系数矩 阵 A 来说,SOR 法都是收敛的。但是,对一些特殊矩 阵来说,这一条件是充分的。
SOR迭代法
![SOR迭代法](https://img.taocdn.com/s3/m/43c67d62a5e9856a5712603b.png)
aij x(jk )
3.1
若记
i1
n
r(k)
i
(bi
a x(k 1) ij j
aij
x
(k j
)
),
j 1
j i
i 1,2,L ,n
则 3.1 式可写为
x( k 1) i
x(k) i
1 aii
r(k)
i
3.2
由此可以看出, Gauss Seidel 迭代法的第 k 1
步 ,相当于在第 k 步的基础上每一个分量增加
SOR迭代法常以这种形式进行计算。
格式(3.4)的矩阵形式为
X (k1) (1 ) X k D1 b LX k UX (k) ,
3.5
其中
a11
D
a22
O
0
0
,
ann
0 a12 L
U
0O
O
0
a1n
an1,n
0
显然,A D L U.
0
0
L
a21
O
OO
上述定理说明,对于任何系数矩阵 A,若要 SOR
法收敛,必须选取松弛因子 0,2 , 然而,当松
弛因子满足条件 0 2 时,并不是对所有系数矩 阵 A 来说,SOR 法都是收敛的。但是,对一些特殊矩 阵来说,这一条件是充分的。
定理7 如果矩阵 A 是对称正定的,则 SOR 法 对于0 2 是收敛的。
其 Gauss Seidel 迭 代 格 式 可写为 (aii 0) :
x(k1) i
x(k) i
1 aii
bi
a x(k1) i1 1
L
a x(k1) i,i1, i1
sor迭代法
![sor迭代法](https://img.taocdn.com/s3/m/7b7d0ddd162ded630b1c59eef8c75fbfc77d94a0.png)
sor迭代法Sor迭代法是一种求解线性方程组的算法,它是Jacobi迭代法和Gauss-Seidel迭代法的改进。
在本文中,我们将深入探讨Sor迭代法的原理、优缺点以及应用。
一、原理1.1 Sor迭代法的基本思想Sor迭代法是通过对Jacobi迭代法和Gauss-Seidel迭代法进行改进得到的。
其基本思想是在Jacobi迭代和Gauss-Seidel迭代中引入一个松弛因子,使得每次更新后的值更接近于真实解。
1.2 Sor迭代公式Sor迭代公式如下:$x^{(k+1)}_i=(1-\omega)x^{(k)}_i+\frac{\omega}{a_{ii}}\left(b_i-\sum_{j=1,j\neq i}^n a_{ij}x^{(k+1)}_j\right)$其中,$x^{(k+1)}_i$表示第$k+1$次迭代中第$i$个未知数的值;$x^{(k)}_i$表示第$k$次迭代中第$i$个未知数的值;$\omega$为松弛因子;$a_{ii}$为系数矩阵中第$i$行第$i$列元素;$\sum_{j=1,j\neq i}^n a_{ij}x^{(k+1)}_j$表示第$k+1$次迭代中除第$i$个未知数外的其他未知数的值的和;$b_i$为方程组中第$i$个方程的常数项。
1.3 松弛因子松弛因子$\omega$是Sor迭代法中一个重要的参数,它控制了每次迭代后更新值与真实解之间的距离。
一般情况下,松弛因子取值在0和2之间。
当$\omega=1$时,Sor迭代法退化成Gauss-Seidel迭代法;当$\omega=0$时,Sor迭代法退化成Jacobi迭代法。
二、优缺点2.1 优点(1)收敛速度快:相比于Jacobi迭代法和Gauss-Seidel迭代法,Sor迭代法具有更快的收敛速度。
(2)适用范围广:Sor迭代法适用于大多数线性方程组求解问题,并且不需要对系数矩阵做任何特殊处理。
2.2 缺点(1)松弛因子需要调整:松弛因子是影响Sor迭代法收敛速度和精度的关键参数,因此需要通过试验或经验来确定最优值。
预条件SOR型迭代法的收敛性的开题报告
![预条件SOR型迭代法的收敛性的开题报告](https://img.taocdn.com/s3/m/30df525811a6f524ccbff121dd36a32d7375c724.png)
预条件SOR型迭代法的收敛性的开题报告一、选题背景预条件SOR型迭代法是求解线性方程组的一种基本方法,具有简单、高效等优点。
在实际科学计算中,往往需要求解大型稀疏线性方程组,预条件SOR型迭代法可以有效地处理此类问题,因此具有广泛应用价值。
二、研究内容本文将对预条件SOR型迭代法的收敛性进行研究。
具体内容包括:1. 解析求解预条件SOR型迭代法的方程组;2. 探究预条件SOR型迭代法的收敛性条件;3. 分析收敛速度及优化方法。
三、预期成果通过本文的研究,预期可以得到以下成果:1. 确定预条件SOR型迭代法的收敛性条件;2. 分析预条件SOR型迭代法的收敛速度及优化方法;3. 具有一定的实用性和参考价值。
四、研究方法本文将采用数学理论推导的方法对预条件SOR型迭代法的收敛性进行研究。
具体方法包括:1. 推导预条件SOR型迭代法的解析表达式;2. 运用数学推导,确定预条件SOR型迭代法的收敛性条件;3. 通过实例分析,比较收敛速度及优化方法。
五、研究难点及可行性分析本文的研究难点在于预条件SOR型迭代法的收敛性分析较为复杂,需要运用数学推导方法,分析技巧要求较高。
同时,大型科学计算问题的解法具有很强的实际性和应用价值,因此本文的可行性也非常高。
六、研究意义本文的研究意义在于:1. 提供了一种解决大型稀疏线性方程组问题的有效方法;2. 确定了预条件SOR型迭代法的收敛性条件,有助于提高求解速度和精确度;3. 提高了大型科学计算问题求解的效率和精确度,有着广泛的应用价值。
七、研究进度安排1. 第一周:收集、整理相关文献资料,并进行阅读和理解;2. 第二周-第四周:学习预条件SOR型迭代法的理论知识和数学推导方法,并进行预处理和计算;3. 第五周-第七周:对预处理后的数据进行处理和分析,并确定收敛性条件;4. 第八周-第十周:完成收敛速度及优化方法的分析和比较,并进行实例分析;5. 第十一周-第十二周:完成论文的撰写和总结。
SOR迭代matlab程序
![SOR迭代matlab程序](https://img.taocdn.com/s3/m/e93e72b0f61fb7360a4c653b.png)
Numerical Analysis
逐次超松弛迭代(SOR迭代)
设已求得 n 元线性代数方程组 Ax = b第k -1次迭
代向量 x(k1) x1(k1) , x2(k1) ,L , xn(k1) T及第k 次迭代向量
x(k的) 分量 x(jk) ( j 1, 2,L ,i 1) ,要计算分量 xi.(k )
xi
GSeaiudsesl迭代值
x(k 1) i
i 1
aijቤተ መጻሕፍቲ ባይዱ
x(k ) j
n
aij
x(k 1) j
bi
aii
j1
j i
(i 1, 2,L , n) (5.10)
SOR迭代法的矩阵表示 (A D L U )
x(k ) (1 ) x(k 1) D1(b Lx(k ) Ux(k 1) )
Step 1 用Gauss-Seidel 迭代求得
xi
1 aii
i 1 j 1
aij x(jk )
n
a x(k 1) ij j
j i 1
bi
Step 2 计算 x与i 第k -1次迭代值 xi(的k1)加权平均作为
第k 次迭代值:
x(k ) i
(1 ) xi(k 1)
xi
贵州师范大学数学与计算机科学学院
Numerical Analysis
x(k ) i
(1 ) xi(k 1)
xi
(1 )xi(k1)
1 aii
i 1 j 1
aij x(jk )
n
a x(k 1) ij j
j i 1
bi
x(k 1) i
i 1
aij x(jk )
SOR迭代法松弛因子选取
![SOR迭代法松弛因子选取](https://img.taocdn.com/s3/m/42019733482fb4daa58d4b6e.png)
l d e t ( B 】 = l 丑 … l b( B ) 】 ” < i
又
.
d e t ( B ) = d e t [ ( D 一 ) J d e t [ ( 1 一 w ) D + w U ]
=
[ d e t ( D ) ] ~ x d e t ( D ) × [ ( 1 一 w ) D + w D — t U 】 = ( 1 - w )
多的 取值 ,这样 的 w如何 取 ?
( 1 )等 区问 分割 比 例法 。
将区间 ( 0 ,2 ) M 等分 ,则松弛因子
…
收 敛 的 充 要 条 件 。对 单 松 弛 因子 W做 了取 值 范 围的 论 证和 具 体
厂, Ⅳ、
2
值选 取的 算法 分 析; 对双 松弛因 子W , 介绍了 当 A = l A 1 l 时 ,
X “ = ( D— w L ) [ ( 1 一 w ) D+ w U I x ) + ( D— w L ) w b ( 4 )
迭代 矩阵 B = ( D— w L ) [ ( 1 一 w ) D+ w U 】 。 而这样的w满 足什
么 条件 和 如 何 选 取 以对 的情 况 我 们 将 在 下 文 中 作进 一步 的讨
1 引言
厂 对 2 ' 3 , …,
相 容 线性 方 程组
=
b
(1)
有唯一解, 则A 非奇异, b ≠ 0。 其中 = ) ~为 系数矩阵,
b =( b 1 , b 2 , …, b ) 。
任取 的一 近 似解 ( ,由迭 代 公式 :
( 川 =B X( ”+ 厂 ( 2)
双 松 弛 因 子 的确 定 。
用SOR迭代法
![用SOR迭代法](https://img.taocdn.com/s3/m/4d52be76a6c30c2259019ec1.png)
一、数值求解如下正方形域上的Poisson 方程边值问二、2222(,)2,0,1(0,)(1,)(1),01(,0)(,1)0,01u u f x y x y x y u y u y y y y u x u x x ⎧⎛⎫∂∂-+==<<⎪ ⎪∂∂⎪⎝⎭⎨==-≤≤⎪⎪==≤≤⎩二、用椭圆型第一边值问题的五点差分格式得到线性方程组为2,1,1,,1,10,1,,0,141,?,?,?,?0,1i j i j i j i j i j ijj N j i i N u u u u u h f i j N u u u u i j N -+-+++----=≤≤====≤≤+,写成矩阵形式Au=f 。
其中 三、基本原理程序步骤:所有的步骤基本一致 1. 设置u ,n ,并给u ,n 赋初值; 2. While 语句循环,到的6步 3. Up 我第K 次迭代的值; 4. 分别进行计算,sum=0; 例如:Jacobi :sun= sum+A(i,j)*Ub; SOR 和Gauss_Seidel= sum+A(i,j)*u; 各自进行相应的下不运算。
5. 计算|Up-u|<ep 的绝对值,判断是否停机 6. 如果小于规定误差,迭代终止; 7. 输出结果u 和迭代次数k8. 在块的迭代中调用了追赶法的求解子程序zg ,在SOR 设计了A 得自动生成子程序creat_matix.1122N N v b v b u f v b ⎛⎫⎛⎫ ⎪ ⎪ ⎪⎪== ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭4114114ii A -⎛⎫ ⎪- ⎪= ⎪- ⎪-⎝⎭11,12,1,121,22,2,21,2,,2211,12,1,121,22,2,221,2,,(,,...,),(,,...,),......,(,,...,)(,,...,)?,(,,...,)?,......,(,,...,)?1,999,0.10.011T T N N TN N N N N T T N N T N N N N N v u u u v u u u v u u u b h f f f b h f f f b h f f f h N h N ====+=+=+===+取或则或,2,,1,2,...,i j f i j N==1122NN A I I A A I IA -⎛⎫ ⎪-⎪= ⎪- ⎪-⎝⎭四、编写求解线性方程组Au=f的算法程序,用下列方法编程计算,并比较计算速度。
SOR法
![SOR法](https://img.taocdn.com/s3/m/cb98cbc56137ee06eff9189f.png)
实验报告课程名称:__________计算方法___________指导老师:__许诺、徐政________成绩:__________________ 实验名称:__SOR 法解方程组___实验类型:________________同组学生姓名:__________一、实验目的和要求(必填) 二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤 五、实验数据记录和处理六、实验结果与分析(必填) 七、讨论、心得一、实验目的1. 学习Matlab 编程语言,熟练Matlab 软件的使用2. 深入理解和掌握SOR 迭代法解方程组的原理二、实验原理在SOR 迭代法中,松弛因子w 的取值对迭代公式的收敛速度影响很大,利用Matlab 编程的方法可以直接观测不同w 值下,公式收敛速度上的差异。
三、实验内容 用Matlab 软件编程,以SOR 迭代法解下列方程组问题 4x 1—x 2 =1, -x 1+4x 2—x 3=4, -x 2+4x 3=-3; 求精度要求为r=5*10-6,松弛因子分别为w1=1.03 ,w2= 1,w3 =1.1时方程组的解及迭代次数四、Matlab 源程序function X=SOR(A,b,r,w1,w2,w3)%定义函数SOR(A,b,r,w1,w2,w3),含五个变量 A=input('请输入系数矩阵A :');b=input('请输入b 矩阵b :');r=input('请输入精度要求r :');W (1)=input('请输入松弛因子w1:');W (2)=input('请输入松弛因子w2:');W (3)=input('请输入松弛因子w3:'); %依次分别显示六组提示n=length(A); %求矩阵的行数nfor p=1:3 % p 表示三个松弛因子的顺序X=zeros(1,n); %设定初始迭代向量for j=1:250 % 自行设定最大迭代次数为250次for i=1:nX(i)=X(i)+w(p)*(b(i)-A(i,:)*X')/A(i,i); %SOR 迭代公式专业:电气工程及其自动化姓名:陆校斌学号:3061001143日期:2008.3.29地点:寝室电脑 装订线endfor i=1:nF(i)=w(p)*(b(i)-A(i,:)*X')/A(i,i); %F(i)为X(i)迭代前后之差endif max(abs(F))<r %判断F(i)最大值是否满足精度要求breakend %当满足精度要求时,结束判断语句enddisp('迭代次数为') %输出迭代次数jdisp('方程组之解为') %输出方程组的解Xend %结束程序五、程序测试请输入系数矩阵A:[4 -1 0;-1 4 -1;0 -1 4]请输入b矩阵b:[1; 4 ;-3]请输入精度要求r:5*10^(-6)请输入松弛因子w1:1.03请输入松弛因子w2:1请输入松弛因子w3:1.1迭代次数j =5方程组的解为X =0.5000 1.0000 -0.5000迭代次数j =6方程组的解为X =0.5000 1.0000 -0.5000迭代次数j =6方程组的解为X =0.5000 1.0000 -0.5000六、结果分析由测试结果可知,松弛因子w=w1=1.03时,迭代次数最少,只需5次;而松弛因子w为1或1.1时,迭代次数均为6次。
对称超松弛迭代法 概述及解释说明
![对称超松弛迭代法 概述及解释说明](https://img.taocdn.com/s3/m/ecb7b540eef9aef8941ea76e58fafab069dc4497.png)
对称超松弛迭代法概述及解释说明1. 引言1.1 概述本篇文章旨在介绍对称超松弛迭代法的概述及解释说明。
对称超松弛迭代法是一种用于求解线性方程组的数值方法,它结合了迭代法和超松弛方法,能够在求解大型稀疏线性方程组时展现出良好的效果。
本文将从原理、算法流程以及应用和效果等方面进行详细说明,以帮助读者更好地理解该方法。
1.2 文章结构本文共分为四个部分:引言、对称超松弛迭代法概述、解释说明和结论。
在引言部分,我们将简要介绍本篇文章的主题和目的,并提供文章整体结构;在对称超松弛迭代法概述部分,我们将对迭代法、超松弛方法和对称超松弛迭代法进行逐一讲解;接着,在解释说明部分,我们将详细阐释该方法的原理,并提供算法流程说明,最后通过应用实例和效果分析来展示其实际应用价值;最后,在结论部分,我们将总结回顾全文内容,并展望未来对该领域的研究方向。
1.3 目的介绍对称超松弛迭代法的目的是为了提供一种有效求解线性方程组的数值方法,特别适用于复杂、大规模和稀疏问题。
本文旨在向读者介绍其背后的原理,阐明其算法流程,并通过实际应用和效果分析来证明其可行性和优越性。
最终目标是为读者提供一个全面而清晰的概述,帮助读者理解和运用对称超松弛迭代法解决实际问题。
2. 对称超松弛迭代法概述:2.1 迭代法简介:在数值分析和计算数学中,迭代法是一种通过从一个初始猜测值开始反复应用一个递归公式来逼近方程解的方法。
它广泛应用于线性方程组的求解问题。
不论是在工程领域还是科学研究中,线性方程组求解都是一个常见且重要的问题。
2.2 超松弛方法简介:超松弛方法(SOR)是迭代法中的一种技术,旨在加速收敛速度。
其核心思想是通过引入松弛因子来加快解的收敛过程。
对于每次迭代,在计算新解的分量时,超松弛方法允许我们使用之前已经更新但尚未完成全部迭代的分量进行估计。
该技术通常用于缩小残差并提高数值精度。
2.3 对称超松弛迭代法概述:对称超松弛(SSOR)迭代法结合了对称后退向前(SWEEP)和超松弛(SOR)的思想。
超松弛迭代法(SOR方法)
![超松弛迭代法(SOR方法)](https://img.taocdn.com/s3/m/2946980c7c1cfad6185fa7ad.png)
解:SOR迭代公式
x1( k
1)
(1 )x1(k )
4
(10 2x2(k )
4x3(k ) )
x
(k 2
1)
(1 )x2(k )
17
(3
2
x1(
k
1)
10x3(k ) )
x3( k
1)
(1 )x3(k )
9
(7 4x1(k 1)
10
x
(k 2
1)
)
初值 x (0) (0,0,0)T k = 0,1,2,…,
例该4方.4程用组S的OR精法确求解解线x (性*) 方 程(2组,1,1)T
如值只果需x(0取)迭ω取代(0=,04ω21,00x(=42)即1次T1xx,要11.高4便26达x斯11,可207到—xx要达22同4塞求到x样319德精0x精x3尔度130度迭要x,(3k7代求需1) 法要x)迭(和k) 代同1一1100初6次
数值计算方法
超松弛迭代法(SOR方法) 使用迭代法的困难在于难以估计其计算
量。有时迭代过程虽然收敛,但由于收敛速 度缓慢,使计算量变得很大而失去使用价值 。因此,迭代过程的加速具有重要意义。逐 次超松弛迭代(Successive Over relaxatic Method,简称SOR方法)法,可以看作是带参 数的高斯—塞德尔迭代法,实质上是高斯-塞 德尔迭代的一种加速方法。
或 Dx(k1) (1)Dx(k) (b Lx(k1) Ux(k) )
故 (D L)x(k1) (1)D Ux(k) b
显然对任何一个ω值,(D+ωL)非奇异,(因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b
SOR迭代(算法分析和数值算例)
![SOR迭代(算法分析和数值算例)](https://img.taocdn.com/s3/m/6258681b227916888486d786.png)
SOR 迭代基本思想Gauss-Seidel 迭代(1)1()(1)()()k k x D L U xD L +--=-+-的结果作为中间值,记为(1)k x+ 。
SOR 方法是将(1)k x+ 与上次计算的结果()k x 做加权平均作为最后结果。
迭代格式为:1(1)(1)()()111[](1),1,2i nk k k k ii ij jij j ij j i iix b a x a x x i na ωω-++==+=--+-=∑∑或者1(1)()(1)()11[],1,2i nk k k k iii ij jij j j j iiix x b a x a x i na ω-++===+--=∑∑算法: 1.0,,,A b x t e ω输入迭代初值松弛参数,为迭代次数初始值为0,为记录误差2. 当1,2in= 时,11:[]ni i i i j j j iix x b a x a ω==+-∑,结果仍然存储在ix 中。
迭代次数:1t t =+ 3.计算误差*e x x=-(真解已知)4.如果6510e -<⨯,则已达到精确度要求,否则继续第2步数值结果041010141,4,001430A b x -⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪=--== ⎪ ⎪ ⎪⎪ ⎪ ⎪--⎝⎭⎝⎭⎝⎭迭代初值,用Gauss 消去法求的其真解为*12112x ⎛⎫⎪ ⎪=⎪ ⎪- ⎪⎝⎭依次取1,1.03,1.1ω=,数值结果见下表总结从实验结果可以看出,当取松弛参数为1.03时只需五步就能达到所需精度。
附录(M文件)function [t,x]=successiive_over_Rellaxatiion(A,b,x0,w,rx)n=length(A);x=x0; %% x0为迭代初值e=norm(rx-x0,inf); %% rx为真解,e为误差t=0; %% t为迭代次数while e>5*10^(-6)for i=1:ntemp=0;for j=1:ntemp=temp+A(i,j)*x(j,1);endx(i,1)=x(i,1)+w*(b(i,1)-temp)/A(i,i);ende=norm(rx-x,inf);t=t+1;xend。
数值计算 SOR方法
![数值计算 SOR方法](https://img.taocdn.com/s3/m/f9f38076f242336c1eb95ee4.png)
一.SOR迭代法流程图:开始设置一维数组首地址设置二维数组首地址设置精度e(precision)设置系数矩阵的阶数N设置增广矩阵的各值设置初始向量设置松弛因子w设置两解向量的差的范数x_0[i]设置最大迭代次数并取到MAX中设置k记录迭代次数初值是0Temp=temp+a[i][j]*x_k[j]Temp=temp+a[i][j]*x_0[j]X_k[i]=(x_k[i]-temp)/a[i][j]X_k[i]=(1-w)*x_0[i]+w*x_k[i]X_0[i]=x_k[i]-x_0[i]YMatrix_category(x_0,n)<precisionNY X_0[i]=x_k[i]I=i+1K=k+1NK<max实验名称: 松弛法实验解题小组成员(班级:09医软(1)班):姚飞 :09713047 参与程序的编写闫化晴 :09713046 参与搜集资料与编写程序余雷 :09713049 参与搜集资料与后期运行调试张珊 :09713051 参与程序的编写实验内容:二.SOR 迭代法理论:松弛法是 Gauss -Seidel 迭代 迭代法的一种加速方法.若记△X = X (K+1) - X (K) = LX (K+1) + UX (K) + f - X (K)则X (K+1) = X (K) + △X ,这样X (K+1) 可以看作是 X (K)加上修正项 △X 而得到.若在修正项△X 前面添加一个因子ω= 1,就是Gauss -Seidel 迭代.通过选择ω可使迭代法收敛的更快.松弛法简称SOR 方法,它的计算格式为:(1)()()()111122111(1)()(1)()()222211233222(1)()(1)()1111(1)(),(1)(),(1)(),k k k k n n k k k k k n n k k k k n n n n nn n nn x x b a x a x a x x b a x a x a x a x x b a x a x a ωωωωωω+++++--=-+---=-+----=-+---这里ω称为松弛因子.当ω< 1时称为低松弛迭代,当1 < ω <2时称为超松弛迭代.实验素材及结果:三、SOR 迭代法例1、用SOR 迭代法求解线性方程组:⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----------74.012.018.168.072.012.006.016.012.001.103.014.006.003.088.001.016.014.001.076.04321x x x x取初始点T x )0,0,0,0()0(=,松弛因子05.1=ω,精度要求610-=ε.解 :根据上面程序运行结果如下:例2、用SOR迭代法求解方程组:8X1 + X2- 2X3 = 9,3X1 - 10X2 +X3 = 19,5X1 - 2X2 +20X3 = 72,取初始点X(0) = (0,0,0)T,松弛因子ω= 1,精度要求ε= 10-5.解:根据上面程序运行结果如下:。
SOR迭代法求解线性方程组
![SOR迭代法求解线性方程组](https://img.taocdn.com/s3/m/afbe231f227916888486d76b.png)
SOR迭代法求解线性方程组一实验名称:实验四:逐次超松弛迭代法。
二实验题目:求解下面的三元一次线性方程组:2x-y+2z=4;x+2y+3z=9;2x-2y-3z=-3;要求选取不同的松弛因子进行计算,并估计最优松弛因子的大小。
三实验目的:1.熟悉掌握逐次超松值迭代法的基本原理和基本方法。
2.学会用逐次超松弛迭代法解简单的方程组。
3.选取不同的w值(0<w<2)进行试探性的计算,从中摸索出近似的最佳松弛因子。
四基础理论:超松弛迭代法以及所涉及的主要算法为:Xi^(k+1)←(1-w)*Xi^(k)+w*Xi的共轭的(k+1)次幂。
五实验环境:Visual C++6.0。
六实验过程:1. 在程序中输入不同的数据时,会得到不同的结果。
2.大于1的时候的松弛因子,被称作超松弛法。
小于则被称做低松弛法。
由于松弛因子对方程组的收敛速度影响很大,所以在一定的误差范围内,选择不同的松弛因子时,迭代次数也会不同。
3. 按照实验题目中的数据输入时,比较结果当w=0.6时,会出现下面的结果:当w=0.7时得当w=0.8时得当w=0.9时,会出现下面的结果当w=1.0时得七结果分析:当在一定的误差范围内,有以上运行结果可以得出答案,最优松弛因子的范围为0.8。
八逐次超松弛迭代法程序代码:#include<iostream.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void SOR(double w, double a[3][3], double b[3], double x[3], double esp) {double t[3];int flag=0;int n=0;while(!flag){flag=1;n++;t[0]=x[0]; t[1]=x[1]; t[2]=x[2];for(int i=0;i<3;i++){double m=b[i];for(int j=0;j<3;j++){m-=(a[i][j]*x[j]);}x[i]=x[i]+w*m/a[i][i];}for(int k=0;k<3;k++){if(fabs(x[k]-t[k])>=esp){flag=0;break;}}}printf("%d\n",n);}void main(){double a[3][3];double b[3];double x[3];double w,esp;a[0][0]=2; a[0][1]=-1; a[0][2]=2;a[1][0]=1; a[1][1]=2; a[1][2]=3;a[2][0]=2; a[2][1]=-2; a[2][2]=-3;b[0]=4; b[1]=9; b[2]=-3;x[0]= x[1]= x[2]=0;w=0.6;esp=0.0001;SOR(w,a,b,x,esp);for(int i=0;i<3;i++)printf("%f\n",x[i]);}。
sor方法
![sor方法](https://img.taocdn.com/s3/m/587d2df7d4bbfd0a79563c1ec5da50e2524dd1a1.png)
sor方法
SOR方法是一种迭代数值解法,主要被用于求解线性系统Ax=b,其中A是系数矩阵,b是右端向量。
SOR方法的全称为"Successive Over-Relaxation Method",意为迭代超松弛法。
在使用SOR方法求解线性方程组时,首先需要将系数矩阵A分解为L、D和U 三个部分,其中L是A的严格下三角矩阵,D是A的对角线矩阵,U是A的严格上三角矩阵。
同时,SOR方法还需要一个松弛因子w。
SOR方法的迭代公式为:
x(k+1) = (1-w)x(k) + w(D-wL)^(-1)(b-Ux(k))
其中x(k)表示第k次迭代求得的解向量,x(k+1)表示x(k)的下一次迭代,^(−1)表示逆矩阵。
可以发现,SOR方法是基于Gauss-Seidel方法的改进,它在每一次迭代中添加了一个松弛因子w,从而使得解向量的迭代更快、更稳定。
在实际应用中,我们需要选择一个合适的松弛因子w,以使得SOR方法能够收敛并且收敛速度较快。
一般来说,选择一个小于1的w能够保证SOR方法的收敛性,而选择一个大于1的w能够加快SOR方法的收敛速度。
需要注意的是,SOR方法只能够求解特定条件下的线性方程组,如系数矩阵为对称正定矩阵、对角占优矩阵等。
当系数矩阵不满足这些条件时,SOR方法可能出现发散的情况。
总的来说,SOR方法是一种简单而有效的数值解法,被广泛应用于工程计算等领域。
在使用时,需要根据具体问题选择合适的松弛因子w,并且注意其收敛性和收敛速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、数值求解如下正方形域上的Poisson 方程边值问二、2222(,)2,0,1(0,)(1,)(1),01(,0)(,1)0,01u u f x y x y x y u y u y y y y u x u x x ⎧⎛⎫∂∂-+==<<⎪ ⎪∂∂⎪⎝⎭⎨==-≤≤⎪⎪==≤≤⎩二、用椭圆型第一边值问题的五点差分格式得到线性方程组为2,1,1,,1,10,1,,0,141,?,?,?,?0,1i j i j i j i j i j ijj N j i i N u u u u u h f i j Nu u u u i j N -+-+++----=≤≤====≤≤+,写成矩阵形式Au=f 。
其中 三、基本原理程序步骤:所有的步骤基本一致 1. 设置u ,n ,并给u ,n 赋初值; 2. While 语句循环,到的6步 3. Up 我第K 次迭代的值; 4. 分别进行计算,sum=0; 例如:Jacobi :sun= sum+A(i,j)*Ub; SOR 和Gauss_Seidel= sum+A(i,j)*u; 各自进行相应的下不运算。
5. 计算|Up-u|<ep 的绝对值,判断是否停机 6. 如果小于规定误差,迭代终止; 7. 输出结果u 和迭代次数k8. 在块的迭代中调用了追赶法的求解子程序zg ,在SOR 设计了A 得自动生成子程序creat_matix.1122N N v b v b u f v b ⎛⎫⎛⎫ ⎪ ⎪ ⎪⎪== ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭4114114ii A -⎛⎫ ⎪- ⎪= ⎪- ⎪-⎝⎭ 11,12,1,121,22,2,21,2,,2211,12,1,121,22,2,221,2,,(,,...,),(,,...,),......,(,,...,)(,,...,)?,(,,...,)?,......,(,,...,)?1,999,0.10.011T T N N TN N N N N T T N N T N N N N N v u u u v u u u v u u u b h f f f b h f f f b h f f f h N h N ====+=+=+===+取或则或,2,,1,2,...,i j f i j N==1122NN A I I A A I IA -⎛⎫ ⎪-⎪= ⎪- ⎪-⎝⎭四、编写求解线性方程组Au=f的算法程序,用下列方法编程计算,并比较计算速度。
1.用Jacobi迭代法求解线性方程组Au=f。
function [u,k]=Jacobi(n,ep,it_max)%JACOBI迭代法求Au=f;%n迭代次数;%ep为精度要求;% it_max为最大迭代次数;% u为方程组的解;% k为迭代次数;h=1/(n+1);f(2:n+1,2:n+1)=h*h*2;%给f赋初值u=zeros(n+2,n+2);v=zeros(n+2,n+2);k=1;%给u赋初值for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);end%开始迭代while k<=it_maxv=u;for i=2:n+1for j=2:n+1u(i,j)=(v(i-1,j)+v(i+1,j)+v(i,j-1)+v(i,j+1)+f(i,j))/4;endendif max(abs(u-v))<epbreak;endk=k+1;end2.用块Jacobi迭代法求解线性方程组Au=f。
function x=zg(a,b,c,d)%求解三对角方程的追赶法n=length(b);u(1)=b(1);y(1)=d(1);for i=2:n l(i)=a(i)/u(i-1);u(i)=b(i)-l(i)*c(i-1);y(i)=d(i)-l(i)*y(i-1); % 追赶法求解之追过程求解Ly=dendx(n)=y(n)/u(n); % 追赶法求解之赶过程求解Uz=yfor m=n-1:-1:1if u(m)==0 ,D=0,break; endx(m)=(y(m)-c(m)*x(m+1))/u(m);endfunction [u,k]=Jacobi_block(n,ep,it_max)% 用块jacobi迭代法求解线性方程组A*u=f% u: 方程组的解;k: 迭代次数;n: 非边界点数;% a: 方程组系数矩阵的下对角线元素;b: 方程组系数矩阵的主对角线元素;% c: 方程组系数矩阵的上对角线元素;d: 追赶法所求方程的右端向量;% ep: 允许误差界; %it_max:迭代的最大次数;% function x=zg(a,b,c,d) 子函数追赶法求解;h=1/(n+1);f(2:n+1,2:n+1)=h*h*2;a=-1*ones(1,n); b=4*ones(1,n);c=-1*ones(1,n);k=1;u=zeros(n+2,n+2);%给u赋初值for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);end%开始迭代while k<=it_maxUb=u;for j=2:n+1d(1:n)=f(2:n+1,j)+Ub(2:n+1,j-1)+Ub(2:n+1,j+1) ;x=zg(a,b,c,d); % 调用子函数追赶法求解u(2:n+1,j)=x';endif max(abs(Ub-u))<epbreak;endk=k+1;end3.用SOR迭代法求解线性方程组Au=f,用试算法确定最佳松弛因子。
function [u,k]=SOR(n,ep,w,it_max)%SOR迭代法%n迭代次数%ep为精度要求% it_max为最大迭代次数% u为方程组的解% k为迭代次数%w为松弛因子h=1/(n+1);f(2:n+1,2:n+1)=h*h*2;u=zeros(n+2,n+2);k=1;for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);endwhile k<=it_maxuk=u;%用于存放的k次迭代的值for i=2:n+1for j=2:n+1u(i,j)=w*(-4*u(i,j)+u(i-1,j)+u(i+1,j)+u(i,j-1)+u(i,j+1)+f(i,j))/4;u(i,j)=u(i,j)+uk(i,j);endendif max(abs(uk-u))<epbreak;endk=k+1;end4.用块SOR迭代法求解线性方程组Au=f,用试算法确定最佳松弛因子。
function [AA,A]=creat_matrix(n)%自动的生成矩阵AA=zeros((n)^2,(n)^2);%定义A的对角的对成NXN的方阵AA=4*eye(n);for i=1:nfor j=1:nif abs(i-j)==1AA(i,j)=1;endendendAB=eye(n);%安矩阵的块给A赋值for k=1:nfor i=1:nfor j=1:nA((i+(k-1)*n),(j+(k-1)*n))=AA(i,j);endendendfor k=1:nfor i=1:nfor j=1:nA((i+k*n),(j+(k-1)*n))=AB(i,j);A((i+(k-1)*n),(j+k*n))=AB(i,j);endendendfunction [u,k]=SOR_block(n,w,ep,it_max)% 用块SOR迭代法求解线性方程组A*u=f% u: 方程组的解;k: 迭代次数;n: 非边界点数;% ep: 允许误差界;%it_max:迭代的最大次数;%A=creat-matrix(n),为创建A矩阵的子函数;[AA,A]=creat_matrix(n); %调用子函数;h=1/(n+1);k=1;f(2:n+1,2:n+1)=h*h*2;u=zeros(n+2,n+2);for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);endwhile k<=it_maxuk=u;er=0;for i=1:nsum=zeros(n,1);for j=1:nsum=sum+A((((i-1)*n+1):i*n),(((j-1)*n+1):j*n))*u(2:n+1,j+1);endu(2:n+1,i+1)=uk(2:n+1,i+1)+w*inv(AA)*(f(2:n+1,i+1)-sum);er=er+norm(uk(:,i+1)-u(:,i+1),1);endif max(abs(er/n^2))<epbreak;endk=k+1;end5.用Gauss-Seidel迭代法求解线性方程组Au=f。
function [u,k]=Gauss_Seidel(n,ep,it_max)%G--s迭代法%n迭代次数%ep为精度要求% it_max为最大迭代次数% u为方程组的解% k为迭代次数h=1/(n+1);f(2:n+1,2:n+1)=h*h*2;u=zeros(n+2,n+2);k=1;for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);endwhile k<=it_maxuk=u;%用于存放的k次迭代的值for i=2:n+1for j=2:n+1u(i,j)=(u(i-1,j)+u(i+1,j)+u(i,j-1)+u(i,j+1)+f(i,j))/4;%用于存放的k+1次迭代的值endendif max(abs(u-uk))<epbreak;endk=k+1;end6.用块Gauss-Seidel迭代法求解线性方程组Au=f。
function [u,k]=Gauss_Seidel_block(n,ep,it_max)% 用块Gauss-seidel迭代法求解线性方程组A*u=f% u: 方程组的解;k: 迭代次数;n: 非边界点数;% a: 方程组系数矩阵的下对角线元素;b: 方程组系数矩阵的主对角线元素;% c: 方程组系数矩阵的上对角线元素;d: 追赶法所求方程的右端向量;% ep: 允许误差界; %it_max:迭代的最大次数;% function x=zg(a,b,c,d) 子函数追赶法求解;h=1/(n+1);f(2:n+1,2:n+1)=h*h*2;a=-1*ones(1,n); b=4*ones(1,n);c=-1*ones(1,n);k=1;u=zeros(n+2,n+2);for j=2:n+1u(1,j)=(j-1)*h*(1-(j-1)*h);u(n+2,j)=(j-1)*h*(1-(j-1)*h);end% for j=2:n+1% f(2,j)=h*h+(j-1)*h*(1-(j-1)*h);% f(n+1,j)=h*h+(j-1)*h*(1-(j-1)*h);% endwhile k<=it_maxUb=u;for j=2:n+1d(1:n)=f(2:n+1,j)+u(2:n+1,j-1)+u(2:n+1,j+1) ;x=zg(a,b,c,d); % 用追赶法求解u(2:n+1,j)=x';endif max(abs(Ub-u))<epbreak;endk=k+1;end五、各种算法的实验结果对比在MA TLAB中输入n=9; ep=0.000000001; it_max=1000; w=1.8;1)[u,k]=Jacobi(n,ep,it_max) 回车u =0 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 00 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 0.2100 0.1600 0.0900 0 k = 332tic;[u,k]= (n,ep,it_max);toc;Elapsed time is 0.011470 seconds.2)[u,k]=Gauss_Seidel(n,ep,it_max) 回车k = 174>> tic;[u,k]= (n,ep,it_max);toc;Elapsed time is 0.006760 seconds.3)[u,k]= (n,ep,w,it_max) 回车k =91>> tic;[u,k]=SOR(n,w,ep,it_max);toc;Elapsed time is 0.000497 seconds.把松弛系数w调整为0.8,1.0,1.1, 1,7,1.8发现;迭代次数在w=1。