Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Python et matrices de Hilbert

Posté par
ZiYun
17-07-19 à 21:53

Bonsoir,

On appelle matrice de Hilbert de taille nxn la matrice Hn=(\frac{1}{i+j-1})_{1\leq i,j\leq n} et on pose \Delta _{n}=detH_{n}.
Un exercice demande d'écrire un script Python qui permet d'afficher la matrice H_{n} et pour n entre 1 et 10, de déterminer si H_{n} est inversible, et si c'est le cas de donner det(H_{n}^{-1}) et la somme \sum_{1\leq i\prec j\leq n}^{}{[H_{n}^{-1}]_{i,j}} et de donner les valeurs propres de H_{n}.

Alors j'écris le script suivant :

import numpy as np
import numpy.linalg as alg

def hilbert(n):
    H=np.zeros((n,n))
    for i in range(1,n+1):
        for j in range(1,n+1):
            H[i-1, j-1]=1/(i+j-1)
    return H



def somme(n):
    invH=alg.inv(hilbert(n))
    s=0
    for i in range(1,n):
        for j in range(i+1,n+1):
            s+=invH[i-1,j-1]
  
for n in range(1,11):
    if alg.matrix_rank(hilbert(n))==n:
        print('Pour n=', n,',la matrice est inversible et le déterminant de son inverse est :', alg.det(alg.inv(hilbert(n))), 'la somme est :', somme(n), 'et les valeurs propres de la matrice sont :', alg.eigvals(hilbert(n)))


Le problème que je rencontre est qu'à chaque fois la somme est None.
Même quand j'essaye la fonction somme toute seule (avec la fonction hilbert bien sûr) je n'obtiens rien.

Je ne sais pas où peut se situer le problème. Je n'ai aucun message d'erreur. Normalement en faisant, pour un tableau H, H[i,j] (avec i entre 0 et n et j de même), il nous donne la valeur qui se trouve à la ième ligne et jème colonne. Et on peut additionner les valeurs normalement...

J'espère que vous pourrez m'aider à déterminer quel peut être le problème qui empêche la fonction somme de donner une valeur réelle.

Merci d'avance,

Posté par
jarod128
re : Python et matrices de Hilbert 17-07-19 à 23:56

Bonjour,
Ta fonction somme ne renvoie rien donc None...
Tu as oublié un return s je pense.

Posté par
ZiYun
re : Python et matrices de Hilbert 18-07-19 à 12:01

Bonjour,

j'ai complétement oublié qu'il fallait mettre return... et dire que j'ai réfléchis pendant un bon bout de temps pour savoir où est le problème.

Merci pour votre réponse.

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !