Basic GMRES

Basic GMRES

概述

GMRES意思为广义最小残差法,在求解稀疏矩阵上,是一个比较有效的方法。

我们要解决的问题依旧是一个方程组求解的问题 A X = b AX=b AX=b

这个算法可以理解为 r 0 r_{0} r0 ( A r 0 , A 2 r 0 , . . . , A n − 1 ) (Ar_{0}, A^{2}r_{0},...,A^{n-1}) (Ar0,A2r0,...,An1)这组基上的线性表示(可参考Krylov子空间的内容)

该算法参考的也是一个Arnoldi过程:
在这里插入图片描述
矩阵的结构为
在这里插入图片描述
生成的 H H H也是一个上Hesenborg矩阵

我们通过如下的推导
在这里插入图片描述
可知,我们将一个求解稀疏矩阵方程组问题转化为了最小化上Hessenborg矩阵方程组的问题。

算法

在这里插入图片描述
最后关于系数 y m y_{m} ym怎么求,本文暂不考虑这个问题

matlab实现

%Basic GMRES
%Ax = b
function [V,R,H,res] = bGMRES(A,b,x0)
    %bGMRES:basic GMRES method
    %Input: x0:初值;A为mxm矩阵,b为解
    %Output: res为残差
    [m, ~] = size(A);
    R = Inf(m,m);omiga = zeros(m,m);%R为残差值,omiga为剩余向量
    H = zeros(m+1,m);V = zeros(m,m+1);%A*V=V*H
    %设定初值
    r0 = b-A*x0;
    V(:,1) = r0/norm(r0);
    for j = 1:m
        omiga(:,j) = A*V(:,j);
        for i = 1:j
            H(i,j) = omiga(:,j)'*V(:,i);
            omiga(:,j) = omiga(:,j) - H(i,j)*V(:,i);
        end
        H(j+1,j) = norm(omiga(:,j));
        R(:,j) = omiga(:,j);
        if abs(H(j+1,j)) < 1e-5
            sprintf('done')
            res = H(j+1,j);
            break;
        else
            V(:,j+1) = R(:,j)/H(j+1,j);
            res = H(j+1,j);
        end
    end
end

参考教材:《IterMethBook_2ndEd》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值