Dimensione dello spazio delle soluzioni di un sistema lineare omogeneo:
rank()
)Dato il sistema:
Estrarre la base dello spazio delle soluzioni, che dovrebbe essere:
# 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 soluzioni.
Si risolve il sistema scegliendo come parametro libero (quindi passando alla funzione sp.solve()
le incognite e ).
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 che raccolti diventano .
I coefficienti trovati formano la base dello spazio, e corrispondono a quella dell’esercizio .
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]])
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]])