• Aucun résultat trouvé

for k in range(n): if det(M[:k+1,:k+1]) <= 0: return('Votre matrice n\'est pas définie positive

N/A
N/A
Protected

Academic year: 2022

Partager "for k in range(n): if det(M[:k+1,:k+1]) <= 0: return('Votre matrice n\'est pas définie positive"

Copied!
2
0
0

Texte intégral

(1)

# -*- coding: utf-8 -*-

# ============================== #

# ============================== #

# ALGEBRE LINEAIRE TD Exercice 1 #

# Factorisation de Cholesky #

# MARS 2015 #

# ============================== #

# ============================== #

# N'importons de numpy que ce dont nous avons réellement besoin ! from numpy import array, zeros

from numpy.linalg import det, cholesky def Cholesky(M):

n = M.shape[0]

# 1ère étaoe : M est-elle bien SDP ? # Méthode de Sylvester.

for k in range(n):

if det(M[:k+1,:k+1]) <= 0:

return('Votre matrice n\'est pas définie positive !') # M est bien SDP, on la factorise

L = zeros((n,n)) L[0,0] = M[0,0]**0.5 if n != 1:

# 1ère colonne (d'indice 0) for i in range(1,n):

L[i,0] = M[i,0] / L[0,0]

# Les autres colonnes... (d'indice k variant de 1 à n-1) for k in range(1,n):

# coeff sur la diagonale principale s = M[k,k]

for j in range(k):

s -= L[k,j]**2 L[k,k] = s**0.5

# coeffs sous la diagonale principale (il y en a si k < n-1) if k < n-1:

for i in range(k,n):

s = M[i,k]

for j in range(k):

s -= L[k,j] * L[i,j]

L[i,k] = s / L[k,k]

return(L)

# ===================

# PROGRAMME PRINCIPAL

# ===================

# La matrice à factoriser

# =======================

# Exemple 1 : une matrice tridiagonale

# M = array([[2,-1,0,0,0],[-1,2,-1,0,0],[0,-1,2,-1,0],[0,0,-1,2,-1],[0,0,0,-1,2]])

# Exemple 2 : une petite matrice ...

# M = array([[4,1,1],[1,4,1],[1,1,4]])

# Exemple 3 : une petite matrice ... qui n'est pas SDP

# M = array([[1,2,3],[4,5,6],[7,8,9]])

# Exemple 4 : avec des entiers

# M = array([[1,1,1,1],[1,2,2,2],[1,2,3,3],[1,2,3,4]])

# Exemple 5 : généralisation de l'exemple 1 n = 6

M = zeros((n,n)) for i in range(n):

M[i,i] = 2 for i in range(n-1):

M[i+1,i], M[i,i+1] = -1, -1 print(M)

# Appel de la fonction Cholesky

# =============================

print(Cholesky(M))

1

(2)

# Vérification avec la fonction cholesky de numpy.linalg print(cholesky(M))

# ================

# FIN DU PROGRAMME

# ================

2

Références

Documents relatifs

En d´ eduire que la suite (f n ) n∈ N converge uniform´ ement vers une fonction f continue et croissante..

Les relations de la question précédente présentent une certaine analogie avec celles dénissant les coecients du binôme... Application à un calcul

Ces polynômes sont très proches des polynômes de

En sommant l'encadrement de la

Une somme qui porte sur les k de K α (x) est plus petite qu'une somme obtenue en ajoutant des termes positifs pour les autres k.. On considère la somme de la

Montrer que tout polynôme non nul admet un unique antécédent pour ∆ divisible par X.. Application à un calcul

Voici une proposition de fonction en Scilab : function T=simulmax(n) ;.. T=max(grand(1,n,’uin’,1,N)) ;

[r]