Projet : calculs matriciels avec numpy

saxfire
Modifié (October 2022) dans Informatique théorique
Bonjour
J'ai un projet sur le calcul matriciel avec Numpy à réaliser. J'ai effectué ce travail et je voudrais avoir vos avis sur mes résultats.
Pour la première question, j'ai effectué la somme basique et non celle demandée car je ne vois pas comme la réaliser (Cf. le sujet). Pourriez-vous m'aider à coder la somme demandée ? En effet, ma sortie est de 8 mais normalement, je devrai avoir 7 si je ne dis pas de bêtises.
Pour la deuxième question (Cf. le sujet), je pense avoir juste. Pourriez-vous me dire votre avis ?
En PJ à ce post, vous trouverez : 
1 - Mon sujet scanné
2 - Mes sorties après exécution du programme
3 - Mon code source
Je vous remercie pour votre aide,
A ++
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
from numpy.linalg import matrix_rank

print ("Projet 1: calculs matriciels avec la librairie Numpy \n")
#vecteur y
def vecteur_y ():
	y = np.array([[1],[1],[1],[1],[1],[1],[1],[1]])
	return y

#=debug
#print ("Le vecteur y :  \n\n",vecteur_y())

#matrice identitée dans R⁸
def I_8 ():
	i = np.identity(8,dtype=int)
	return i

#==debug
#print ("La matrice identitée dans R⁸: \n\n",I_8())

#matrice E à construire
def matrice_E ():
	e = np.zeros((8,8),dtype=int)
	e[0,-1] = 1
	return e
#===debug
#print ("La matrice E : \n\n\n",matrice_E())

#matrice X : matrice d'observation
I_8 = np.identity(8,dtype=int)
matrice_E = np.zeros((8,8),dtype=int)
matrice_E[0,-1] = 1
matrix_x = np.add(I_8, matrice_E)
#====debug
#print ("La matrice X : \n\n\n", matrix_x)

print ("- Calcul de beta avec la formule du sujet")
#============utilisation des fonctions de la librairie numpy pour construire le beta
Transpose = matrix_x.transpose()
Produit1 = Transpose @ matrix_x
Inverse = np.linalg.inv(Produit1)
Produit2 = Inverse @ Transpose
vecteur_y = vecteur_y()

#beta devient donc:
beta = np.dot(Produit2,vecteur_y)
print ("β =  \n\n\n",beta)

#=====debug
#print ("Transpose : \n\n\n",Transpose)
#print ( "Produit 1 : \n\n\n",Produit1)
#print ("Produit 2 : \n\n\n",Produit2)
#print ("Vecteur y : \n\n\n",vecteur_y())

###programme principal
print ("                 8    \n")
print ("* Question 1:    ∑βi \n")
print ("                i=1 \n")
#calcul de sigma de 1 à 8 de beta i
print ("\n\n")
print ("La somme est de :",np.sum(vecteur_y))

#donner le rang de la matrice X^T X - I8
#calcul de la nouvelle matrice
#n = nouvelle matrice
n = np.subtract(Transpose @ matrix_x,I_8)
print ("X^T X - I8 = matrice n : \n\n",n)
print ("\n\n")

#calcul du rang de la matrice n
print ("** Question 2: \n")
n = matrix_rank(n)
print ("Le rang de la matrice n: \n",n)
Linux n'a pas de racines IP

Réponses

  • paul18
    Modifié (October 2022)
    Pour $\beta$ (en Python 3.9):
    import numpy as np
    import numpy.linalg
    
    n=8
    
    I8=np.identity(n, dtype=float)
    E=np.zeros((n, n), dtype=float)
    E[0, -1]=1.
    X=I8+E
    
    y = np.ones((n,1), dtype=float)
    # print(f"I8={I8}")
    # print(f"E={E}")
    # print(f"X={X}")
    
    beta = np.sum((np.linalg.inv(np.transpose(X) @ X)) @ y)
    print(f"beta={beta}")
    ce qui donne bien 7

    PS: un intérêt à définir des fonctions pour $I_{8}$, $y$, $E$ ?

  • saxfire
    Modifié (October 2022)
    Salut Paul
    Merci pour ton aide. Je vais regarder ça pour comprendre. 
    Pour I8, y, E, non. J'ai voulu créer des fonctions pour que cela soit "un peu plus beau", mais tu as raison, pas d'interêt à proprement parlé. 
    Concernant la deuxième question, est-ce que j'ai juste ? J'ai trouvé 2.
    Merci  B)
    Linux n'a pas de racines IP
  • Salut Paul, 

    Ok, j'ai compris comment tu as fait ! Super la ligne qui calcule la somme ! Merci
    Linux n'a pas de racines IP
  • paul18
    Modifié (October 2022)
    rang = np.linalg.matrix_rank(np.transpose(X)@X - I8)
    print(f"rang={rang}")
  • saxfire
    Modifié (October 2022)
    Salut Paul, 
    Merci pour ton code. Nous trouvons pareil, à savoir rang = 2
    Moi mon code est plus long mais le principal c'est de trouver ! 
    Merci encore pour ta révision de mon petit projet de maths
    Bonne soirée. 
    Linux n'a pas de racines IP
Connectez-vous ou Inscrivez-vous pour répondre.