Add lyh-非满秩相变
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
%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;
|
||||
|
||||
Reference in New Issue
Block a user