// Chebyshev Polynomial of the First Kind // // chebyshev_t - T_n(x) // // T_0 = 1, T_1 = x, T_n = 2x*T_(n-1) - T_(n-2) // // Inputs: 2 (x, n) // Outputs: 1 (T_n(x)) // Constants: 0 #include #include "ts.h" ts_parameter_t const ts_chebyshev_t_p = { .n_inputs = 2, .n_outputs = 1, .n_constants = 0, .params_size = 0 }; uint_t ts_chebyshev_t_offset( ts_constant_t const *c ) { ( void )c; return ( 0 ); } int ts_chebyshev_t( fp_t * const *y, uint_t y_n, fp_t const * const *x, uint_t x_n, uint_t n, ts_constant_t const *c ) { TS_PROLOGUE( ts_chebyshev_t_p ); (void)c; for( uint_t i = 0; i < n; ++i ) { fp_t xv = x[0][i]; uint_t n_val = (uint_t)x[1][i]; if (x[1][i] < 0 || x[1][i] > 10000) { y[0][i] = 0; continue; } if( n_val == 0 ) { y[0][i] = 1.0; } else if( n_val == 1 ) { y[0][i] = xv; } else { fp_t t0 = 1.0; fp_t t1 = xv; for( uint_t k = 2; k <= n_val; ++k ) { fp_t t2 = 2.0 * xv * t1 - t0; t0 = t1; t1 = t2; } y[0][i] = t1; } } return 0; }