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