COMPUTE ANALYTICITY DOMAIN

COMPUTE ANALYTICITY DOMAIN

function [rho] = compute_analyticity_domain(obj,appr_order)
        

This function computes the roots of the function a(rho) and returns the radius of convergence as computed at approximation order appr_order. Detailed information in Ponsioen, Pedergnana & Haller, 2019 and sources given therein.

[~,R_0] = obj.compute_whisker(appr_order);

% Define colormap - grey shades increasing in darkness with higher order approximations.
color = flip(gray(appr_order-floor(appr_order/2)));

run_idx = 1;
for order = floor(appr_order/2):appr_order
    p = zeros(1,1+order);
    for j = 1:order
        if any(any(R_0(j).coeffs))
            p(j+1) =   real(nonzeros(R_0(j).coeffs(1,:)));
        end
    end

    % Compute roots
    p_roots = roots(flip(p));

    % Create plot
    if order < appr_order
        plot(p_roots, 'm.','LineWidth',2,'color',color(run_idx,:),'MarkerSize',10,'HandleVisibility','off');
    else
        plot(p_roots, 'm.','LineWidth',2,'DisplayName','Roots of $$a(\rho)$$','color','m','MarkerSize',10);

    end
    hold on;
    run_idx = run_idx+1;
end

title("Approximation order " + appr_order, 'Fontsize',20);
legend('show','Fontsize',20)
ylabel('Imaginary part','Fontsize',20);xlabel('Real part','Fontsize',20);
        

Now we determine the domain of analyticity as given by mean of the roots on the circle approximating radius of convergence.

We assume there are more non persistent zeros that approximate the radius of convergence than spurious zeros -> therefore the median distance of all roots will be bigger than the distance of the non spurious zero that is furthest away from the origin.

% Take the median distance from origin of all roots
rho_mean = median(abs(p_roots));

% Take the mean of all the roots that have bigger distance from zero than
% the median distance
rho = mean(abs(p_roots(abs(p_roots)>rho_mean)));


if ~isnan(rho)
    xlim([-1.5*rho 1.5*rho])
    ylim([-1.5*rho 1.5*rho])
end

hold off;
        
end