# Resolución de sistemas de ecuaciones lineales

Juan Pablo Echeagaray González

Data Science Club Academy

27 de septiembre del 2021

## Librerías básicas

Siempre vale la pena tener estas 2 librerías a la mano, numpy suele ser mucho más eficaz que las funciones nativas de python en cuanto a operaciones matemáticas se refiere, y matplotlib es básicamente el estándar para realizar visualizaciones en este lenguaje.


```python
import numpy as np
import sympy as sm
```

Para más información, consulta el cuaderno de OneNote de la clase.

[Presiona aquí](https://tecmx-my.sharepoint.com/:o:/g/personal/a00830646_itesm_mx/EjsM5FC-YCxHnkM61ZZqfdwBub6PRS6cHAuM-EmeLETCEg?e=lLrH5s) para ver el cuaderno de OneNote.

## Ejemplos

### Ejemplo 1


```python
A = np.array([[1, 1, 1], [1, -1, 2], [2, 0, 3]])
b = np.array([[3], [2], [1]])
np.linalg.solve(A, b)
```


```python
augmented = np.concatenate((A, b), axis=1)
augmented = sm.Matrix(augmented)
augmented.rref()[0]
```




$\displaystyle \left[\begin{matrix}1 & 0 & \frac{3}{2} & 0\\0 & 1 & - \frac{1}{2} & 0\\0 & 0 & 0 & 1\end{matrix}\right]$



No te asustes por el error de la sección pasada, numpy ha funcionado como debería, y nos ha avisado que le fue imposible calcular el inverso de la matriz A, así que la función ```np.linalg.solve(A,b)``` nos dio un error.

El siguiente paso que podemos tomar es calcular su forma **RREF**, *row reduced echelon form*, y de ahí hacer el análisis pertinente. En este caso se tiene una incosistencia, ya que no es posible que al multiplicar un conjunto de variables por 0 y sumarlas se obtenga un 1.

### Ejemplo 2


```python
A = np.array([[1, 1, 1], [1, -1, 2], [0, 1, 1]])
b = np.array([[3], [2], [2]])
x = np.linalg.solve(A, b)
x
```




    array([[1.],
           [1.],
           [1.]])




```python
augmented = np.concatenate((A, b), axis=1)
augmented = sm.Matrix(augmented)
augmented.rref()[0]
```




$\displaystyle \left[\begin{matrix}1 & 0 & 0 & 1\\0 & 1 & 0 & 1\\0 & 0 & 1 & 1\end{matrix}\right]$



Aquí tenemos un ejemplo bonito, la función ```np.linalg.solve(A,b)``` pudo encontrar un vector que satisfaciera la ecuación matricial del sistema. No es necesario que hagamos otra operación, pero de cualquier manera quisiera que veas cómo se ve la matriz en su forma RREF.

Puedes notar que dentro de esa matriz se encuentra la mismísima matriz identidad I<sub>3</sub> , y a su derecha se encuentra el vector solución x.

### Ejemplo 3


```python
A = np.array([[1, 1, 1], [1, -1, 2], [2, 0, 3]])
b = np.array([[3], [2], [5]])
x = np.linalg.solve(A, b)
x
```


```python
augmented = np.concatenate((A, b), axis=1)
augmented = sm.Matrix(augmented)
augmented.rref()[0]
```




$\displaystyle \left[\begin{matrix}1 & 0 & \frac{3}{2} & \frac{5}{2}\\0 & 1 & - \frac{1}{2} & \frac{1}{2}\\0 & 0 & 0 & 0\end{matrix}\right]$



Este es por mucho el ejemplo más interesante de los 3. La función ```np.linalg.solve(A,b)``` no pudo encontrar un vector que satisfaciera la ecuación matricial del sistema, y la forma **RREF** de la matriz tiene una fila entera de ceros. Esto no significa que la matriz no tenga soluciones; no, al contrario, tiene una cantidad infinita de ellas!

Ve el cuaderno de la clase para que identifiques la forma que tiene la solución del sistema.

18684edb8feb7ea0e63f8c08f6684f5d6be38982
ipynb
Jupyter Notebook
Linear Algebra/lin_eq.ipynb
JuanEcheagaray75/DSC-scripts
f38ebcf274234fd969e0fb153ae5e756509bf1c3
Apache-2.0
Linear Algebra/lin_eq.ipynb
JuanEcheagaray75/DSC-scripts
f38ebcf274234fd969e0fb153ae5e756509bf1c3
Apache-2.0
Linear Algebra/lin_eq.ipynb
JuanEcheagaray75/DSC-scripts
f38ebcf274234fd969e0fb153ae5e756509bf1c3
Apache-2.0
Qwen/Qwen-72B
1. YES
2. YES