pip install nacal
Requirement already satisfied: nacal in /home/marcos/.local/lib/python3.9/site-packages (0.1.13) Requirement already satisfied: sympy>=1.1.0 in /usr/lib/python3/dist-packages (from nacal) (1.7.1) Note: you may need to restart the kernel to use updated packages.
from nacal import *
from IPython.display import display, Math
$ \renewcommand{\R}[1][{}]{{\mathbb{R}}^{#1}} \renewcommand{\Z}[1][{}]{{\mathbb{Z}}^{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\getitemR}[1]{\getItem{#1}} \renewcommand{\getItem}{\pmb{\mid}} \renewcommand{\elemR}[2]{{#1}^{\phantom{\T}}_{\getitemR{#2}}} \renewcommand{\elemRP}[2]{{\big(#1\big)}^{\phantom{\T}}_{\getitemR{#2}}} \renewcommand{\elemRPE}[2]{\big({#1}^{\phantom{\T}}_{\getitemR{#2}}\big)} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\Vect}[2][{}]{{\boldsymbol{#2}}_{#1}} \renewcommand{\eleVR}[2] {\elemR {\Vect{#1}}{#2}} % con subindices \renewcommand{\eleVRP}[2] {\elemRP {\Vect{#1}}{#2}} % con subindices y paréntesis interior \renewcommand{\eleVRPE}[2]{\elemRPE{\Vect{#1}}{#2}} % con subindices y paréntesis exterior %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\VectC}[2][{}] {\elemR {\Mat{#2}}{#1}} % con subindices \renewcommand{\VectCP}[2][{}] {\elemRP {\Mat{#2}}{#1}} % con subindices y paréntesis \renewcommand{\VectCPE}[2][{}]{\elemRPE{\Mat{#2}}{#1}} % con subindices y paréntesis exterior %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\mat}[1]{\mathbf{#1}} \renewcommand{\Mat} [2][{}]{{\mat{#2}}_{#1}} \renewcommand{\T}{\intercal} \renewcommand{\MatT}[2][{}]{{\mat{#2}}^{\T}_{#1}} \renewcommand{\VectC}[2][{}] {\elemR {\Mat{#2}}{#1}} % con subindices \renewcommand{\VectCP}[2][{}] {\elemRP {\Mat{#2}}{#1}} % con subindices y paréntesis \renewcommand{\VectCPE}[2][{}] {\elemRPE {\Mat{#2}}{#1}} % con subindices y paréntesis exterior \renewcommand{\VectCC}[2][{}] {\elemRR {\Mat{#2}}{#1}} % con () \renewcommand{\VectCCC}[2][{}] {\elemRRR{\Mat{#2}}{#1}} % con texto "col" %SELECCIÓNA de FILAS y COlUMNAS DE UNA MATRIZ TRANSPUESTA PARA GENERAR UN VECTOR DE Rn \renewcommand{\VectTC}[2][{}] {\elemR{\MatT{#2}\!}{#1}} % con subindices \renewcommand{\VectTCC}[2][{}] {\elemRR{ \MatT{#2}}{#1}} % con () \renewcommand{\VectTCCC}[2][{}] {\elemRRR{\MatT{#2}}{#1}} % con texto "col" $
${\huge\text{Jupyter notebook de la Lección 5}}$
Índice de contenidos de este notebook (Requiere ejecutar todo el Notebook para que aparezca el índice)
Considere las siguientes matrices cuadradas
A = Matrix([Vector([fracc(3, 4), fracc(1, 2), fracc(1, 4)]), \
Vector([fracc(1, 2), fracc(1, 1), fracc(1, 2)]), \
Vector([fracc(1, 4), fracc(1, 2), fracc(3, 4)])])
A
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
B = Matrix([[2,-1,0],[-1,2,-1],[0,-1,2]])
B
$\left[ \begin{array}{ccc}2&-1&0\\-1&2&-1\\0&-1&2\\ \end{array} \right]$
Si las multiplicamos, obtenemos la matriz identidad.
A*B
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Cuando multiplicamos dos matrices cuadradas A
y B
y obtenemos la matriz identidad, decimos que A
es la inversa de B
y que B
es la inversa de A
. En tal caso, B*A
también en la matriz identidad.
B*A
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Cuando una matriz tiene inversa, decimos que es invertible. Por ejemplo
( I(3) & T((-1,2,3)) ) * ( I(3) & T((1,2,3)) )
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
que es lo mismo que I(3) & T((-1,2,3) & T((1,2,3))
, o que
I(3) & T( [(-1,2,3), (1,2,3) ] )
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Es decir, la secuencia de transformaciones T( [(-1,2,3), (1,2,3) ] )
cambia la matriz sobre la que actua.
B & T( [(-1,2,3), (1,2,3) ] )
$\left[ \begin{array}{ccc}2&-1&0\\-1&2&-1\\0&-1&2\\ \end{array} \right]$
En este caso se dice que T((-1,2,3))
es la inversa de la transformación T((1,2,3))
, pues una deshace los cambios realizados por la otra.
Con **
calculamos las potencias de una transformación elemental. Por ejemplo podemos calcular el cuadrado de una transformación
T( (5,3) )**2
$\underset{\begin{subarray}{c} \left[\left(5\right)\mathbf{3}\right]\\\left[\left(5\right)\mathbf{3}\right]\end{subarray}}{\pmb{\tau}}$
Pero también su inversa
T( (5,3) )**(-1)
$\underset{\begin{subarray}{c} \left[\left(\frac{1}{5}\right)\mathbf{3}\right]\end{subarray}}{\pmb{\tau}}$
Pero tambien potencias de una secuencia de transformaciones
k=T( [T({2,3}), T([(-2,4), (1,2,3)]) ] )
k**2
$\underset{\begin{subarray}{c} \left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\\\left[\left(-2\right)\mathbf{4}\right]\\\left[\left(1\right)\mathbf{2}+\mathbf{3} \right]\\\left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\\\left[\left(-2\right)\mathbf{4}\right]\\\left[\left(1\right)\mathbf{2}+\mathbf{3} \right]\end{subarray}}{\pmb{\tau}}$
kinv = k**(-1)
kinv
$\underset{\begin{subarray}{c} \left[\left(-1\right)\mathbf{2}+\mathbf{3} \right]\\\left[\left(- \frac{1}{2}\right)\mathbf{4}\right]\\\left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\end{subarray}}{\pmb{\tau}}$
Así pues, al aplicar la secuencia y su inversa, la matriz se mantiene sin cambios
I(4) & k & kinv
$\left[ \begin{array}{cccc}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\ \end{array} \right]$
Fíjese que para invertir una secuencia de transformaciones, las transformaciones inversas se aplican en el orden inverso la ultima aplicada es la primera en ser invertida, la penúltima aplicada es la segunda en ser invertida, etc.
k & kinv
$\underset{\begin{subarray}{c} \left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\\\left[\left(-2\right)\mathbf{4}\right]\\\left[\left(1\right)\mathbf{2}+\mathbf{3} \right]\\\left[\left(-1\right)\mathbf{2}+\mathbf{3} \right]\\\left[\left(- \frac{1}{2}\right)\mathbf{4}\right]\\\left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\end{subarray}}{\pmb{\tau}}$
kinv & k
$\underset{\begin{subarray}{c} \left[\left(-1\right)\mathbf{2}+\mathbf{3} \right]\\\left[\left(- \frac{1}{2}\right)\mathbf{4}\right]\\\left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\\\left[\mathbf{2}\rightleftharpoons\mathbf{3}\right]\\\left[\left(-2\right)\mathbf{4}\right]\\\left[\left(1\right)\mathbf{2}+\mathbf{3} \right]\end{subarray}}{\pmb{\tau}}$
Un matriz cuadrada de orden $n$ es invertible si cualquiera de sus formas escalonadas tiene $n$ pivotes.
¿Es invertible la siguiente matriz C
?
C = Matrix([[1,1,-2],[1,-2,1],[-2,1,1]])
C
$\left[ \begin{array}{ccc}1&1&-2\\1&-2&1\\-2&1&1\\ \end{array} \right]$
ElimG(C)
$\left[ \begin{array}{ccc}1&0&0\\1&-3&0\\-2&3&0\\ \end{array} \right]$
¿Y la matriz M
de más abajo?
M = Matrix([[1,2,3,4,5],[0,0,-1,-9,1],[1,4,6,0,0],[0,1,0,1,0],[1,0,1,0,1]])
M
$\left[ \begin{array}{ccccc}1&2&3&4&5\\0&0&-1&-9&1\\1&4&6&0&0\\0&1&0&1&0\\1&0&1&0&1\\ \end{array} \right]$
ElimG(M)
$\left[ \begin{array}{ccccc}1&0&0&0&0\\0&-2&0&0&0\\1&0&2&0&0\\0&-3&1&33&0\\1&2&-2&-34&-230\\ \end{array} \right]$
¿Se le ocurre como continuar para llegar a obtener la matriz identidad de orden 5? Dado lo visto en el Notebook de la Lección 4, se dará cuenta que basta con aplicar la elimnación Gauss-Jordan.
ElimGJ(M)
$\left[ \begin{array}{ccccc}1&0&0&0&0\\0&1&0&0&0\\0&0&1&0&0\\0&0&0&1&0\\0&0&0&0&1\\ \end{array} \right]$
Ahora piense que en el atributo pasos
del resultado están
almacenadas todas la abreviaturas de los pasos dados para llegar a
transformar la matriz M
en la matriz identidad. Se le ocurre cómo
obtener con dichos pasos una matriz tal que multiplicada por M
nos
dé la matriz identidad? Si no se le ocurre, repase el Notebook de la
Leeción 4.
Y si hubiera intentado la misma estrategia con la matriz C
¿hubiera
logrado obtener la matriz identidad de orden 3? Si no lo ve claro,
repita la estrategia con C
en el siguiente recuadro.
Al principio de este notebook hemos visto que la matriz B
es
invertible. De hecho, encadenando transformaciones que finalmente nos den una matriz diagonal con los pivotes iguales a 1 obtenemos la matriz identidad. Por ejemplo, podemos usar la elimnación Gauss-Jordan que normaliza los pivotes. Guardemos en p
los pasos dados
p = ElimGJ(B,1).pasos
En el procedimiento de más arriba, las transformaciones elementales solo han actuado sobre las columnas, de manera que con dichas tranformaciones aplicadas sobre las columnas de B
obtenemos la matriz identidad
$$
\Mat[{\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}}]{B}
=
\Mat{I}
$$
Matrix(B) & T(p[1])
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Así pues, aplicando dicho pasos sobre las columnas de la matriz identidad obtendremos A
(que es la invesa de B
)
$$
\Mat[{\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}}]{B}
=
\Mat{B}\Big(\Mat[{\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}}]{I}\Big)
=
\Mat{I}
$$
I(B.n) & T(p[1])
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
donde la sucesión de transformaciones $({\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}})$ es T(p[1])
.
Es decir, si aplicamos una sucesión de transformaciones que transforman una matriz cuadrada en la matriz identidad
La misma sucesión de transformaciones T(p[1])
aplicada a la matriz identidad del mismo orden nos da la matriz inversa
El procedimiento visto en el aula y en las notas de clase para encontrar la inversa usando lápiz y papel elimina componentes a derecha e izquieda de cada pivote y normaliza los pivotes para que sean iguales a 1. Una implementación de esto es la subclase Inversa
de nuestra libreria. En su atributo pasos están todas las transformaciones aplicadas sobre las columnas.
B = Matrix([[2,-1,0],[-1,2,-1],[0,-1,2]])
p=InvMat(B,1).pasos
Si $\Mat{B}$ es invertible, entonces $\Mat{B}$ es la inversa de su inversa, es decir, la inversa de $\Mat[{\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}}]{I}$, y por tanto $\Mat{B}$ es producto de matrices elementales. Veamos que efectivamente $\Mat[({\mathbf{\tau}_{1}\dots\mathbf{\tau}_{k}})^{-1}]{I}\;$ (que es un producto de matrices elementales) es $\Mat{B}$:
p=InvMat(B).pasos
I(3) & T(p[1])**-1
$\left[ \begin{array}{ccc}2&-1&0\\-1&2&-1\\0&-1&2\\ \end{array} \right]$
pf=ElimGJF(B,1).pasos
por lo que aplicando las trasformaciones almacenadas en pf
sobre las filas de B
obtenemos la matriz identidad
T(pf[0]) & Matrix(B)
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
lo que quiere decir que aplicando dichas transformaciones a las filas de la matriz identidad obtenemos la inversa
T(pf[0]) & I(B.m)
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
Esto está implementado en InversaF
, de manera que en lugar de alargar las columnas se alargan las filas
Binv=InvMatF(B,1)
... ¿y por qué no aplicar operaciones tanto sobre las filas como sobre
las columnas? Como ahora veremos, no es muy práctico; pero desde
luego se puede hacer. Por ejemplo, encadenemos EGCN
a EGF
pfc=ElimGJ(ElimGF(B),1).pasos
en pfc
están almacenados los pasos
aplicados tanto sobre las filas
como sobre las columnas. Así aplicando T(pfc[0])
por la izquierda
(filas) como T(pfc[1])
por la derecha (columnas) sobre la matriz
B
, obtendremos la matriz identidad.
T(pfc[0]) & Matrix(B) & T(pfc[1])
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Si por una parte llamamos $\Mat{F}$ al producto de matrices elementales
T(pfc[0]) & I(3)
(es decir, a la aplicación de la lista de transformaciones elementales de las filas sobre las filas de la matriz identidad $\Mat{I}$)
F = T(pfc[0]) & I(3)
F
$\left[ \begin{array}{ccc}1&0&0\\1&2&0\\1&2&3\\ \end{array} \right]$
y por otra llamamos $\Mat{B}$ al producto de matrices elementales
I(3) & T(pfc[1])
(correspondiente a las transformaciones realizadas sobre las columnas)
C = I(3) & T(pfc[1])
C
$\left[ \begin{array}{ccc}\frac{1}{2}&\frac{1}{6}&\frac{1}{12}\\0&\frac{1}{3}&\frac{1}{6}\\0&0&\frac{1}{4}\\ \end{array} \right]$
Tenemos que $\Mat{FBC}$ es lo mismo que la transformación T(pfc[0]) & Matrix(B) & T(pfc[1])
de más arriba, y que por tanto tiene que ser
igual a la matriz identidad:
F*B*C
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Como $\Mat{C}$ es invertible (por ser producto de elementales), tenemos que (multiplicando ambos lados de la igualdad por $\Mat{C}$ por la izquierda y por $\Mat{C}^{-1}$ por la derecha)
$$ \Mat{F}\Mat{B}\Mat{C}=\Mat{I} \quad\Rightarrow\quad \Mat{C}\Mat{F}\Mat{B}\Mat{C}\Mat{C}^{-1}=\Mat{C}\Mat{I}\Mat{C}^{-1} \quad\Rightarrow\quad \Mat{C}\Mat{F}\Mat{B}=\Mat{I} $$es decir, que $\Mat{C}\Mat{F}$ es la inversa de $\Mat{B}$. Veámoslo:
(C*F) * B
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
es decir, que la inversa es el producto de las siguientes matrices
(donde A.m
y A.n
deben ser iguales, pues la matriz debe ser
cuadrada)
( I(B.n) & T(pfc[1]) ) * ( T(pfc[0]) & I(B.m) )
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
Este extraño procedimiento está implementado en InversaFC
, pero a
diferencia de los anteriores, tras operar no vemos la matriz inversa.
Para obtenerla es necesario multiplicar la matriz que queda debajo
($\Mat{C}$, correspondiente a las transformaciones de las columnas) por la matriz
de la derecha ($\Mat{F}$, correspondiente a las transformaciones de las filas).
InvMatFC(B,1)
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
Si tan solo queremos la matriz inversa (sin mirar los pasos empleados para obtenerla), lo podemos hacer con **
, que calcula potencias de una matriz cuadrada. Cuando el exponente es -1
, este método literalmente transforma la matriz en $\Mat{I}$ mediante una secuencia de transformaciones elementales que luego aplica a la $\Mat{I}$ para obtener la matriz inversa.
B**(-1)
$\left[ \begin{array}{ccc}\frac{3}{4}&\frac{1}{2}&\frac{1}{4}\\\frac{1}{2}&1&\frac{1}{2}\\\frac{1}{4}&\frac{1}{2}&\frac{3}{4}\\ \end{array} \right]$
Con **
podemos calcular otras potencias, como el cuadrado de la inversa.
B**(-2)
$\left[ \begin{array}{ccc}\frac{7}{8}&1&\frac{5}{8}\\1&\frac{3}{2}&1\\\frac{5}{8}&1&\frac{7}{8}\\ \end{array} \right]$
B*B*(B**(-2))
$\left[ \begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\ \end{array} \right]$
Si la matriz no es cuadrada, o si es sigular, intentar calcular la matriz inversa arroja un mensaje de error
---- FIN DE LA LECCIÓN -----
Lo que sigue es sólo para crear un índice de contenidos de este notebook (y se muestra al principio de la página)
%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')