Chebyshev polynomials in LaTeX

written on Friday, May 13, 2011

I'm recovering from an obsession with Chebyshev polynomials. Despite the fancy title and somewhat-intimidating definition, Chebyshev polynomials are actually a fantastic shortcut -- relative to what we're taught from the book -- to factoring out trigonometric double-angle problems like cos(6x).

I was originally going to write a script that calculated the Chebyshev polynomials, but when I learned Python's SciPy library already has a function, I "pivoted." Instead I wanted to write the below script, which calculates the polynomial using scipy.special.orthogonal.chebyt(), then creates a LaTeX -formatted string representation of the equation. For example, the output for the ninth-degree Chebyshev polynomial is rendered thusly:

http://mathbin.net/equations/62360_0.png

Here's the code, it should be pretty straightforward:

import sys
import math
from scipy.special import orthogonal as orth

def chebyTex(n):
    '''Returns a LaTeX-formatted string for a Chebyshev polynomial of
    order n.'''
    c = orth.chebyt(n)
    coeffs = []
    for i in c:
        if i >= 1 or i <= -1:
            coeffs.append(int(round(i)))
        else:
            pass

    pows = [coeffs.index(i)*2 for i in coeffs]
    pows.sort(reverse=True)

    # The only "magic" in this function is some string manipulation to
    # handle the LaTeX formatting for super- and subscript characters.
    arrays = zip(coeffs, pows)
    latex_string = 'T_{%s}(x) = ' % n
    for array in arrays:
        z = n-arrays.index(array)*2
        if arrays[-1] != array:
            latex_string += r'%sx' % array[0]
            latex_string += r'^{%s} + ' % z
        else:
            if not n % 2:
                latex_string += '%s' % array[0]
            else:
                latex_string += '%sx' % array[0]

    return latex_string


if __name__ == '__main__':
    s = chebyTex(int(sys.argv[1]))
    print s

It would be trivial to connect to something like MathBin pull down and store the resulting image, but was beyond the scope of this little script.

This entry was tagged latex, math, python and scipy