线性方程的迭代求法

迭代法是求解线性方程组的一种重要的方法,在工程中应用很广泛。

雅克比(Jacobi)迭代法

设有线性方程组:


迭代求解式

其中:D为线性方程组系数矩阵对角元素组成的矩阵;
迭代精度

注意
使用迭代法求解时需要注意迭代的收敛性。当线性方程组中的系数矩阵A为严格对角优势矩阵,即A的每一行对角元素的绝对值都大于同行其他元素的绝对值之和,此时可证明Jacobi迭代法是收敛的。
MATLAB 函数实现

function [ vecx ] = Jacobi( matA,vecb,e)
%Jacobi Summary of this function goes here
%Function:雅克比迭代法求线性方程的解
%初始向量[0,0,0,0]', x(k+1) = x(k) + inv(D) *  (b - A * x(k))
%误差控制: ||x(k+1)-x(k)|| <= e * ||x(k)||, 本例使用二范数
%Input: 
%   matA:线性系统的系数矩阵 n x n 阶
%   vecb: 线性系统的常数向量
%   e   : 精度要求
% Output:
%   vecx: 线性系统的近似解

D = diag(diag(matA));
invertD = inv(D);
prex = [0,0,0,0]'; 
while 1
    r = vecb - matA * prex;
    x = prex + invertD * r;
    if(norm(x-prex)< e)
        break;
    end
    prex = x;
end
vecx = x;   
end

共轭梯度法(Conjugate Gradient method)

共轭梯度法是求解线性方程组的一种有效的迭代解法,可以看做是由通常称为最速下降法的梯度法发展而来。下面先介绍梯度法。

梯度法

上一节的线性方程组对应二次函数



的极值条件,用梯度法求解函数f(x)的极值问题可按以下步骤:

  1. 设x的初值x0
  2. 求f(x)在x0的梯度为


  3. 沿梯度的负方向,即



    进行一维搜索,寻找f(x)在此方向的最小值。步骤是:

    (a) 设

(b)将

x1带入

MATLAB 函数实现

function [ x ] = CG( A,b,e )
%共轭梯度法(Conjugate Gradient Method )
%设置x初始量x0 = prex
x0 = [0,0,0,0]';
prex = x0;
r0 = b - A * prex;
p0 = r0;
prer = r0;
prep = p0;
%进行如下迭代
while 1
    alpha = prer'* prer / (prep'* A * prep);
    x = prex + alpha * prep;
    r = prer - alpha * A * prep;
    beta = r'*r/(prer'*prer);
    p = r + beta * prep;
    if(norm(x-prex)

你可能感兴趣的:(线性方程的迭代求法)