zoukankan      html  css  js  c++  java
  • 压缩感知的MP算法 标签: 压缩感知稀疏表示MP算法 2016-03-19 20:41 594人阅读 评论(0)


    2.MP算法

    作为一类贪婪算法,MP算法的基本思路是在迭代中不断找寻最有测量矩阵列来逼近被表示向量,继而寻得最优的稀疏逼近,使得x与y的残差最小。对于这个算法,最直观的问题有两个:1.如何选择逼近度最高的——如何衡量逼近度,算法如何执行(比如遍历)?2.x的稀疏度由迭代次数决定,而逼近度(即最终残差)也与迭代次数有关,这是一个两难问题,如何做权衡?

    在回答以上两个问题之前,我们先给出MP算法的具体过程:


    示例代码如下:(与matlab中MP介绍时的示例相同)

    clear all
    close all
    %
    A = [1 0.5 -1/2^0.5;
        0 (3/4)^0.5 -1/2^0.5];
    y = [1,0.5]';
    K = 3;
    [m,n] = size(A);
     
     
    % iteration
    Rf(:,1) = y;
    for k = 1:K
        
        for i = 1:n 
            ip(i) = abs(Rf(:,k)'*A(:,i));
        end
        j(k) = find(max(ip)==ip);
        Rf(:,k+1) = Rf(:,k) - Rf(:,k)'*A(:,j(k))*A(:,j(k));
        Rfnorm(k) = norm(Rf(:,k));
    end
    R = [A(:,j(1)),A(:,j(2)),A(:,j(3))];
    r1 = R(:,1);
    r2 = R(:,2);
    r3 = R(:,3);
    figure,quiver(0,0,y(1),y(2),'r');
    hold,quiver(0,0,r1(1),r1(2),'b');
    quiver(0,0,r2(1),r2(2),'b');
    quiver(0,0,r3(1),r3(2),'b');
    display(norm(Rf(:,K+1)));
    

    编程遇到的简单问题:

    1.每次迭代选择A中列向量时,为什么不需要把上次选择的去除掉?

    因为每次迭代的残差是由上次的残差减去已选择的A的列计算得到的,剩余残差(恰好衡量与已选列的差异性)在已选列向量的投影将变得很小。因此没有必要去除已选列。

    2.随机字典A的生成

    示例中未涉及这个问题,但是仿真往往需要。matlab命令式norm(a,b,c,d),产生均值a,方差b,大小c*d的随机矩阵。

    3.如何画向量?

    画箭头的命令是quiver(x,y,u,v),xy为顶点,uv为向量。


  • 相关阅读:
    ping和traceroute原理分析异同为什么不能ping通却能traceroute (转载) 规格严格
    JDBC hang on Statement 规格严格
    邮件服务返回代码含义 规格严格
    后台分析(转载) 规格严格
    Java Socket(转载) 规格严格
    编程好习惯 规格严格
    统计图表生成 规格严格
    几篇不错的博客 规格严格
    我见过的一个让我瞠目结舌的电脑高手!
    Ubuntu 下Ape转Mp3[88250原创]
  • 原文地址:https://www.cnblogs.com/helay/p/7133955.html
Copyright © 2011-2022 走看看