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.



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 !