Sottospazi supplementari e sottospazi complementari

Se \(V = S \oplus T\) allora \(S\) e \(T\) sono sottospazi supplementari in \(V\). Per determinare se \(S\) e \(T\) sono supplementari bisogna verificare che \(V\) è somma diretta di \(S\) e \(T\) (vedi sezione precedente "Somma diretta di sottospazi vettoriali")

Trovare il complementare di \(S\) tale che \(V = S \oplus T\)

  • Se \(dim(S) = dim(V)\) sappiamo già che \(T = {0}\)
  • Se \(dim(S) < dim(V)\) allora si prende il sistema (o l'equazione cartesiana) che definisce \(S\) e si effettua il completamento a base (vedi sezione "Completamento a base e teorema di completamento").
  • Data la base risultante dal completamento e base di \(V\), si prendono solo i vettori di questa base che sono stati "aggiunti" con il completamento, e si ottiene il sistema che genera \(T\).

Esempio

Trovare un sottospazio supplementare di \(S = \{(x,y,z) \in \mathbb{R}^3 \quad | \quad x+3y+2z=0\}\) Prima cosa: ricavare una base di \(S\) per comprenderne la dimensione:

x,y,z = sp.symbols("x y z")
syms = [x,y,z]
system = [
    x+3*y-2*z
]
baseDaSpazioSoluzioniSistema(system, syms, [y, z])

Base trovata: Matrix([[-3, 1, 0], [2, 0, 1]])

Quindi \(dim(S) < dim(V)\) e \(dim(T)\) = 1. Si procede con il completamento a base:

"""Integra la base di S con la base canonica di R^3"""
completamento = []
completamento.append(base_S.row(0))
completamento.append(base_S.row(1))
completamento.append(sp.Matrix([[1,0,0]]))
completamento.append(sp.Matrix([[0,1,0]]))
completamento.append(sp.Matrix([[0,0,1]]))

print("Completamento: ", completamento)

base_ScT = estrapolaLinearmenteIndipendenti(completamento)
print("base ottenuta:", base_ScT)

Completamento: [Matrix([[-3, 1, 0]]), Matrix([[2, 0, 1]]), Matrix([[1, 0, 0]]), Matrix([[0, 1, 0]]), Matrix([[0, 0, 1]])] ... base ottenuta: [Matrix([[-3, 1, 0]]), Matrix([[2, 0, 1]]), Matrix([[1, 0, 0]])]

""" Rimuovendo i vettori della base S si ottengono i generatori di T """
generatore_T = base_ScT
generatore_T.remove(base_S.row(0))
generatore_T.remove(base_S.row(1))
print("generatore di T: ", generatore_T)

generatore di T: [Matrix([[1, 0, 0]])]

Come nell'esercizio, la base che conferma la dimensione 1 di \(T\).

Funzione riassumibile

def complementareS(incognite, sistema=None, parametri_liberi=None, base_S=None):
    dimensione_V = len(incognite)

    if base_S is None and sistema is not None:
        base_S = baseDaSpazioSoluzioniSistema(sistema, incognite, parametri_liberi)

    """ Se dimensione dim(S)=dim(V) non si procede, altrimenti dim(T) = dim(V)-dim(S) """
    dimensione_S = base_S.shape[0]
    print("Dimensione S: ", dimensione_S)

    if dimensione_S < dimensione_V:
        dimensione_T = dimensione_V-dimensione_S
        print("Dimensione T: ", dimensione_T)

        """Completamento: integra la base di S con la base canonica di R^3"""
        base_ScT = completamentoABase([base_S], dimensione_V)
        print("base ottenuta:", base_ScT)

        """ Rimuovendo i vettori della base S si ottengono i generatori di T """
        generatore_T = []
        for i in range(base_ScT.shape[0]):
            generatore_T.append(base_ScT.row(i))
        for i in range (dimensione_V - dimensione_T):
            generatore_T.remove(base_S.row(i))

        print("generatore di T: ", generatore_T)
        return generatore_T

Esempio 1 in spazio vettori (definiti da eq. cartesiana)

Trovare un sottospazio supplementare di \(S = \{(x,y,z) \in \mathbb{R}^3 \quad | \quad x+3y+2z=0\}\). Soluzione: \(T=Span((1,0,0))\).

x,y,z = sp.symbols("x y z")
incognite = [x,y,z]
sistema = [
    x+3*y-2*z
]
complementareS(incognite, sistema=sistema, parametri_liberi=[y,z])

Base trovata: Matrix([[-3, 1, 0], [2, 0, 1]]) Dimensione S: 2 Dimensione T: 1 base ottenuta: Matrix([[-3, 1, 0], [2, 0, 1], [1, 0, 0]]) generatore t init [Matrix([[-3, 1, 0]]), Matrix([[2, 0, 1]]), Matrix([[1, 0, 0]])] generatore di T: [Matrix([[1, 0, 0]])]

Come da esercizio.

Esempio 2 in spazio polinomi

Trovare un sottospazio supplementare di \(S = Span(1-x+x^2)\). Soluzione: \(T=Span(1,x^2)\)

t, x, x2 = sp.symbols("t x x2")
incognite = [t, x, x2]
complementareS(incognite, base_S=sp.Matrix([[1,-1,1]]))

Dimensione S: 1 Dimensione T: 2 base ottenuta: Matrix([[1, -1, 1], [1, 0, 0], [0, 1, 0]]) generatore di T: [Matrix([[1, 0, 0]]), Matrix([[0, 1, 0]])]

Come nell'esercizio (\(T'=Span((1,0,0),(0,1,0))\)), in quanto i polinomi di \(\mathbb{R}_2[x]\) i cui coefficienti sono le componenti dei vettori che generano \(T'\) formano un sottospazio supplementare di \(S\) cioè: \(T=Span(1,x^2)\)

Esempio 3 in spazio matrici

\(S=Span(\begin{bmatrix}0&0\\0&4\end{bmatrix},\begin{bmatrix}0&-1\\0&3\end{bmatrix},\begin{bmatrix}0&0\\-2&5\end{bmatrix},\begin{bmatrix}1&0\\0&-8\end{bmatrix})\)

a,b,c,d = sp.symbols("a b c d")

base_S = estrapolaLinearmenteIndipendenti(sp.Matrix([
    [0,0,0,4],
    [0,-1,0,3],
    [0,0,-2,5],
    [1,0,0,-8]
    ])
)
complementareS([a,b], base_S=base_S)

Dimensione S: 4

Che è pari alla dimensione di \(\mathbb{R}^4\) spazio vettoriale in cui ci si è spostati per il calcolo.

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/matrici-e-vettori/3874-sottospazio-supplementare-sottospazio-complementare.html