Files
FAR_CS/0 - example/lyh - 非满秩相变/gauss_n32m4d2class.m
T
2024-11-11 16:33:48 +08:00

52 lines
1.2 KiB
Matlab

%初值设定
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');