您的位置:

超松弛迭代法

一、超松弛迭代法原理

超松弛迭代法是线性方程组求解方法之一。它是对雅可比迭代法和高斯-赛德尔迭代法的改进,其思想是通过权重参数w将原始迭代公式进行调整,以得到更快的收敛速度。

在超松弛迭代法中,将每一次迭代的结果分成两部分:第一部分是上一次迭代的值,在第二部分中,通过一定程度的调整,在上一次迭代的基础上得到更加准确的值。

超松弛迭代法的优点是收敛速度较快,但是其需要权重参数w的选择。当w为1时,变成了高斯-赛德尔迭代法;当w为0时,变成了雅可比迭代法。

二、逐次超松弛迭代法是高斯消元法

超松弛迭代法和高斯消元法之间有一个重要的联系,即逐次超松弛迭代法与高斯消元法等效。

逐次超松弛迭代法侧重于使用低维的递归过程,而高斯消元法则适用于使用高维的数组计算。两种方法有相同的迭代次数和方程组元素的总数。

逐次超松弛迭代法采用的是一种以迭代为基础的方法,而高斯消元法是通过一系列的行变化来消元,以将线性方程组的矩阵变为一个上三角矩阵或下三角矩阵。

三、超松弛迭代法公式

对于线性方程组Ax=b,超松弛迭代法的迭代公式如下:

x_i ^(k+1)  = (1 - w) * x_i ^k + (w / a_ii)[b_i - sigma_i ^ (i-1) * x_i ^(k+1) - sigma_i ^ (i+1) * x_i ^k]

其中,x_i ^(k+1) 代表第i个未知量在第k+1次迭代中的近似值,x_i ^k 代表在第k次迭代中的近似值,a_ii 是系数矩阵A中第i行第i列元素,sigma_i ^ (i-1) 是系数矩阵A中第i行第1~i-1列的元素之和,sigma_i ^ (i+1) 是系数矩阵A中第i行i+1~n列的元素之和。

四、超松弛迭代法基本原理和特点

超松弛迭代法的基本思想是将每次迭代的结果分为两部分,上一次的近似解和本次的改进量,通过一定的调整来得到更快的收敛速度。在超松弛迭代法中,迭代次数通常比高斯消元法少很多,因此其计算效率更高。

在实际应用中,超松弛迭代法通常比高斯消元法具有更好的效率。但是需要指出的是,选择参数w是一个十分困难的问题,需要通过试验来确定最佳的w值,这使得超松弛迭代法在一些实际应用中并不可取。

五、超松弛迭代法matlab

在matlab中,可以使用“sor”函数来实现超松弛迭代法,示例代码如下:

x0 = zeros(n, 1); % 初始化近似值
w = 1.2; % 设置权重参数
maxiter = 100; % 设置最大迭代次数
tol = 1e-6; % 设置收敛误差
[x, flag, relres, iter, resvec] = sor(A, b, w, tol, maxiter, [], [], x0); % 调用“sor”函数

六、超松弛迭代法例题

如下是一个超松弛迭代法的例题,求解方程组Ax=b:

3x1 + 0.5x2 - 1.5x3 = -1
0.45x1 + 4x2 - 1.3x3 = 7
-2.8x1 - 0.2x2 + 10x3 = 8

使用超松弛迭代法求解以上方程组,可以得到解为:

x1 = -2.2496
x2 = 1.7408
x3 = 0.8912

七、超松弛迭代法优缺点

超松弛迭代法的优点是收敛速度较快,计算效率高。但是需要指出的是,该方法需要权重参数w的选择,对最终的结果有很大的影响。在实际应用中,如果w的选择不当,可能会导致算法不收敛或者收敛速度变慢,因此需要进行试验来确定最佳的w值。

八、超松弛迭代法matlab程序

function [x,flag,relres,iter,resvec]=sor(A,b,w,tol,maxit,M1,M2,x0)
%SOR    Successive Over-Relaxation Method.
%   X = SOR(A,B) attempts to solve the system of linear equations A*X = B
%   for X. The N-by-N coefficient matrix A must be symmetric and positive
%   definite. The column vector B must have length N.
%   
%   X = SOR(A,B,W) uses relaxation factor W. The default is W = 1.0.
%   
%   X = SOR(A,B,W,TOL) specifies the tolerance of the method. If TOL is []
%   then SOR uses the default, 1e-6.
%   
%   X = SOR(A,B,W,TOL,MAXIT) specifies the maximum number of iterations. 
%   If MAXIT is [] then SOR uses the default, min(N,20).
%
%   X = SOR(A,B,W,TOL,MAXIT,M) and SOR(A,B,W,TOL,MAXIT,M1,M2) use 
%   preconditioner M or M=M1*M2 and effectively solve the system inv(M)*A*X = inv(M)*B. 
%   If M is [] then a preconditioner is not used. M should be symmetric 
%   and positive definite. 
%   The LDU factorization and incomplete Cholesky factorizations are 
%   examples of possible preconditioners.
%
%   X = SOR(A,B,W,TOL,MAXIT,M1,M2,X0) specifies the initial guess. 
%   If X0 is [] then SOR uses the default, an all zero vector.
%
%   [X,FLAG] = SOR(A,B,...) also returns a convergence FLAG:
%    0 SOR converged to the desired tolerance TOL within MAXIT iterations.
%    1 SOR iterated MAXIT times but did not converge.
%    2 preconditioner M was ill-conditioned.
%
%   [X,FLAG,RELRES] = SOR(A,B,...) also returns the relative residual
%   NORM(B-A*X)/NORM(B) upon termination.
%   
%   [X,FLAG,RELRES,ITER] = SOR(A,B,...) also returns the iteration number
%   upon termination.
%   
%   [X,FLAG,RELRES,ITER,RESVEC] = SOR(A,B,...) also returns a vector of
%   the residual norms at each iteration, including NORM(B-A*X0)
%   which is Resvec(1).
%
%   Example:
%      A = delsq(numgrid('C',15)); b = sum(A,2);
%      x = sor(A,b,1.2,1e-12,300);
%      norm(A*x-b)
%
%   Class support for inputs A,B,M1,M2,X0:
%     float: double
%
%   See also BICGSTAB, CGS, GMRES, LSQR, MINRES, QMR, SYMMLQ, CGLS, PCG.

% copied from gmres.m. rewritten to call 'mtxmpy'
% Per Bergström, November 2009

if nargin<2, error('not enough input arguments.'); end

if nargin<3 || isempty(w), w=1; end
if nargin<4 || isempty(tol), tol=1e-6; end
if nargin<5 || isempty(maxit), maxit=min(size(A,1),20); end

if nargin<7 || isempty(M1), M1 = 1; end
if nargin<8 || isempty(M2), M2 = 1; end
if isempty(maxit), maxit = min(length(b),20); end

[m,n] = size(A);
if m~=n, error('matrix must be square.'); end
if ~isequal(size(b),[n,1]), error('b must be a column vector.'); end

if ~isequal(size(M1),[n,n]), error('M1 must be square with size(A).'); end
if ~isequal(size(M2),[n,n]), error('M2 must be square with size(A).'); end

if ~issymmetric(M1), error('M1 must be symmetric and positive definite.'); end
if ~issymmetric(M2), error('M2 must be symmetric and positive definite.'); end

if ~issymmetric(A), error('matrix must be symmetric and positive definite.'); end

if nargin<8 || isempty(x0), x0=zeros(n,1); end
if ~isequal(size(x0),[n,1]), error('x0 must be a column vector of length(A).'); end

resvec = zeros(maxit+1,1);
x=x0; z=zeros(n,1);
Ax=b; r=b-Ax; resvec(1)=norm(r); beta=norm(r); 
if betatol) && (relres>tol)
  z = M \ r;
  Ap = A*z;
  x = x + d.*z; r = r - d.*Ap;
  resvec(k+1)=norm(r); relres=resvec(k+1)/beta; k=k+1;
  if beta
   
  

九、超松弛迭代法收敛的充要条件

超松弛迭代法的收敛速度与权重参数w有关。收敛性的充要条件是矩阵A是正定的、对称矩阵,严格作为主对角线线性相关的模不大于其余元素模之和