aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers/laguerre/scripts/rel_error_shifted.py
blob: f53c89b3b785f2bea65cedee458f08dd78e1cdd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
if __name__ == "__main__":
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    import scipy.special

    import gamma_approx as ga

    mpl.rcParams.update(
        {
            "mathtext.fontset": "stix",
            "font.family": "serif",
            "font.serif": "TeX Gyre Termes",
        }
    )
    n = 8  # order of Laguerre polynomial
    N = 200  # number of points in interval

    step = 1 / (N - 1)
    x = np.linspace(step, 1 - step, N + 1)
    targets = np.arange(10, 14)
    gamma = scipy.special.gamma(x)
    fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(5, 2.1))
    for target in targets:
        gamma_lag = ga.eval_laguerre_gamma(x, target=target, n=n, func="shifted")
        rel_error = np.abs(ga.calc_rel_error(gamma, gamma_lag))
        ax.semilogy(x, rel_error, label=f"$m={target}$", linewidth=3)
    gamma_lgo = ga.eval_laguerre_gamma(x, n=n, func="optimal_shifted")
    rel_error = np.abs(ga.calc_rel_error(gamma, gamma_lgo))
    ax.semilogy(x, rel_error, "m", linestyle=":", label="$m^*$", linewidth=3)
    ax.set_xlim(x[0], x[-1])
    ax.set_ylim(5e-9, 5e-8)
    ax.set_xlabel(r"$z$")
    ax.set_xticks(np.linspace(0, 1, 6))
    ax.set_xticks(np.linspace(0, 1, 11), minor=True)
    ax.grid(1, "both")
    ax.legend(ncol=1, fontsize=ga.fontsize)
    # fig.savefig(f"{ga.img_path}/rel_error_shifted.pgf")
    fig.savefig(f"{ga.img_path}/rel_error_shifted.pdf")
    # plt.show()