%function[out1,out2,out3,out4,out5,out6] = test(t,k,~) %sigma = [0,0.01, 0.5, 1, 1.5, 2]; n = 40; d = 2; D = 32; m = 4; %t = 1; k = 13; err = zeros(20,1); A = zeros(n,D*m); contri1 = zeros(n,D); contri2 = zeros(n,D); for i = 0:32-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*(i+1); end x = zeros(m,D); col = randperm(D,k); x(:,col) = randn(m,k); y = A * x(:); weight = diag(rand(D*m,1)*30); %A2 = zeros(n,D*m); %for i= 0:31 % A2(:,m*i+1:m*i+m) = A(:,m*i+1:m*i+m) * weight(i+1); %end A2 = A*weight; %凸优化利用特殊l21范数求解恢复问题 cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(A(:,(i-1)*m+1:i*m)*x_e(:,i)); end minimize(norm21) subject to A*x_e(:) == y; cvx_end re_err = 0; for i = 1:D re_err = re_err+norm(A(:,(i-1)*m+1:i*m)*(x_e(:,i)-x(:,i))); contri1(:,i) = A(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out1 = re_err; x3 = x_e; cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(A2(:,(i-1)*m+1:i*m)*x_e(:,i)); end minimize(norm21) subject to A2*x_e(:) == y; cvx_end re_err = 0; for i = 1:D re_err = re_err+norm(A2(:,(i-1)*m+1:i*m)*(x_e(:,i)-inv(weight((i-1)*m+1:i*m,(i-1)*m+1:i*m))*x(:,i))); contri2(:,i) = A2(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out2 = re_err; %err(iter) =norm(contri1-contri2,'fro'); a1 = 0; a2 = 0; for i = 1:32 a1 = a1 +norm(contri1(:,i)); a2 = a2 +norm(contri1(:,i)); end % cvx_begin % variable x_e(m,D) % norm21 = 0; % for i = 1:D % norm21 = norm21 + norm(A2(:,(i-1)*m+1:i*m)*x_e(:,i)); % end % minimize(norm21) % subject to % A2*x_e(:) == y; % cvx_end % re_err = 0; % for i = 1:D % re_err = re_err+norm(A2(:,(i-1)*m+1:i*m)*(x_e(:,i)-inv(weight((i-1)*m+1:i*m,(i-1)*m+1:i*m))*x(:,i))); % contri2(:,i) = A2(:,(i-1)*m+1:i*m)*(x_e(:,i)); % end % out2 = re_err; %% n = 40; d = 2; D = 32; m = 4; %t = 1; k = 4; A = zeros(n,D*m); contri1 = zeros(n,D); contri2 = zeros(n,D); for i = 0:32-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*(i+1); end x = zeros(m,D); col = randperm(D,k); x(:,col) = randn(m,k); y = A * x(:); A2 = A * diag(randn(D*m,1)*30); %凸优化利用特殊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 re_err = 0; for i = 1:D re_err = re_err+norm(A(:,(i-1)*m+1:i*m)*(x_e(:,i)-x(:,i))); contri1(:,i) = A(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out1 = re_err; cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(x_e(:,i)); end minimize(norm21) subject to A2*x_e(:) == y; cvx_end re_err = 0; for i = 1:D re_err = re_err+norm(A2(:,(i-1)*m+1:i*m)*(x_e(:,i)-inv(weight((i-1)*m+1:i*m,(i-1)*m+1:i*m))*x(:,i))); contri2(:,i) = A2(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out2 = re_err; %% n = 40; d = 2; D = 32; m = 4; %t = 1; k = 6; A = zeros(n,D*m); noise = 0.01; contri1 = zeros(n,D); contri2 = zeros(n,D); for i = 0:32-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*(i+1); end x = zeros(m,D); col = randperm(D,k); x(:,col) = randn(m,k); y = A * x(:) + randn(n,1)*noise; weight = diag(rand(D*m,1)*30); %A2 = zeros(n,D*m); %for i= 0:31 % A2(:,m*i+1:m*i+m) = A(:,m*i+1:m*i+m) * weight(i+1); %end A2 = A*weight; %凸优化利用特殊l21范数求解恢复问题 cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(A(:,(i-1)*m+1:i*m)*x_e(:,i)); end minimize(norm21) subject to norm(A*x_e(:) - y) <= sqrt(40)*0.01; cvx_end re_err = 0; for i = 1:D re_err = re_err+norm(A(:,(i-1)*m+1:i*m)*(x_e(:,i)-x(:,i))); contri1(:,i) = A(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out1 = re_err; cvx_begin variable x_e(m,D) norm21 = 0; for i = 1:D norm21 = norm21 + norm(A2(:,(i-1)*m+1:i*m)*x_e(:,i)); end minimize(norm21) subject to norm(A2*x_e(:) - y) <= sqrt(40)*0.01; cvx_end re_err = 0; for i = 1:D re_err = re_err+norm(A2(:,(i-1)*m+1:i*m)*(x_e(:,i)-inv(weight((i-1)*m+1:i*m,(i-1)*m+1:i*m))*x(:,i))); contri2(:,i) = A2(:,(i-1)*m+1:i*m)*(x_e(:,i)); end out2 = re_err;