#!/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)