Files
FAR_CS/wide vs narrow/PT curve/get_phase_transition_curve.m
T
2024-07-22 20:30:10 +08:00

48 lines
1.3 KiB
Matlab
Executable File

function [K_range, N_b, N_s] = get_phase_transition_curve(N, M, K_max)
% This function give the phase transition curve of FAR
% input: N, M: FAR parameters
% output: N_b, N_s: the phase transition curve of FAR in block case and scalar case
if nargin < 3
K_max = 25;
end
tau_min = 0;
tau_max = 15;
tau_interval = 0.05;
tau_range = tau_min:tau_interval:tau_max;
K_range = 1:K_max;
N_b = zeros(length(K_range), 1);
N_s = zeros(length(K_range), 1);
cache_filename_1 = ...
"../data/PT_curve_data/" + ...
"I_2.mat";
cache_filename_2 = ...
"../data/PT_curve_data/" + ...
"I_" + "" + string(2 * M) + ...
".mat";
I_2 = get_integral(cache_filename_1, "I_2", tau_range, 2);
I_2M = get_integral(cache_filename_2, "I_2M", tau_range, 2 * M);
for K_idx = 1:length(K_range)
K = K_range(K_idx);
f_set_1 = zeros(length(tau_range), 1);
f_set_2 = zeros(length(tau_range), 1);
for tau_idx = 1:length(tau_range)
tau = tau_range(tau_idx);
f_set_1(tau_idx) = 1/2 * (K * (2 * M + tau ^ 2) + (N - K) * I_2M(tau_idx));
f_set_2(tau_idx) = M / 2 * (K * (2 + tau ^ 2) + (N - K) * I_2(tau_idx));
end
N_b(K_idx) = min(f_set_1);
N_s(K_idx) = min(f_set_2);
end
end