《Sparse and Redundant Representations》第三章:追赶法-实验

本文提供了使用MATLAB实现的正交匹配追踪(OMP)算法和迭代重加权最小二乘(IRLS)算法代码。OMP算法用于稀疏信号恢复,通过迭代选择原子来逼近输入信号。IRLS算法则通过迭代更新权重矩阵来逼近最小p-范数解。





















---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最后,附上我用MATLAB编写的OMP算法和IRLS算法代码:

function[xx,SS,rr] = OMP(A,b,res)
% Initialization
s=size(A);
xk=zeros(s(2),1);
rk=b;
k=0;
S=[];
% Main Iteration
while norm(rk)>res
    % Sweep
    z=zeros(s(2),1);
    e=zeros(s(2),1);
    for j= 1:s(2)
        z(j)=A(:,j)'*rk./(A(:,j)'*A(:,j)); 
        e(j)=norm(A(:,j).*z(j)-rk).^2;
    end
    % Update Support
    [m,j0]=min(e); 
    S=[S,j0];
    %Update Provisional Solution
    As=A(:,S);
    xk(S)=inv(As'*As)*As'*b;
    %Update Residual
    rk=b-A*xk;
    k=k+1;
end

xx=xk;
SS=S;
rr=norm(rk);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function[xx,SS,rr] = IRLS(A,b,p,res)
s=size(A);

% Initialization
xk=ones(s(2),1);
xk_former=zeros(s(2),1);
Xk=eye(s(2));

% Main Interation
while norm(xk-xk_former)>res
    % Solve
    xk_former=xk;
    xk=Xk^2*A'*pinv(A*Xk^2*A')*b;
    %Weight Update
    Xk=diag(abs(xk.^(1-p/2)));
end
xk(find(abs(xk)<1e-6))=0;

xx=xk;
SS=find(xx~=0);
rr=norm(b-A*xx);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值