#<div class="alert alert-success">Matrices, operaciones y sistemas</div>


```python
from sympy import *
init_printing(use_latex='mathjax')
x, y, z = symbols('x, y, z')
```

Para construir matrices se utiliza el "contructor" **Matrix**, que crea un objeto de tipo matriz (en realidad el tipo lo denomina Sympy *MutableDenseMatrix*). Una matriz es una lista de listas y por lo tanto debemos escribir cada fila entre corchetes (aunque también se pueden utilizar tuplas, que se escriben con paréntesis). Como la matriz es también una lista, debe llevar otros corchetes. 

**Las operaciones con matrices se realizan con los operadores habituales**.

###<div class="alert alert-warning">Realiza operaciones con las matrices, comprobando que el producto no es conmutativo:</div>

$$ A=\begin{pmatrix}
5 & 7 & 8 \\
-3 & 4 & 2 \\
4 & 7 & 9 
\end{pmatrix}
\qquad
B =\begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{pmatrix}
$$


```python
A=Matrix(((2,3))); 
A.
```




$$\left[\begin{matrix}2\\3\end{matrix}\right]$$




```python
type(A)
```




    sympy.matrices.dense.MutableDenseMatrix




```python

```

Para calcular el determinante empleamos el método **det**, para la traza **trace** y para calcular la inversa el método **inv**, aunque ya hemos visto que podemos invertir una matriz elevando la matriz a $-1$. En el caso de una matriz no invertible se produce un error (lo que en Python se denomina una excepción). Para calcular la matriz transpuesta empleamos el método **T** o también **transpose**. 

###<div class="alert alert-warning">Calcula el determinante, la traza y la inversa de las matrices anteriores y de sus transpuestas.</div>


```python

```

Para calcular el rango empleamos **rank** y para reducir a la forma escalonada **rref**.

###<div class="alert alert-warning">Calcula el rango y la traza de las matrices. Reduce las matrices a la forma escalonada.</div>


```python

```


```python

```

Para "construir" matrices especiales  existen otros contructores. Los más sencillos son: **eye**, que crea la matriz identidad, **zeros**, que crea una matriz llena de ceros, **ones** que crea una matriz llena de unos y **diag** que crea una matriz con la diagonal que le especifiquemos.

###<div class="alert alert-warning">Crea matrices utilizando los constructores anteriores.</div>


```python
A=diag(3,5,7)
```


```python
type(A)
```




    sympy.matrices.dense.MutableDenseMatrix



Para resolver un sistema lineal podemos emplear el comando **solve**, escribiendo las ecuaciones entre corchetes y separados por comas. Pero  hay un comando especialmente dedicado: **solve_linear_system**. Tiene un único parámetro, que es la matriz ampliada del sistema. Además después debemos escribir, en orden, las variables del sistema.

###<div class="alert alert-warning">Resuelve el sistema lineal:</div>

$$
\begin{cases}
3x+2y-z=3\\
x+y-2z=-5\\
2x+y+3z=16
\end{cases}
$$


```python
M=Matrix([[3,2,-1,3],[1,1,-2,-5],[2,1,3,16]]); M
```




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




```python
solve_linear_system(M,x,y,z)
```




$$\begin{Bmatrix}x : 1, & y : 2, & z : 4\end{Bmatrix}$$



El método **row_del** sirve para borrar filas de una matriz.

###<div class="alert alert-warning">Borra la última fila del sistema y resuelve el sistema indeterminado.</div>


```python

```

Si intentamos resolver un sistema incompatible, Sympy no nos devuelve ninguna solución, por lo que parece que no está funcionando correctamente.

###<div class="alert alert-warning">Comprueba que el siguiente sistema es incompatible:</div>
$$
\begin{cases}
x+y-z &=1\\
x-y+3z&=3\\
3x+y+z &=6
\end{cases}
$$


```python
M=Matrix([[1,1,-1,1],[1,-1,3,3],[3,1,1,6]]);M
```




$$\left[\begin{matrix}1 & 1 & -1 & 1\\1 & -1 & 3 & 3\\3 & 1 & 1 & 6\end{matrix}\right]$$



Los sistemas compatibles indeterminados se caracterizan por tener infinitas soluciones. Desde un punto de vista geométrico, esto se debe a que la aplicación lineal tiene un núcleo no trivial. Para encontrar el núcleo de una matriz empleamos **nullspace**.

###<div class="alert alert-warning">Encontrar el núcleo de la matriz $B$.</div>


```python

```

171186a86f08d16d17f6780aa38b31b81b5776b8
ipynb
Jupyter Notebook
notebooks/14.- Matrices y sistemas.ipynb
disoftw/python-for-maths
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
notebooks/14.- Matrices y sistemas.ipynb
disoftw/python-for-maths
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
notebooks/14.- Matrices y sistemas.ipynb
disoftw/python-for-maths
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
2021-11-26T04:54:09.000Z
2021-11-26T04:54:09.000Z
Qwen/Qwen-72B
1. YES
2. YES