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()
|