Matrici quadrate
Considera le tre matrici
mA=[ [2,7], [1,0] ] mB=[ [1,2], [0,4] ] mC=[ [1,8], [0,5] ]
come argomenti delle funzioni
def copia(m): n=len(m) mm=[] for r in range(n): riga=[] for c in range(n): riga.append(m[r]) mm.append(riga) return mm |
Copia di una matrice quadrata |
def creaZeri(n): mm=[] for r in range(n): riga=[] for c in range(n): riga.append(0) mm.append(riga) return mm |
Crea una matrice
|
def scalare(k,m): n=len(m) mm=creaZeri(n,n) for r in range(n): for c in range(n): mm[r]=k*m[r] return mm print(scalare(2, mA)) # [[4,14], [2,0]] print(scalare(2, mB)) # [[2,4], [0,8]] print(scalare(2, mC)) # [[2,16], [0,10]] |
Prodotto per uno scalare |
def somma(m1,m2): n=len(m1) mm=creaZeri(n) for r in range(n): for c in range(n): mm[r]=m1[r]+m2[r] return mm print(somma(mA,mB)) # [[3, 9], [1, 4]] print(somma(mA,mC)) # [[3, 15], [1, 5]] print(somma(mB,mC)) # [[2, 10], [0, 9]] |
Somma |
def prodotto(m1,m2): n=len(m1) mm=creaZeri(n,n) for r in range(n): for c in range(n): somma=0 for k in range(n): somma+=m1[r][k]*m2[k] mm[r]=somma return mm print(prodotto(mA,mB)) # [[2, 32], [1, 2]] print(prodotto(mA,mC)) # [[2, 51], [1, 8]] print(prodotto(mB,mC)) # [[1, 18], [0, 20]] |
Prodotto… |
... |
… |
Matrici rettangolari
mA=[ [2,7], [1,0] ] mB=[ [1,2], [0,4] ] mC=[ [1,8,9], [0,5,9] ]
def creaZeri(nr,nc): mm=[] for r in range(nr): riga=[] for c in range(nc): riga.append(0) mm.append(riga) return mm |
Crea una matrice
|
def scalare(k,m): nr=len(m) nc=len(m[0]) mm=creaZeri(nr,nc) for r in range(nr): for c in range(nc): mm[r]=k*m[r] return mm |
Prodotto per uno scalare |
def somma(m1,m2): r1=len(m1) c1=len(m1[0]) r2=len(m2) c2=len(m2[0]) if(r1 != r2)or(c1 != c2): return mm=creaZeri(r1,c1) for r in range(r1): for c in range(c1): mm[r]=m1[r]+m2[r] return mm print(somma(mA,mB)) # [[3, 9], [1, 4]] print(somma(mA,mC)) # None print(somma(mB,mC)) # None |
Somma |
def prodotto(m1,m2): r1=len(m1) c1=len(m1[0]) r2=len(m2) c2=len(m2[0]) if(c1 != r2): return mm=creaZeri(r1,c2) for r in range(r1): for c in range(c2): somma=0 for k in range(c1): somma+=m1[r][k]*m2[k] mm[r]=somma return mm print(prodotto(mA,mB)) # [[2,32], [1,2]] print(prodotto(mA,mC)) # [[2,51,81], [1,8,9]] print(prodotto(mB,mC)) # [[1,18,27], [0,20,36]] print(prodotto(mC,mA)) # None |
Prodotto (se compatibili) |
… | … |
Determinante
def creaSotto(m, er,ec): # Crea una sottomatrice di m (nxn) mm=[] # Copia tutto tranne la riga er e la colonna ec n=len(m) for r in range(n): if(r != er): riga=[] for c in range(n): if(c != ec): riga.append(m[r]) mm.append(riga) return mm def determinante(m): # Calcola il determinante nr=len(m) nc=len(m[0]) if(nr != nc): # Se la matrice non è quadrata... return 0 if(nr == 1 ): # Se è uno scalare... return m[0][0] somma=0 segno=+1 for r in range(nr): # Sviluppa la 1° colonna... mm = creaSotto(m, r,0) somma += segno*m[r][0]*determinante(mm) segno *= -1 return somma
Regola di Cramer
A=[ [2,7], # Matrice 2x2 [1,0] ] b=[ 2, # Vettore dei termini noti 1 ] #------------------------------------------------- x=[] # Vettore soluzione, adesso è vuoto dA=determinante(A) # Determinante di A n=len(A) for c in range(n): Ac=copia(A) # Determinante di A con b nella colonna c for r in range(n): # ... Ac[r]=b[r] # ... dAc=determinante(Ac) # ... xc=dAc/dA # Calcola xc come rapporto tra ... x.append(xc) # Aggiunge xc al vettore soluzione x #------------------------------------------------- for i in range(0,n): # Visualizza vettore soluzione print("x%i=%f" %(i+1,x[i]))
Matrici sghembe
def copia(m): nr=len(m) mm=[] for r in range(nr): riga=[] nc=len(m[r]) for c in range(nc): # ogni riga può avere una lunghezza diversa riga.append(m[r]) mm.append(riga) return mm #------------------------------ mA=[ [2,7],[1,0] ] # 2x2 mB=[ [12],[1,2],[0,4,5] ] # Triangolare... mC=[ [1,8,5],[0,5,-1] ] # 2x3 #------------------------------ print(mA); print(copia(mA)) print(mB); print(copia(mB)) print(mC); print(copia(mC))