Considera le tre matrici seguenti come parametri attuali nelle chiamate delle funzioni
A = [ [2, 7], [1, 0] ]
B = [ [1, 2], [0, 4] ]
C = [ [1, 8], [0, 5] ]
Copia
def copia(m1):
m2=[]
n=len(m1)
for r in range(n):
riga=[]
for c in range(n):
riga.append(m1[r][c])
m2.append(riga)
return m2
def copia(m1):
m2=[]
for r1 in m1:
r2=[]
for x in r1:
r2.append(x)
m2.append(r2)
return m2
Sottomatrice
Crea una sottomatrice di m
Copia tutto tranne la riga er e la colonna ec
def sottoMatrice(m, er, ec):
n=len(m)
mm=[]
for r in range(n):
if(r != er):
riga=[]
for c in range(n):
if(c != ec):
riga.append(m[r][c])
mm.append(riga)
return mm
Trasposta
def trasposta(m1):
m2=[]
n=len(m1)
for r in range(n):
riga=[]
for c in range(n):
riga.append(m1[c][r])
m2.append(riga)
return m2
Prodotto per uno scalare
def scalare(k, m1):
m2=[]
n=len(m1)
for r in range(n):
riga=[]
for c in range(n):
riga.append(k*m1[r][c] )
m2.append(riga)
return m2
def scalare(k, m1):
m2=[]
for r1 in m1:
r2=[]
for x in r1:
r2.append(k*x)
m2.append(r2)
return m2
print(scalare(2, A)) # [[4,14], [2, 0]]
print(scalare(2, B)) # [[2, 4], [0, 8]]
print(scalare(2, C)) # [[2,16], [0,10]]
Somma
def somma(m1, m2):
m3=[]
n=len(mat1)
for r in range(n):
riga=[]
for c in range(n):
riga.append(m1[r][c]+m2[r][c])
m3.append(riga)
return m3
def somma(m1, m2):
m3=[]
for r1, r2 in zip(m1, m2):
r3=[]
for x1, x2 in zip(r1, r2):
r3.append(x1+x2)
m3.append(r3)
return m3
print(somma(A, B)) # [[3, 9], [1, 4]]
print(somma(A, C)) # [[3, 15], [1, 5]]
print(somma(B, C)) # [[2, 10], [0, 9]]
Prodotto
def prodotto(m1, m2):
m3=[]
n=len(m1)
for r in range(n):
riga=[]
for c in range(n):
x=0
for k in range(n):
x += m1[r][k] * m2[k][c]
riga.append(x)
m3.append(riga)
return m3
def prodotto(m1, m2):
m3=[]
m2t=trasposta(m2)
for r1 in m1:
r3=[]
for r2 in m2t:
x=0
for x1, x2 in zip(r1, r2):
x += x1*x2
r3.append(x)
m3.append(r3)
return m3
print(prodotto(A, B)) # [[2, 32], [1, 2]]
print(prodotto(A, C)) # [[2, 51], [1, 8]]
print(prodotto(B, C)) # [[1, 18], [0, 20]]
Matrice nulla
Una matrice quadrata, piena di zeri, di dimensione n
def nulla(n):
m=[]
for r in range(n):
riga=n*[0]
m.append(riga)
return m
D=creaZeri(3)
Utilizza la funzione precedente per creare la struttura della matrice e poi modifica solo gli elementi diversi da zero
Copia
def copia(m1):
n=len(mat)
m2=nulla(n)
for r in range(n):
for c in range(n):
m2[r][c]=m1[r][c]
return m2
D=copia(matA)
Prodotto per uno scalare
def scalare(k, m1):
n=len(m1)
m2=nulla(n)
for r in range(n):
for c in range(n):
m2[r][c]=k*m1[r][c]
return m2
D=scalare(2, A) # [[4,14], [2, 0]]
D=scalare(2, B) # [[2, 4], [0, 8]]
D=scalare(2, C) # [[2,16], [0,10]]
Somma
def somma(m1, m2):
n=len(m1)
m3=nulla(n)
for r in range(n):
for c in range(n):
m3[r][c]=m1[r][c]+m2[r][c]
return m3
D=somma(A, B) # [[3, 9], [1, 4]]
D=somma(A, C) # [[3, 15], [1, 5]]
D=somma(B, C) # [[2, 10], [0, 9]]
Prodotto
def prodotto(m1, m2):
n=len(m1)
m3=nulla(n, n)
for r in range(n):
for c in range(n):
x=0
for k in range(n):
x += m1[r][k]*m2[k][c]
m3[r][c]=x
return m3
D=prodotto(A, B) # [[2, 32], [1, 2]]
D=prodotto(A, C) # [[2, 51], [1, 8]]
D=prodotto(B, C) # [[1, 18], [0, 20]]
Continua…
- Matrice unitaria
- Matrice 101 (tutti i valori sono 1 tranne sulla diagonale principale che contiene solo 0)
- Diagonale superiore
- Diagonale inferiore
- …