Data l'applicazione lineare \(F: V \to-> W\) e le rispettive basi degli spazi vettoriali \(\beta_V\) e \(\beta_W\). Si indica con:
\(A_F^{\beta_V,\beta_W}\)
Per costruire la matrice associta all'applicazione lineare:
Se si prendono in considerazione le basi canoniche è sufficiente disporre in colonna le immagini risultanti dell'applicazione lineare.
def matriceAssociataDaFormaEsplicita(definizione, base_dominio, base_codominio, incognite):
matrice_associata = sp.zeros(base_codominio.shape[0], base_dominio.shape[0])
"""Calcolo mediante F dei vettori della base del dominio"""
vettori_dominio = []
for i in range(base_dominio.shape[0]):
vettore_dominio = sp.zeros(1, base_codominio.shape[0])
for j in range(base_codominio.shape[0]):
f = definizione[j]
for k,inc in enumerate(incognite):
f = f.subs(inc, base_dominio[i, k])
vettore_dominio[0,j] = f
vettori_dominio.append(vettore_dominio)
"""Combinazione lineare dei vettori ottenuti rispetto alla base del codominio"""
for i,vettore_dominio in enumerate(vettori_dominio):
scalari = []
combinazione_lineare = sp.zeros(1, base_codominio.shape[1])
for j in range(base_codominio.shape[1]):
alpha = sp.symbols("a" + str(i) + "_" + str(j))
scalari.append(alpha)
combinazione_lineare += (base_codominio.row(j)*alpha)
combinazione_lineare -= vettore_dominio
valori_scalari = sp.solve(combinazione_lineare, scalari)
for j,val in enumerate(valori_scalari.values()):
matrice_associata[j, i] = val
return matrice_associata
base_dominio = sp.Matrix([[1,0,1],[1,0,0],[1,1,1]])
base_codominio = sp.Matrix([[0,1], [1,1]])
x,y,z = sp.symbols("x y z")
definizione = sp.Matrix([[x + y],[z]])
A = matriceAssociataDaFormaEsplicita(definizione, base_dominio, base_codominio, [x,y,z])
print(A)
Matrix([[0, -1, -1], [1, 1, 2]])
Come da esercizio.
base_dominio = sp.Matrix([[1,0,0],[0,1,0],[0,0,1]])
base_codominio = sp.Matrix([[1,0], [0,1]])
x,y,z = sp.symbols("x y z")
definizione = sp.Matrix([[x + y],[z]])
A = matriceAssociataDaFormaEsplicita(definizione, base_dominio, base_codominio, [x,y,z])
print(A)
Matrix([[1, 1, 0], [0, 0, 1]])
Come da esercizio.
def matriceAssociataDaImmaginiVettori(preimmagini, immagini, base_dominio, base_codominio):
matrice_associata = sp.zeros(base_codominio.shape[0], base_dominio.shape[0])
"""combinazioni preimmagini"""
combinazioni_preimmagini = []
for i in range(base_dominio.shape[0]):
scalari = []
combinazione_lineare = sp.zeros(1, base_dominio.shape[1])
for j in range(len(preimmagini)):
alpha = sp.symbols("a" + str(i) + "_" + str(j))
scalari.append(alpha)
combinazione_lineare += (preimmagini[j]*alpha)
combinazione_lineare -= base_dominio.row(i)
valori_scalari = sp.solve(combinazione_lineare, scalari)
combinazioni_preimmagini.append(list(valori_scalari.values()))
"""combinazioni immagini"""
combinazioni_immagini = []
for i in range(base_dominio.shape[0]):
combinazione_lineare = sp.zeros(1, base_codominio.shape[1])
for j in range(len(immagini)):
combinazione_lineare += (immagini[j]*combinazioni_preimmagini[i][j])
combinazioni_immagini.append(combinazione_lineare)
"""combinazioni base arrivo"""
for i,combinazione_immagine in enumerate(combinazioni_immagini):
scalari = []
combinazione_lineare = sp.zeros(1, base_codominio.shape[1])
for j in range(base_codominio.shape[0]):
a = sp.symbols("a" + "_" + str(j))
scalari.append(a)
combinazione_lineare += (base_codominio.row(j)*a)
combinazione_lineare -= combinazione_immagine
valori_scalari = sp.solve(combinazione_lineare, scalari)
for j,val in enumerate(valori_scalari.values()):
matrice_associata[j, i] = val
return matrice_associata
base_dominio = sp.Matrix([[1,0],[0,1]])
base_codominio = sp.Matrix([[1,1,1],[1,0,0],[0,-1,1]])
preimmagini = [sp.Matrix([[1,1]]), sp.Matrix([[2,1]])]
immagini = [sp.Matrix([[1,2,0]]), sp.Matrix([[-1,3,1]])]
A = matriceAssociataDaImmaginiVettori(preimmagini, immagini, base_dominio, base_codominio)
print(A)
Matrix([[1, 0], [-3, 3], [0, -1]])
base_dominio = sp.Matrix([[1,0],[0,1]])
base_codominio = sp.Matrix([[1,0,0],[0,1,0],[0,0,1]])
preimmagini = [sp.Matrix([[1,1]]), sp.Matrix([[2,1]])]
immagini = [sp.Matrix([[1,2,0]]), sp.Matrix([[-1,3,1]])]
A = matriceAssociataDaImmaginiVettori(preimmagini, immagini, base_dominio, base_codominio)
print(A)
Matrix([[-2, 3], [1, 1], [1, -1]])
Come da esercizio.