Vandermonde matrix #
This file defines the vandermonde
matrix and gives its determinant.
Main definitions #
vandermonde v
: a square matrix with thei, j
th entry equal tov i ^ j
.
Main results #
det_vandermonde
:det (vandermonde v)
is the product ofv i - v j
, where(i, j)
ranges over the unordered pairs.
vandermonde v
is the square matrix with i
th row equal to 1, v i, v i ^ 2, v i ^ 3, ...
.
Equations
- Matrix.vandermonde v i j = v i ^ ↑j
Instances For
theorem
Matrix.vandermonde_mul_vandermonde_transpose
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
(w : Fin n → R)
(i : Fin n)
(j : Fin n)
:
(Matrix.vandermonde v * Matrix.transpose (Matrix.vandermonde w)) i j = Finset.sum Finset.univ fun (k : Fin n) => (v i * w j) ^ ↑k
theorem
Matrix.det_vandermonde
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
:
Matrix.det (Matrix.vandermonde v) = Finset.prod Finset.univ fun (i : Fin n) => Finset.prod (Finset.Ioi i) fun (j : Fin n) => v j - v i
theorem
Matrix.det_vandermonde_ne_zero_iff
{R : Type u_1}
[CommRing R]
[IsDomain R]
{n : ℕ}
{v : Fin n → R}
:
Matrix.det (Matrix.vandermonde v) ≠ 0 ↔ Function.Injective v
@[simp]
theorem
Matrix.det_vandermonde_add
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
(a : R)
:
Matrix.det (Matrix.vandermonde fun (i : Fin n) => v i + a) = Matrix.det (Matrix.vandermonde v)
@[simp]
theorem
Matrix.det_vandermonde_sub
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
(a : R)
:
Matrix.det (Matrix.vandermonde fun (i : Fin n) => v i - a) = Matrix.det (Matrix.vandermonde v)
theorem
Matrix.eval_matrixOfPolynomials_eq_vandermonde_mul_matrixOfPolynomials
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
(p : Fin n → Polynomial R)
(h_deg : ∀ (i : Fin n), Polynomial.natDegree (p i) ≤ ↑i)
:
(Matrix.of fun (i j : Fin n) => Polynomial.eval (v i) (p j)) = Matrix.vandermonde v * Matrix.of fun (i j : Fin n) => Polynomial.coeff (p j) ↑i
theorem
Matrix.det_eval_matrixOfPolynomials_eq_det_vandermonde
{R : Type u_1}
[CommRing R]
{n : ℕ}
(v : Fin n → R)
(p : Fin n → Polynomial R)
(h_deg : ∀ (i : Fin n), Polynomial.natDegree (p i) = ↑i)
(h_monic : ∀ (i : Fin n), Polynomial.Monic (p i))
:
Matrix.det (Matrix.vandermonde v) = Matrix.det (Matrix.of fun (i j : Fin n) => Polynomial.eval (v i) (p j))