Resolver sistemas lineales en Python
solve es la respuesta correcta; invertir la matriz no lo es.
import numpy as np
A = np.array([[3.0, 1.0], [1.0, 2.0]])
b = np.array([9.0, 8.0])
x = np.linalg.solve(A, b)
print(x, np.allclose(A @ x, b))
print(np.linalg.det(A).round(3), np.linalg.matrix_rank(A))
print(np.linalg.norm(x).round(3))
alta = np.array([[1.0, 1.0], [1.0, 2.0], [1.0, 3.0]])
ajuste, *_ = np.linalg.lstsq(alta, np.array([2.0, 4.0, 6.1]), rcond=None)
print(ajuste.round(3))
Cómo funciona
solvees más rápido y mejor condicionado que una inversa explícita.allclosees cómo se comparan los resultados de punto flotante.lstsqmaneja el caso sobredeterminado.
Palabras clave y builtins usados aquí
asprint
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 388
- Tokens
- 169
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 92 segundos.
Paso 3 de 4 en Matemática y memoria; paso 18 de 22 en NumPy.