Ce face np.linalg.solve()
Un sistem de ecuații liniare se scrie ca A @ x = b: A conține coeficienții (câte un rând pentru fiecare ecuație), b conține termenii liberi, iar x necunoscutele. np.linalg.solve(A, b) returnează x.
A trebuie să fie pătrată (câte ecuații, atâtea necunoscute) și inversabilă. Dacă sistemul nu are soluție unică, funcția aruncă LinAlgError: Singular matrix. Rezultatul este float și poate avea erori mici de rotunjire; îl verifici cu np.allclose(A @ x, b).
Parametri
| Parametru | Descriere |
|---|---|
a |
Matricea coeficienților, pătrată, forma (n, n). |
b |
Termenii liberi: un vector de lungime n sau o matrice (n, k) pentru mai multe sisteme cu aceiași coeficienți. |
Ce returnează
Soluția x, cu aceeași formă ca b.
Exemple
Exemplul 1: Bilete pentru adulți și copii
La un spectacol s-au vândut 120 de bilete și s-au încasat 3600 de lei. Un bilet de adult costă 40 de lei, unul de copil 20 de lei. Sistemul: a + c = 120 și 40a + 20c = 3600.
import numpy as np
A = np.array([[1, 1], [40, 20]])
b = np.array([120, 3600])
adulti, copii = np.linalg.solve(A, b)
print("Adulți:", round(float(adulti)), "Copii:", round(float(copii)))
Rezultat
Adulți: 60 Copii: 60
Exemplul 2: Sistem cu trei necunoscute și verificare
import numpy as np
# 2x + y - z = 8
# -3x - y + 2z = -11
# -2x + y + 2z = -3
A = np.array([[2, 1, -1], [-3, -1, 2], [-2, 1, 2]])
b = np.array([8, -11, -3])
x = np.linalg.solve(A, b)
print(x.round(6))
print(np.allclose(A @ x, b))
Rezultat
[ 2. 3. -1.]
True
Exemplul 3: Sistem fără soluție unică
A doua ecuație este prima înmulțită cu 2, deci matricea este singulară.
import numpy as np
A = np.array([[1.0, 2.0], [2.0, 4.0]])
b = np.array([5.0, 10.0])
try:
np.linalg.solve(A, b)
except np.linalg.LinAlgError as e:
print("Nu se poate rezolva:", e)
Rezultat
Nu se poate rezolva: Singular matrix
Greșeli frecvente
- Pui coeficienții pe coloane în loc de rânduri: fiecare rând din
Atrebuie să fie o ecuație. - Verifici soluția cu
A @ x == bși primeștiFalsedin cauza rotunjirii. Foloseștenp.allclose(A @ x, b). - Dai un sistem cu mai multe ecuații decât necunoscute (
Anepătrată):solvedăLinAlgError. Pentru o soluție aproximativă foloseștenp.linalg.lstsq().
Comenzi înrudite
np.linalg.inv(): Calculează inversa unei matrice pătrate; pentru o matrice singulară aruncă LinAlgError.np.linalg.det(): Calculează determinantul unei matrice pătrate; rezultatul este float aproximativ, compară-l cu np.isclose sau rotunjește-l.np.matmul() și operatorul @: Înmulțirea de matrice cu np.matmul sau operatorul @; diferența față de *, care înmulțește element cu element.np.dot(): Calculează produsul scalar a doi vectori sau produsul matriceal a două matrice.