Vandermonde Conditioning

In [20]:
import numpy as np
import numpy.linalg as la
import scipy.special as sp
import matplotlib.pyplot as pt
In [21]:
n = 5

nodes = np.linspace(-1, 1, n)
#nodes = sp.legendre(n).weights[:, 0]

pt.plot(nodes, 0*nodes, "o")
Out[21]:
[<matplotlib.lines.Line2D at 0x7f6ea415b438>]

Monomials

In [22]:
exponents = np.arange(n)
exponents
Out[22]:
array([0, 1, 2, 3, 4])
In [23]:
exponents[:, np.newaxis]
Out[23]:
array([[0],
       [1],
       [2],
       [3],
       [4]])
In [24]:
vdm = nodes ** exponents[:, np. newaxis]

if n < 5:
    print(vdm)
In [29]:
print(la.cond(vdm))
4.30037521416

Legendre polynomials

In [30]:
vdm = np.array([sp.eval_legendre(i, nodes) for i in range(n)]).T

print(la.cond(vdm))
4.30037521416