本文算法描述主要来自下面书籍的3.1节。
[1] 【以色列】Michael Elad著. 曹铁勇等翻.《稀疏与冗余表示–理论及其在信号与图像处理中的应用》.国防工业出版社. 2015.
1. 算法描述
(1) 任务:近似求解( P 0 P_0 P0)问题: min x ∣ ∣ x ∣ ∣ 0 s . t . A x = b \min_{\bf x}||{\bf x}||_0\ {\rm s.t.}{\bf Ax=b} minx∣∣x∣∣0 s.t.Ax=b。
(2) 参数:给定 M × N M\times N M×N维矩阵 A \bf A A, N N N维向量 b \bf b b和误差阈值 ϵ 0 \epsilon_0 ϵ0。
(3) 初始化:初始设置 k = 0 k=0 k=0,并设置:
① 初始解: x 0 = 0 {\bf x}^0={\bf 0} x0=0;
② 初始残差: r = b \bf r=b r=b;
③ 初始解的支撑集: S 0 = s u p p o r t { x 0 } = Φ {\mathcal S}^0={\rm support}\{ {\bf x}^0\}=\varPhi S0=support{ x0}=Φ。
(4) 主要迭代:每次 k k k加1,并执行下列步骤:
① 扫描:对所有的 j j j,计算最优 z j ∗ = a j T r k − 1 / ∣ ∣ a j ∣ ∣ 2 2 z^*_j={\bf a}_j^{\rm T}{\bf r}^{k-1}/||{\bf a_j}||_2^2 zj∗=ajTrk−1/∣∣aj∣∣22,并得到误差 ϵ ( j ) = min z j ∣ ∣ a j z j ∗ − r k − 1 ∣ ∣ 2 2 \epsilon(j)=\min_{z_j}||{\bf a}_jz_j^*-{\bf r}^{k-1}||_2^2 ϵ(j)=minzj∣∣ajzj∗−rk−1∣∣22;【注1】
②更新支撑集:确定 ϵ ( j ) \epsilon(j) ϵ(j)取最小值的点 j 0 j_0 j0, ∀ j ∈ S k − 1 \forall j\in {\mathcal S}^{k-1} ∀j∈Sk−1, ϵ ( j 0 ) < ϵ ( j ) \epsilon (j_0)<\epsilon(j) ϵ(j0)<ϵ(j),并更新支撑集 S k = S k − 1 ∪ { j 0 } {\mathcal S}^k={\mathcal S}^{k-1}\cup\{j_0\} Sk=Sk−1∪{ j0};
%以上步骤对两种贪婪算法均相同,下面分不同算法描述
%OMP算法:
③ 更新临时解:在支撑集 S k = s u p p o r t { x k } {\mathcal S}^k={\rm support}\{ {\bf x}^k\} Sk=support{ xk}条件下,计算使得 ∣ ∣ A x − b ∣ ∣ 2 2 ||{\bf Ax-b}||_2^2 ∣∣Ax−b∣∣22最小化的值 x k {\bf x}^k