9 - Base dello spazio delle soluzioni di un sistema lineare omogeneo

Dimensione e base dello spazio delle soluzioni di un sistema lineare omogeneo

Dimensione dello spazio delle soluzioni di un sistema lineare omogeneo:

  1. scrivere la matrice incompleta AA dei coefficenti del sistema
  2. determinare rango di AA (rank())
  3. con nn numero delle incognite, la dimensione è nrk(A)n - rk(A)
  • se n=rk(A)n = rk(A) la dimensione dello spazio delle soluzioni è 0, di conseguenza non se ne cerca la base
  • se n>rk(A)n > rk(A) si cerca la base andando a sostiture nrk(A)n - rk(A) incognite con nrk(A)n - rk(A) parametri liberi. Quindi si sostituiscono le incognite del sistema con i parametri liberi individuando le nrk(A)\infty^{n-rk(A)} soluzioni. A questo punto si mettono i parametri liberi a fattor comune costruendo la combinazione lineare i cui vettori che la costituiscono sono la base dello spazio delle soluzioni.

Esempio

Dato il sistema:
x2y=0x-2y=0
x+y+z=0x+y+z=0
Estrarre la base dello spazio delle soluzioni, che dovrebbe essere:
β={(2,1,3)}\beta=\{(2,1,-3)\}

# matrice incompleta
A = sp.Matrix([[1,-2,0],[1, 1, 1]])
# numero soluzioni
rango = A.rank()
nr_parametri = 3 - rango
print(nr_parametri)

1

Ammette 1\infty^{1} soluzioni.

Si risolve il sistema scegliendo yy come parametro libero (quindi passando alla funzione sp.solve() le incognite xx e zz).

    x,y,z,a = sp.symbols("x y z a")
    syms = [x,y,z]
    system = [
        x - 2*y,
        x+y+z
    ]
    sol = sp.solve(system, [x,z])
    print(s)

Quindi (2y,y,3y)(2y, y, -3y) che raccolti diventano y(2,1,3)y(2,1,-3).
I coefficienti trovati formano la base dello spazio, e corrispondono a quella dell’esercizio {(2,1,3)}\{(2,1,-3)\}.

Funzione riassumibile

def baseDaSpazioSoluzioniSistema(sistema, incognite, parametri_liberi=None):
    """
    parametri_liberi: se si vogliono specificarli per avere stessa soluzione dell'esercizio
    """
    dimensione = len(incognite)
    _orig_incognite = incognite.copy()
    """matrice incompleta"""
    A, b = sp.linear_eq_to_matrix(sistema, incognite)
    rango = A.rank()
    nr_parametri = dimensione - rango
    print("Parametri liberi: ", nr_parametri)
    if nr_parametri is 0:
        print("Non ammette soluzioni")
        return
    if parametri_liberi is None:
        parametri_liberi = []
        for i in range(nr_parametri):
            parametri_liberi.append(incognite.pop(i))
    else:
        for parametro_libero in parametri_liberi:
            incognite.remove(parametro_libero)
    soluzioni = sp.solve(sistema, incognite)
    print("Soluzioni sistema: ", soluzioni)
    """ trasformazione soluzione in base """
    base = sp.zeros(len(parametri_liberi), dimensione)
    """ Raccogli soluzioni per costruire base """
    for i in range(len(parametri_liberi)):
        for j in range(dimensione):
            if len(soluzioni) > 0 and soluzioni.get(_orig_incognite[j]):
                base[i,j] = soluzioni.get(_orig_incognite[j]).coeff(parametri_liberi[i])
            elif _orig_incognite[j] == parametri_liberi[i]:
                base[i,j] = 1
            else:
                base[i,j] = 0
    print("Base trovata: ", base)
    return base

Es. con esercizio prima:

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

Parametri liberi: 1
Soluzioni sistema: {x: 2y, z: -3y}
Base trovata: Matrix([[2, 1, -3]])

Altro esercizio:

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

Parametri liberi: 1
Soluzioni sistema: {y: -2x, z: -8x}
Base trovata: Matrix([[1, -2, -8]])

Esempio di un sistema lineare parametrico a 2 parametri liberi

Due vettori compongono la base trovata.

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

Parametri liberi: 2
Soluzioni sistema: {s: 5x/11 - z/11 + 1/11, t: x/11 + 2z/11 - 2/11, y: 3}
Base trovata: Matrix([[1, 0, 0, 5/11, 1/11], [0, 0, 1, -1/11, 2/11]])

Riferimenti