Risoluzione di sistemi con np.linalg.solve()

E' possibile utilizzare direttamente la funzione np.linalg.solve() per i sistemi la cui matrice incompleta è quadrata.

Risoluzione di sistemi lineari con riduzione di Gauss

Si ha il seguente sistema lineare da risolvere

\[ \begin{alignat*}{4} x_1 + 2x_2 + 3x_3 + 2x_4 = 2 \\ x_1 + 2x_2 + 4x_3 + 4x_4 = 5 \\ x_2 + 2x_3 + x_4 = 3 \end{alignat*}\]

# symbolic variables
x1, x2, x3, x4 = sp.symbols('x1 x2 x3 x4')
symbolic_vars = [x1, x2, x3, x4]

# Equazione definita con anche il termine di uguaglianza cambiato di segno
equations = [
   x1 + 2*x2 + 3*x3 + 2*x4 -2,
   x1 + 2*x2 + 4*x3 + 4*x4 -5,
   x2 + 2*x3 + x4 - 3
]

Si trova la matrice completa:

\[ (A|b) = \begin{bmatrix} 1 & 2 & 3 & 2 | 2 \\ 1 & 2 & 4 & 4 | 5 \\ 0 & 1 & 2 & 1 | 3 \end{bmatrix}\]

matrice_completa = matrix_representation(system=equations, syms=symbolic_vars)
"""
> [[1. 2. 3. 2. 2.]
 [1. 2. 4. 4. 5.]
 [0. 1. 2. 1. 3.]]
"""

Si esegue la riduzione gaussiana alla matrice

\[ (A|b) = \begin{bmatrix} 1 & 2 & 3 & 2 | 2 \\ 0 & 1 & 2 & 1 | 3 \\ 0 & 0 & 1 & 2 | 3 \end{bmatrix}\]

echelon_row_matrix = upper_triangular(matrice_completa)
"""
> [[1. 2. 3. 2. 2.]
 [0. 1. 2. 1. 3.]
 [0. 0. 1. 2. 3.]]
"""

Non ci sono righe nella forma \(\begin{bmatrix}0 & 0 & 0 & 0 | k\end{bmatrix}\) con k != 0 dunque il sistema è compatibile e ammette \(\infty^{n incognite - rango}\) soluzioni:

# remove zero rows
backsub_matrix = echelon_row_matrix[np.any(echelon_row_matrix != 0, axis=1)]

# initialise numerical solution
numeric_solution = np.array([0., 0., 0.])

rango = np.linalg.matrix_rank(matrice_completa)
nr_parametri = 4 - rango
print(nr_parametri)
"""
> 1
"""

Quindi si considera, alla luce delle \(\infty^1\) soluzioni, si considera un solo parametro libero. Viene preso \(x_4 = a\)

soluzioni = backsubstitution(backsub_matrix, symbolic_vars)
print(soluzioni)
"""
Soluzioni su x4:
> [-2.0*x4 - 1.0, 3.0*x4 - 3.0, 3.0 - 2.0*x4, x4]
"""

quindi posto \(x4 = a\):

\[ (-2a - 1, 3a - 3, 3 - 2a, a)\]

Esattamente come nell'esercizio nel link: https://www.youmath.it/lezioni/algebra-lineare/matrici-e-vettori/3848-metodi-risoluzione-sistemi-lineari.html

Le funzioni: matrix_representation, upper_triangular e backsubstitution sono in un file a parte (Funzioni).