Numpy – Risolvere un sistema lineare
In questo capito vediamo come risolvere un semplice sistema lineare utilizzando numpy per python.
L’indice del corso lo puoi trovare a questo Link: https://computer4dummy.altervista.org/programmazione-guide-alla-programmazione/numpy-per-python/
Problema
Supponiamo di dover risolvere un equazione lineare ad una incognita come la seguente:
Ax = b
Per trovare x si procede a calcolare la matrice inversa di A moltiplicata b.
Quindi in Python definite le due matrici:
import numpy as np A = np.array([[1,2],[3,4]]) b = np.array([1,2])
Per trovare x usiamo le seguenti funzioni:
x = np.linalg.inv(A).dot(b) x Out[5]: array([2.22044605e-16, 5.00000000e-01])
Solve
Numpy mette a disposizione una funzione che risolve l’equazione in maniera più diretta.
x = np.linalg.solve(A, b) x Out[7]: array([0. , 0.5])
Il risultato è lo stesso, nel primo caso i numeri sono espressi in notazione scientifica mentre con la funzione solve no.
Esempio pratico
Proviamo a risolvere un esempio pratico supponendo che il prezzo del biglietto per una fiera è di 1,50€ per i bambini mentre è di 4.00€ per gli adulti.
Sappiamo che alla fine della giornata sono entrate 2200 persone ed il guadagno totale è di 5050€.
Quanti bambini e quanti adulti sono entrati in quella giornata?
La risoluzione è la seguente:
A = numero di adulti
B = numero di bambini
A + B = 2200
1.5*B + 4*A = 5050
Possiamo ora definire le due matrici M1 = ([[1,1],[1.5,4]]) e M2 = ([2200, 5050]) .
M1 = np.array([[1,1],[1.5,4]]) M2 = np.array([2200, 5050]) M1 Out[10]: array([[1. , 1. ], [1.5, 4. ]]) M2 Out[11]: array([2200, 5050])
Risolviamo il problema utilizzando la funzione solve.
np.linalg.solve(M1, M2) Out[12]: array([1500., 700.])
Alla fine otteniamo che sono entrati alla fiera 1500 bambini e 700 adulti.