一、超松弛迭代法原理
超松弛迭代法是线性方程组求解方法之一。它是对雅可比迭代法和高斯-赛德尔迭代法的改进,其思想是通过权重参数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是正定的、对称矩阵,严格作为主对角线线性相关的模不大于其余元素模之和