def vals2coeffs2(vals): """Map function values at Chebyshev points of 2nd kind to first-kind Chebyshev polynomial coefficients""" n = vals.size if n <= 1: coeffs = vals return coeffs tmp = np.append(vals[::-1], vals[1:-1]) if np.isreal(vals).all(): coeffs = ifft(tmp) coeffs = np.real(coeffs) elif np.isreal(1j * vals).all(): coeffs = ifft(np.imag(tmp)) coeffs = 1j * np.real(coeffs) else: coeffs = ifft(tmp) coeffs = coeffs[:n] coeffs[1:n - 1] = 2 * coeffs[1:n - 1] return coeffs
def vals2coeffs2(vals): """Map function values at Chebyshev points of 2nd kind to first-kind Chebyshev polynomial coefficients""" n = vals.size if n <= 1: coeffs = vals return coeffs tmp = np.append( vals[::-1], vals[1:-1] ) if np.isreal(vals).all(): coeffs = ifft(tmp) coeffs = np.real(coeffs) elif np.isreal( 1j*vals ).all(): coeffs = ifft(np.imag(tmp)) coeffs = 1j * np.real(coeffs) else: coeffs = ifft(tmp) coeffs = coeffs[:n] coeffs[1:n-1] = 2*coeffs[1:n-1] return coeffs
def coeffmult(fc, gc): """Coefficient-Space multiplication of equal-length first-kind Chebyshev series.""" Fc = np.append(2. * fc[:1], (fc[1:], fc[:0:-1])) Gc = np.append(2. * gc[:1], (gc[1:], gc[:0:-1])) ak = ifft(fft(Fc) * fft(Gc)) ak = np.append(ak[:1], ak[1:] + ak[:0:-1]) * .25 ak = ak[:fc.size] inputcfs = np.append(fc, gc) out = np.real(ak) if np.isreal(inputcfs).all() else ak return out
def coeffmult(fc, gc): """Coefficient-Space multiplication of equal-length first-kind Chebyshev series.""" Fc = np.append( 2.*fc[:1], (fc[1:], fc[:0:-1]) ) Gc = np.append( 2.*gc[:1], (gc[1:], gc[:0:-1]) ) ak = ifft( fft(Fc) * fft(Gc) ) ak = np.append( ak[:1], ak[1:] + ak[:0:-1] ) * .25 ak = ak[:fc.size] inputcfs = np.append(fc, gc) out = np.real(ak) if np.isreal(inputcfs).all() else ak return out