Update BlockRIP
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
function pt = block_phase_transition(N, M)
|
||||
tau_min = 0;
|
||||
tau_max = 10;
|
||||
tau_interval = 0.05;
|
||||
tau_range = tau_min:tau_interval:tau_max;
|
||||
|
||||
K_min = 1;
|
||||
K_max = 25;
|
||||
K_range = K_min:K_max;
|
||||
|
||||
pt = zeros(25, 1);
|
||||
|
||||
cache_filename = "I.mat";
|
||||
|
||||
if exist(cache_filename, "file")
|
||||
load(cache_filename);
|
||||
else
|
||||
I = zeros(length(tau_range), 0);
|
||||
|
||||
for tau_idx = 1:length(tau_range)
|
||||
tau = tau_range(tau_idx);
|
||||
I(tau_idx) = calc_block_integral(tau, 4);
|
||||
end
|
||||
save I.mat
|
||||
end
|
||||
|
||||
|
||||
for K_idx = 1:length(K_range)
|
||||
K = K_range(K_idx);
|
||||
f_set = zeros(length(tau_range), 1);
|
||||
|
||||
for tau_idx = 1:length(tau_range)
|
||||
tau = tau_range(tau_idx);
|
||||
f_set(tau_idx) = 1/2 * (K * (2 * M + tau ^ 2) + (N - K) * I(tau_idx));
|
||||
end
|
||||
|
||||
pt(K_idx) = min(f_set);
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,40 @@
|
||||
function pt = block_phase_transition_0()
|
||||
tau_min = 0;
|
||||
tau_max = 100;
|
||||
tau_interval = 0.1;
|
||||
tau_range = tau_min:tau_interval:tau_max;
|
||||
|
||||
s_b_min = 1;
|
||||
s_b_max = 25;
|
||||
s_b_range = s_b_min:s_b_max;
|
||||
|
||||
pt = zeros(25, 1);
|
||||
|
||||
cache_filename = "I.mat";
|
||||
|
||||
if exist(cache_filename, "file")
|
||||
load(cache_filename);
|
||||
else
|
||||
I = zeros(length(tau_range), 0);
|
||||
|
||||
for tau_idx = 1:length(tau_range)
|
||||
tau = tau_range(tau_idx);
|
||||
I(tau_idx) = calc_block_integral(tau, 4);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
save I.mat
|
||||
|
||||
for s_b_idx = 1:length(s_b_range)
|
||||
s_b = s_b_range(s_b_idx);
|
||||
f_set = zeros(length(tau_range), 1);
|
||||
|
||||
for tau_idx = 1:length(tau_range)
|
||||
tau = tau_range(tau_idx);
|
||||
f_set(tau_idx) = s_b * (1 + tau ^ 2) + (100 - s_b) * I(tau_idx);
|
||||
end
|
||||
|
||||
pt(s_b_idx) = min(f_set);
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,20 @@
|
||||
function pt = block_phase_transition_2(N, M)
|
||||
K_min = 1;
|
||||
K_max = 25;
|
||||
K_range = K_min:K_max;
|
||||
pt = zeros(25, 1);
|
||||
d = N;
|
||||
m = M;
|
||||
|
||||
for K_idx = 1:length(K_range)
|
||||
K = K_range(K_idx);
|
||||
s = K;
|
||||
syms t;
|
||||
syms u;
|
||||
f = s*(m+t^2)+(d-s)*int((u-t)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t,inf);
|
||||
g = diff(f,t);
|
||||
t1 = solve(g);
|
||||
n = s*(m+t1^2)+(d-s)*int((u-t1)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t1,inf);
|
||||
pt(K_idx) = n;
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
function I = calc_block_integral(tau, m)
|
||||
|
||||
if (~exist('m', 'var'))
|
||||
m = 1;
|
||||
end
|
||||
|
||||
if tau < 0
|
||||
I = 0;
|
||||
else
|
||||
syms x f;
|
||||
f = (x - tau) ^ 2 * exp(-x ^ 2/2) * x ^ (m - 1) / (2 ^ (m/2 - 1) * gamma(m/2));
|
||||
I = double(int(f, [tau, +inf]));
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,52 @@
|
||||
clc;
|
||||
clear;
|
||||
|
||||
% epi = 0;
|
||||
% epi = 0.1;
|
||||
% epi = 0.5;
|
||||
epi = 1;
|
||||
CONTOURF = false;
|
||||
|
||||
filename = strcat("FAR_block_sparsity_phase_epi_", string(epi), ".mat");
|
||||
load(filename);
|
||||
|
||||
figure;
|
||||
x_range = 1:size(result, 2);
|
||||
y_range = 1:size(result, 1);
|
||||
|
||||
if CONTOURF
|
||||
handler = contourf(x_range, y_range, result);
|
||||
else
|
||||
handler = pcolor(x_range, y_range, result);
|
||||
shading interp;
|
||||
colorbar;
|
||||
xlim([1, size(result, 2)]);
|
||||
ylim([1, size(result, 1)]);
|
||||
box on;
|
||||
end
|
||||
|
||||
ax = gca;
|
||||
grid(ax, 'on');
|
||||
set(ax, 'Visible', 'on');
|
||||
|
||||
pt = block_phase_transition_2(128, 4);
|
||||
l = line(1:size(pt), pt);
|
||||
l.Color = "w";
|
||||
l.LineWidth = 5;
|
||||
|
||||
lgd = legend("", "Theoretical curve");
|
||||
set(lgd, 'Location', 'southeast');
|
||||
set(lgd, 'TextColor', 'white');
|
||||
set(lgd, 'Box', 'off');
|
||||
set(lgd, 'Color', 'none');
|
||||
|
||||
xlabel("Number of targets ($K$)", 'Interpreter', 'latex');
|
||||
ylabel("Number of measurement ($n$)", 'Interpreter', 'latex');
|
||||
|
||||
% ax.XDisplayLabels = nan(size(ax.XDisplayData));
|
||||
% ax.YDisplayLabels = nan(size(ax.YDisplayData));
|
||||
% ax.ColorbarVisible = 'on';
|
||||
% ax.GridVisible = 'off';
|
||||
% ax.Colormap = parula(100);
|
||||
|
||||
grid on;
|
||||
@@ -0,0 +1,8 @@
|
||||
function n = theoretic(m,s,d)
|
||||
syms t;
|
||||
syms u;
|
||||
f = s*(m+t^2)+(d-s)*int((u-t)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t,inf);
|
||||
g = diff(f,t);
|
||||
t1 = solve(g);
|
||||
n = s*(m+t1^2)+(d-s)*int((u-t1)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t1,inf);
|
||||
end
|
||||
Reference in New Issue
Block a user