+++ title = "4. Factorisation de Cholesky"
date = 2018-09-09T00:00:00
draft = false # Is this a draft? true/false toc = true # Show table of contents? true/false type = "docs" # Do not modify.
math = true weight = 200 diagram = false #markup = "mmark"
edit_page = {repo_url = "https://github.com/Bertbk/course_4m053", repo_branch = "master", submodule_dir="content/course/4m053/"}
[git] icon = "github" repo = "https://github.com/Bertbk/course_4m053" submodule_dir = "content/course/4m053/"
[menu.4m053] parent = "VI. Solveurs Directs" name = "4. Factorisation de Cholesky" weight = 20
+++
- Calculer la factorisation de Cholesky d'une matrice symétrique définie positive
- Résoudre le système linéaire une fois la factorisation effectuée
Si
Une version naïve est la suivante. Elle peut être améliorée car certains calculs sont doublées et rendu inutiles du fait que le complément de Schur est lui aussi symétrique et défini positif.
L = 0;
Lt = 0;
S = A;
for k =0:N-1
// Pivot
pivot = sqrt(S(k,k))
// Colonne de L
L(k,k) = pivot;
for i = k+1:N-1
L(i,k) = S(i,k) / pivot;
// Ligne de Lt
Lt(k,k) = L(k,k);
for j = k+1:N-1
Lt(k,j) = L(j,k);
// Complément de Schur
for i = k+1:N-1
for j = k+1:N-1
S(i,j) = S(i,j) - L(i,k)*Lt(k,j);
{{% alert exercise %}}
Comme pour la factorisation LU, modifiez le pseudo code pour que la factorisation soit effectuée directement dans la matrice A, sans avoir à introduire de matrices L
, Lt
et S
.
Simplifiez ensuite le pseudo-code en supprimant les opérations inutiles et en réduisant éventuellement la longueur de certaines boucles. {{% /alert %}}
{{% alert note %}}
La factorisation peut être améliorée en ne stockant que
Définissez la fonction suivante qui modifie la matrice
void Matrice::decomp_Cholesky();
Pour la matrice
{{% alert exercise %}}
Validez votre décomposition sur la matrice