\(M_{\beta \to \beta'}\). In caso la base di destinazione \(\beta'\) sia la base canonica (es. in \(\mathbb{R}^3\) è \((1,0,0)(0,1,0)(0,0,1)\)) si scrivono in colonna i vettori della base di partenza \(\beta\).
Altrimenti si pongono i vettori della base \(\beta\) come combinazione lineare dei vettori della base \(\beta'\), si risolvono poi le combinazioni in un sistema lineare (come avviene per trovare le coordinate rispetto a base, vedi sezione "Coordinate rispetto a una base"). Avremo un sistema lineare per ogni vettore di \(\beta\). Si pongono in colonna le soluzioni dei sistemi lineari (in quanto queste soluzioni sono le coordinate del vettore rispetto alla base \(\beta'\)) e si ottiene la matrice di cambiamento di base \(M_{\beta \to \beta'}\).
In \(\mathbb{R}^2\) trovare la matrice di cambiamento da \(\beta = \{(1,2),(3,4)\}\) a \(\beta'=\{(1,0),(0,1)\}\) la base canonica di \(\mathbb{R}^2\). Il risultato dovrebbe essere \(M_{\beta \to \beta'} = \begin{bmatrix}1&3\\2&4\end{bmatrix}\).
E' stato sufficiente mettere in colonna i vettori di \(\beta\).
In \(\mathbb{R}^3\) trovare la \(M_{\beta \to \beta'}\) da:
\(\beta = \{(0,2,0), (1,1,0), (0,1,1)\}\)
\(\beta' = \{(1,0,2), (2,3,0), (0,4,4)\}\)
Soluzione finale: \(\begin{bmatrix}-\frac{3}{2}&\frac{1}{2}&0\\1&2&0\\2&0&4\end{bmatrix}\)
import sympy as sp
import numpy as np
a1,a2,a3,b1,b2,b3,c1,c2,c3 = sp.symbols('a1 a2 a3 b1 b2 b3 c1 c2 c3')
linearComb1,linearComb2,linearComb3 = sp.symbols('linearComb1 linearComb2 linearComb3')
# le due basi
beta = sp.Matrix([[0,2,0],[1,1,0],[0,1,1]])
beta1 = sp.Matrix([[1,0,2],[2,3,0],[0,4,4]])
# combinazioni lineari per le rispettive basi
linearComb1 = a1*beta.row(0) + b1*beta.row(1) + c1*beta.row(2)
linearComb2 = a2*beta.row(0) + b2*beta.row(1) + c2*beta.row(2)
linearComb3 = a3*beta.row(0) + b3*beta.row(1) + c3*beta.row(2)
# primo sistema
primo_sistema = [
linearComb1[0] - beta1[0, 0],
linearComb1[1] - beta1[0, 1],
linearComb1[2] - beta1[0, 2],
]
sol = sp.solve(primo_sistema)
print(sol)
{a1: -3/2, b1: 1, c1: 2}
La prima colonna della matrice di cambiamento è \(\begin{bmatrix}-\frac{3}{2}&1&2\end{bmatrix}\).
Si fa la stessa cosa per gli altri componenti di \(\beta'\):
secondo_sistema = [
linearComb2[0] - beta1[1, 0],
linearComb2[1] - beta1[1, 1],
linearComb2[2] - beta1[1, 2],
]
terzo_sistema = [
linearComb3[0] - beta1[2, 0],
linearComb3[1] - beta1[2, 1],
linearComb3[2] - beta1[2, 2],
]
print(sp.solve(secondo_sistema))
print(sp.solve(terzo_sistema))
{a2: 1/2, b2: 2, c2: 0} {a3: 0, b3: 0, c3: 4}
Quindi le altre due colonne sono:\(\begin{bmatrix}\frac{1}{2}&2&0\end{bmatrix}\) e \(\begin{bmatrix}0&0&4\end{bmatrix}\)
Formando la matrice di soluzione iniziale, esattamente come nell'esercizio YouMath.
Funzione riassumibile per il cambiamento di base
def matriceCambiamentoBase(beta, beta1):
def incognita(j,i):
return "_"+str(i)+"_"+str(j)
size = sp.shape(beta)[0]
incognite = {}
"""Definizione incognite"""
for i in range(size):
incognite["linearComb"+str(i)] = sp.symbols("linearComb"+str(i))
for j in range(size):
incognite[incognita(i,j)] = sp.symbols(incognita(i,j))
"""Combinazioni lineari delle coordinate di beta' su beta"""
for i in range(size):
combinazione_lineare = incognite[incognita(i,0)] * beta.row(0)
for j in range(size-1):
k = j+1
combinazione_lineare += incognite[incognita(i,k)] * beta.row(k)
incognite["linearComb"+str(i)] = combinazione_lineare
matrice_cambiamento = sp.zeros(size, size)
"""sistemi"""
for i in reversed(range(size)):
sistema = []
for j in range(size):
sistema.append(incognite["linearComb"+str(i)][j] - beta1[i, j])
sol = sp.solve(sistema)
# Aggiunta della soluzione in colonna nella matrice di cambiamento
for s in range(size):
matrice_cambiamento[s,i] = sol[incognite[incognita(i,s)]]
print(matrice_cambiamento)
return matrice_cambiamento
In YouMath è richiesto di trovare la matrice di cambiamento di base da \(\beta=\{2,-3+x,7-5x+x^2\}\) a \(\beta'=\{1,x,x^2\}\) (base canonica). Il risultato deve essere: \(\begin{bmatrix} 2&-3&7\\0&1&5\\0&0&1\end{bmatrix}\)
Proviamo la funzione da me creata. Guardare come converto il polinomio (incluso quello canonico) in un espressione sp.Matrix()
beta = sp.Matrix([[2,0,0],[-3, 1, 0],[7,-5*1,1**2]])
beta1 = sp.Matrix([[1,0,0],[0,1,0],[0,0,1]])
matrice = matriceCambiamentoBase(beta, beta1)
Matrix([[2, -3, 7], [0, 1, -5], [0, 0, 1]])
Esattamente come nella soluzione.