Library perron_frobenius

This file contains a definition and some theory about the spectral radius of matrices. eigen_seq M == the sequence of all eigenvalue of M. \rho M == the spectral radius of the marix M.


Set Implicit Arguments.

Import GRing.Theory.
Import Num.Theory.
Import Num.Def.

Section C_archi.

Local Notation C := (complex Rdefinitions.R).
Open Scope ring_scope.

Lemma archiC_Mixin :
 Num.archimedean_axiom [numDomainType of C].

Definition C_archiDomain := ArchiDomainType C archiC_Mixin.
Canonical C_archiDomain.

End C_archi.

Section R_Top.

Let Rn := [numDomainType of R].

Canonical Structure ArchiD_R := Eval hnf in
  [archiDomainType of R for (archi_archi [archiFieldType of R])].
Canonical Structure EspMet_R :=
  Eval hnf in [espMetType R of R for (numEspMetType Rn)].
Canonical Structure EspTop_R :=
  Eval hnf in [topologyType of R for (numTopologyType Rn)].

End R_Top.

Section definition.

Variable R : rcfType.
Local Notation C := (complex R).

Open Scope ring_scope.

Local Notation "A ^%:C" := (map_mx (real_complex_def (Phant R)) A) (at level 2).

Definition eigen_seq n (M : 'M[C]_n) := root_seq (char_poly M).

Definition spectral_radius n (M : 'M[C]_n) :=
  (\big[(@maxr _)/0]_(lam <- eigen_seq M) Re `|lam|).

Notation "\rho A" := (spectral_radius A) (at level 0).

Lemma eigenE n (M : 'M[C]_n) lam :
 (lam \in eigenvalue M) = (lam \in eigen_seq M).

Lemma rho_ge_eigen n (M : 'M[C]_n) lam : lam \in eigenvalue M ->
  `|lam| <= (\rho M)%:C.

Lemma eigen_seq_nnil n (M : 'M[C]_n.+1) : eigen_seq M != [::].

Lemma rho0 n : \rho (0 : 'M_n) = 0.

Lemma rho_ge0 n (M : 'M_n) : 0 <= \rho (M).

Lemma char_poly_trmx (T : comRingType) n (A : 'M[T]_n) :
  char_poly A = char_poly A^T.

Lemma eigen_trmx (F : fieldType) n (A : 'M[F]_n) lam :
  lam \in eigenvalue A = (lam \in eigenvalue (A^T)).

Lemma eigenvalue2P (F : fieldType) n (A : 'M[F]_n) lam :
  reflect (exists2 v : 'cV_n, A *m v = lam *: v & v != 0) (lam \in eigenvalue A ).

Lemma ex_eigen_rho n (A : 'M[C]_n.+1) :
  {lam | eigenvalue A lam & `|lam| = \rho(A)%:C}.

Lemma rho_scalemx n a (A :'M_n) : \rho (a *: A) = Re `|a| * \rho A.

End definition.

Notation "\rho A" := (spectral_radius A) (at level 0).

Section perron_thm.

Local Notation C := (complex R).
Local Notation "A ^%:C" := (map_mx (real_complex_def (Phant R)) A) (at level 2).
Local Notation "A ^%:R" := (map_mx (@Re _) A) (at level 2).

Open Scope ring_scope.

Lemma root_invf_eigen (F: fieldType) m (A : 'M[F]_m) (p : {poly F}) x :
p \in (invariant_factors A) -> root p x -> eigenvalue A x.

Lemma mx_cvg0P n (A :'M[R]_n.+1) :
  reflect ((fun k => A^+k) >->> 0) (\rho (A^%:C) < 1).

Lemma PF_gt0 n (A : 'M[R]_n) (x : 'cV_n) (lam : C) :
  let x' := (Mabs x)^%:R in
  0 <m: A ->
  x != 0 -> A^%:C *m x = lam *: x -> `|lam| = (\rho (A^%:C))%:C ->
  [/\ (A *m x' = \rho (A^%:C) *: x'), 0 <m: x' & 0 < \rho (A^%:C)].

Lemma Perron_gt0 n (A : 'M[R]_n.+1) : 0 <m: A ->
  exists x : 'cV_n.+1, 0 <m: x /\ A *m x = (\rho (A^%:C)) *: x.

End perron_thm.


This page has been generated by coqdoc