%初值设定 N = 64; %最大行数 D = 32; %块数 m = 4; %块的列数 d = 2; %块内rank/维度 result = zeros(N,D); %保留结果 %按行数循环 for n = 1:N A = zeros(n,m*D); B = zeros(n,d*D); %按稀疏度循环 for k = 1:D %50次重复实验 for j = 1:50 re_err = 0; for i = 0:D-1 %生成高斯基集 set = randn(n,d); %生成随机的模为1的向量,与基集相乘得到块不满秩的高斯矩阵 theta = rand(1,4)*2*pi; temp = [sin(theta);cos(theta)]; A(:,m*i+1:m*i+m) = set*temp; end x = zeros(m,D); col = randperm(D,k); x(:,col) = randn(m,k); y = A * x(:); %凸优化利用l21范数求解恢复问题 cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(x_e(:,i)); end minimize(norm21) subject to A*x_e(:) == y cvx_end %得到重建效果 for i = 1:D re_err = re_err+norm(A(:,(i-1)*m+1:i*m)*(x_e(:,i)-x(:,i))); end if re_err<10e-4 result(n,k) = result(n,k)+1; end end end end save('gaussD32m4d2class.mat');