同学委托写个MP算法,找了一堆资料都没找到好用的,全是OMP什么的,自己记下来以后自用
MP算法的关键就在于要归一化,matlab第一次用,搞了好久才搞定
- function a=mp(y,phi,K,iware)
- [~,N]=size(phi);
- a = zeros(N,1);
- for i = 1:N %原子归一化
- phi(:,i) = phi(:,i)/norm(phi(:,i));
- end
- v =y; %初始残差
- numIts = 0;
- iware=2*iware;
- while numIts<iware; %迭代计数
- numIts = numIts + 1;
- g=phi'*v; %计算内积
- [~,pos]=max(abs(g)); %选取最大的作为最匹配原子
- a(pos)=a(pos)+g(pos); %记录位置
- v = v -g(pos)*phi(:,pos); %更新残差
- end
- a=a/iware;
- end