# IRLS(迭代重加权最小二乘）学习笔记

IRLS（Iterative Reweighted Least Squares）迭代重加权最小二乘

Reference:

【1】Rick Chartrand, Wotao Yin. Iteratively reweighted algorithmsfor compressive sensing[J]. 2008:3869-3872.

【2】iterative-reweighted-least-squares-12.pdf

【3】http://blog.csdn.net/hjxzb/article/details/51077309

Step1：根据(3.33)式有：(因为W为正定对角阵)

Step2:将(1)式代入(3.32)式可得：（因为对称）

Step3: (2)式对求导，并令其等于0：

1.    在看文献【1】的时候，错误理解了第三部分的第一段，以为是每次迭代都需要减少10倍，后面师兄说我理解错了，最后参考了文献【3】，将

2.    还有一个小收获，是matlab当中尽量用左除，不要用inv和右除，原因如下：

3.     P=1时，相对BP而言，IRLS的速度要慢许多~其他还未比较

IRLS 函数

functionu=IRLS(Phi,b,p)

%aim to solve nonconvex ||x||p s.t Phi*a=b 0<=p<1

%min sum(wi ui^2)  Phi*u=b

%u(n)=Qn*Phi'*inv(Phi*Qn*Phi')*b

%u(n)=1/wi=|ui(n-1)|^(2-p)

%referencence: Iteratively reweighted algorithms for compressive sensing RickChartrand

%Phi-->M*N  M<<N

%written by Palace Wangle 2017/12/25

epsilon= 1;%initial large value

u= pinv(Phi)*b;

m= norm(u);

Em=[];%储存迭代

%  for i = 1:100

while epsilon>1e-8

w=(u.^2+epsilon).^(p/2-1);

Q  =diag(1./w);

t = u;

u = (Q * Phi') *((Phi*Q*Phi') \ b);

%     u = Q * Phi' /(Phi*Q*Phi') * b;

if m<=(sqrt(epsilon)/100)  % 二范数的差改变小于sqrt(epsilon)/100

epsilon = epsilon/10;

end

m=norm(t-u);

Em = [Em;m];

end

epsilon

CS单次重构：

%%compressive sensing test

clearall

clc

M= 64;

N= 256;

K= 10;

Index_K= randperm(N);

x= zeros(N,1);

x(Index_K(1:K))= 5*randn(K,1);

Psi= eye(N);

Phi= randn(M,N);

A= Phi * Psi;

y= Phi *x;

tic

theta= IRLS(A,y,1/2);

x_r= Psi * theta;

toc

figure

plot(x_r,'k.-')

holdon

plot(x,'r')

holdoff

legend('Recovery','Original');

fprintf('\n恢复残差:');

norm(x_r-x)