Source code for reflame.utils.expand_util

#!/usr/bin/env python
# Created by "Thieu" at 11:01, 13/09/2023 ----------%
#       Email: nguyenthieu2102@gmail.com            %                                                    
#       Github: https://github.com/thieu1995        %                         
# --------------------------------------------------%

import numpy as np


[docs]def expand_chebyshev(x, n_funcs=5): x1 = x x2 = 2*x**2 - 1 x3 = 4*x**3 - 3*x x4 = 8*x**4 - 8*x**2 + 1 x5 = 16*x**5 - 20*x**3 + 5*x x6 = 32*x**6 - 48*x**4 + 18*x**2 - 1 x7 = 64*x**7 - 112*x**5 + 56*x**3 - 7*x x8 = 128*x**8 - 256*x**6 + 160*x**4 - 32*x**2 + 1 x9 = 256*x**9 - 576*x**7 + 432*x**5 - 120*x**3 + 9*x x10 = 512*x**10 - 1280*x**8 + 1120*x**6 - 400*x**4 + 50*x**2 - 1 my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_legendre(x, n_funcs=5): x1 = x x2 = 0.5 * (3 * x**2 - 1) x3 = 0.5 * (5 * x**3 - 3*x) x4 = 0.125 * (35 * x**4 - 30 * x**2 + 3) x5 = 0.125 * (63 * x**5 - 70 * x**3 + 15*x) x6 = 0.0625 * (231*x**6 - 315*x**4 + 105*x**2 - 5) x7 = 0.0625 * (429*x**7 - 693*x**5 + 315*x**3 - 35*x) x8 = 1./128 * (6435*x**8 - 12012*x**6 + 6930*x**4 - 1260*x**2 + 35) x9 = 1./128 * (12155*x**9 - 25740*x**7 + 18018*x**5 - 4620*x**3 + 315*x) x10 = 1./256 * (46189*x**10 - 10939*x**8 + 90090*x**6 - 30030*x**4 + 3465*x**2 - 63) my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_gegenbauer(x, n_funcs=5, a=1.): if a <= 0.5: a = 1. x1 = 2*a*x x2 = (4*a**2 - 1)*x**2 - 2*a x3 = (8*a**3 - 4*a)*x**3 - (4*a**2 - 2*a)*x x4 = (16*a**4 - 12*a**2 + 1)*x**4 - (12*a**3 - 6*a)*x**2 + 2*a**2 - 1 x5 = (32*a**5 - 32*a**3 + 6*a)*x**5 - (32*a**4 - 20*a**2 + 2)*x**3 + (6*a**3 - 3*a)*x x6 = (64*a**6 - 80*a**4 + 24*a**2 - 1)*x**6 - (80*a**5 - 60*a**3 + 10*a)*x**4 + (24*a**4 - 12*a**2 + 2)*x**2 - 2*a**2 + 1 x7 = (128*a**7 - 192*a**5 + 80*a**3 - 8*a)*x**7 - (192*a**6 - 140*a**4 + 30*a**2 - 2)*x**5 + (80*a**5 - 40*a**3 + 5*a)*x**3 - (8*a**4 - 4*a**2 + 2*a)*x x8 = (256*a**8 - 448*a**6 + 240*a**4 - 40*a**2 + 1)*x**8 - (448*a**7 - 336*a**5 + 70*a**3 - 4*a)*x**6 + \ (240*a**6 - 120*a**4 + 15*a**2 - 3)*x**4 - (40*a**5 - 20*a**3 + 3*a)*x**2 + 2*a**2 - 1 x9 = (512*a**9 - 1024*a**7 + 672*a**5 - 160*a**3 + 10*a)*x**9 - (1024*a**8 - 840*a**6 + 180*a**4 - 10*a**2)*x**7 + \ (672*a**7 - 336*a**5 + 42*a**3 - 5*a)*x**5 - (160*a**6 - 80*a**4 + 10*a**2 - 4*a)*x**5 + (10*a**5 - 5*a**3 + a)*x x10 = (1024*a**10 - 2304*a**8 + 1792*a**6 - 560*a**4 + 56*a**2 - 1)*x**10 - (2304*a**9 - 1848*a**7 + 420*a**5 - 28*a**3)*x**8 + \ (1792*a**8 - 896*a**6 + 112*a**4 - 28*a**2 + 2)*x**6 - (560*a**7 - 280*a**5 + 42*a**3 - 6*a)*x**4 + \ (56*a**6 - 28*a**4 + 7*a**2 - 4*a)*x**2 + 2*a**2 - 1 my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_laguerre(x, n_funcs=5): x1 = 1 - x x2 = 1 - 2*x + x**2/2 x3 = 1 - 3*x + 3*x**2/2 - x**3/6 x4 = 1 - 4*x + 6*x**2/2 - 4*x**3/6 + x**4/24 x5 = 1 - 5*x + 10*x**2/2 - 10*x**3/6 + 5*x**4/24 - x**5/120 x6 = 1 - 6*x + 15*x**2/2 - 20*x**3/6 + 15*x**4/24 - 6*x**5/120 + x**6/720 x7 = 1 - 7*x + 21*x**2/2 - 35*x**3/6 + 35*x**4/24 - 21*x**5/120 + 7*x**6/720 - x**7/5040 x8 = 1 - 8*x + 28*x**2/2 - 56*x**3/6 + 70*x**4/24 - 56*x**5/120 + 28*x**6/720 - 8*x**7/5040 + x**8/40320 x9 = 1 - 9*x + 36*x**2/2 - 84*x**3/6 + 126*x**4/24 - 126*x**5/120 + 84*x**6/720 - 36*x**7/5040 + 9*x**8/40320 + x**9/362880 x10 = 1 - 10*x + 45*x**2/2 - 120*x**3/6 + 210*x**4/24 - 252*x**5/120 + 210*x**6/720 - 120*x**7/5040 + 45*x**8/40320 + 10*x**9/362880 + x**10/3628800 my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_hermite(x, n_funcs=5): x1 = x x2 = x**2 - 1 x3 = x**3 - 3*x x4 = x**4 - 6*x**2 + 3 x5 = x**5 - 10*x**3 + 15*x x6 = x**6 - 15*x**4 + 45*x**2 - 15 x7 = x**7 - 21*x**5 + 105*x**3 - 105*x x8 = x**8 - 28*x**6 + 210*x**4 - 420*x**2 + 105 x9 = x**9 - 36*x**7 + 378*x**5 - 1260*x**3 + 945*x x10 = x**10 - 45*x**8 + 630*x**6 - 3150*x**4 + 4725*x**2 - 945 my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_power(x, n_funcs=5): x1 = x x2 = x1 + x**2 x3 = x2 + x**3 x4 = x3 + x**4 x5 = x4 + x**5 x6 = x5 + x**6 x7 = x6 + x**7 x8 = x7 + x**8 x9 = x8 + x**9 x10 = x9 + x**10 my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)
[docs]def expand_trigonometric(x, n_funcs=5, a0=1.): x1 = a0/2 + np.cos(x) x2 = x1 + np.sin(x) x3 = x2 + np.cos(2*x) x4 = x3 + np.sin(2*x) x5 = x4 + np.cos(3*x) x6 = x5 + np.sin(3*x) x7 = x6 + np.cos(4*x) x8 = x7 + np.sin(4*x) x9 = x8 + np.cos(5*x) x10 = x9 + np.sin(5*x) my_list = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] return np.concatenate(my_list[:n_funcs], axis=1)