File indexing completed on 2024-05-19 03:49:03
0001 /* 0002 File : nsl_sf_poly.h 0003 Project : LabPlot 0004 Description : NSL special polynomial functions 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2016 Stefan Gerlach <stefan.gerlach@uni.kn> 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef NSL_SF_POLY_H 0011 #define NSL_SF_POLY_H 0012 0013 #include <gsl/gsl_complex.h> 0014 #include <gsl/gsl_complex_math.h> 0015 #include <stdlib.h> 0016 0017 /* Chebychev T_n(x) */ 0018 double nsl_sf_poly_chebyshev_T(int n, double x); 0019 /* Chebychev U_n(x) */ 0020 double nsl_sf_poly_chebyshev_U(int n, double x); 0021 0022 /* Optimal "L"egendre Polynomials */ 0023 double nsl_sf_poly_optimal_legendre_L(int n, double x); 0024 0025 /* Bessel polynomials y_n(x) */ 0026 gsl_complex nsl_sf_poly_bessel_y(int n, gsl_complex x); 0027 /* reversed Bessel polynomials \theta_n(x) */ 0028 gsl_complex nsl_sf_poly_reversed_bessel_theta(int n, gsl_complex x); 0029 0030 /* interpolating polynomial (Lagrange) 0031 0 - zeroth order (1-point) integral (rectangle rule) 0032 1 - first order (2-point), derivative, integral and absolute area (trapezoid rule) 0033 2 - second order (3-point), derivatives and integral (Simpson's 1/3 rule) 0034 3 - third order (4-point), derivatives and integral (Simpson's 3/8 rule) 0035 4 - fourth order (5-point) and derivatives 0036 6 - sixth order (7-point) and derivatives 0037 TODO: barycentric form (https://en.wikipedia.org/wiki/Lagrange_polynomial) 0038 */ 0039 double nsl_sf_poly_interp_lagrange_0_int(const double* x, double y); 0040 double nsl_sf_poly_interp_lagrange_1(double v, const double* x, const double* y); 0041 double nsl_sf_poly_interp_lagrange_1_deriv(const double* x, const double* y); 0042 double nsl_sf_poly_interp_lagrange_1_int(const double* x, const double* y); 0043 double nsl_sf_poly_interp_lagrange_1_absint(const double* x, const double* y); 0044 double nsl_sf_poly_interp_lagrange_2(double v, const double* x, const double* y); 0045 double nsl_sf_poly_interp_lagrange_2_deriv(double v, const double* x, const double* y); 0046 double nsl_sf_poly_interp_lagrange_2_deriv2(const double* x, const double* y); 0047 double nsl_sf_poly_interp_lagrange_2_int(const double* x, const double* y); 0048 double nsl_sf_poly_interp_lagrange_3(double v, const double* x, const double* y); 0049 double nsl_sf_poly_interp_lagrange_3_deriv(double v, const double* x, const double* y); 0050 double nsl_sf_poly_interp_lagrange_3_deriv2(double v, const double* x, const double* y); 0051 double nsl_sf_poly_interp_lagrange_3_deriv3(const double* x, const double* y); 0052 double nsl_sf_poly_interp_lagrange_3_int(const double* x, const double* y); 0053 double nsl_sf_poly_interp_lagrange_4(double v, const double* x, const double* y); 0054 double nsl_sf_poly_interp_lagrange_4_deriv(double v, const double* x, const double* y); 0055 double nsl_sf_poly_interp_lagrange_4_deriv2(double v, const double* x, const double* y); 0056 double nsl_sf_poly_interp_lagrange_4_deriv3(double v, const double* x, const double* y); 0057 double nsl_sf_poly_interp_lagrange_4_deriv4(const double* x, const double* y); 0058 double nsl_sf_poly_interp_lagrange_6_deriv4(double v, const double* x, const double* y); 0059 double nsl_sf_poly_interp_lagrange_6_deriv5(double v, const double* x, const double* y); 0060 double nsl_sf_poly_interp_lagrange_6_deriv6(const double* x, const double* y); 0061 0062 #endif /* NSL_SF_POLY_H */