math:matrices:systeme_lineaire:directe
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
math:matrices:systeme_lineaire:directe [2019/03/17 23:02] – Ajout de l'implémentation de Cholesky en Python root | math:matrices:systeme_lineaire:directe [2020/04/28 23:00] (Version actuelle) – mhtml -> html root | ||
---|---|---|---|
Ligne 174: | Ligne 174: | ||
====Méthode de Gauss / Crout : LU (A non symétrique)==== | ====Méthode de Gauss / Crout : LU (A non symétrique)==== | ||
- | Valable pour une matrice carrée définie positive. | + | A doit être inversible (pas de pivot nul). |
Étape 1 : | Étape 1 : | ||
Ligne 258: | Ligne 258: | ||
Méthode : | Méthode : | ||
- | [[https:// | + | [[https:// |
Soit | Soit | ||
Ligne 432: | Ligne 432: | ||
def cholesky(A): | def cholesky(A): | ||
n = len(A) | n = len(A) | ||
- | L = np.matrix(np.zeros((n, | + | L = np.zeros((n, |
L[0,0] = cmath.sqrt(A[0, | L[0,0] = cmath.sqrt(A[0, | ||
L[1:,0] = A[1:, | L[1:,0] = A[1:, | ||
- | | + | |
for j in range(1,n): | for j in range(1,n): | ||
if (not np.isreal(A[j, | if (not np.isreal(A[j, | ||
+ | # Matrice A non hermitienne | ||
L.fill(np.nan) | L.fill(np.nan) | ||
return (L,-1) | return (L,-1) | ||
- | | + | |
- | carre = A[j,j] - L[j,:j]*L[j,:j].H | + | carre = A[j,j] - np.dot(L[j,:j],L[j,:j].transpose().conjugate()) |
+ | if (carre <= 0): | ||
+ | # Matrice non définie strictement positive | ||
+ | L.fill(np.nan) | ||
+ | return (L,0) | ||
L[j,j] = cmath.sqrt(carre) | L[j,j] = cmath.sqrt(carre) | ||
for i in range(j+1, | for i in range(j+1, | ||
if (A[i,j] != np.conjugate(A[j, | if (A[i,j] != np.conjugate(A[j, | ||
+ | # Matrice A non hermitienne | ||
L.fill(np.nan) | L.fill(np.nan) | ||
return (L,0) | return (L,0) | ||
- | L[i, | + | L[i, |
return (L,1) | return (L,1) | ||
+ | |||
+ | |||
+ | A4 = np.array( | ||
+ | [[ 4, 12, -16], | ||
+ | [ 12, 37, -43+2j], | ||
+ | [-16, -43-2j, | ||
+ | (L, sol) = cholesky(A4) | ||
+ | print (" | ||
+ | print (" | ||
+ | print (L.dot(L.transpose().conjugate())) | ||
</ | </ | ||
Ligne 477: | Ligne 493: | ||
$$Q = \prod_{k=1}^{N-1}Q_i$$ | $$Q = \prod_{k=1}^{N-1}Q_i$$ | ||
- | [[https:// | + | [[https:// |
[[http:// | [[http:// |
math/matrices/systeme_lineaire/directe.1552860123.txt.gz · Dernière modification : 2019/03/17 23:02 de root