jueves, 29 de diciembre de 2022

Resolución de un problema de números enteros que pasa por resolver una ecuación diofántica lineal

En otro artículo de este blog resolví una ecuación diofántica lineal mediante un procedimiento muy básico, sin utilizar el método habitual, llamémosle estándar, basado en el lema de Bézout (también conocido como identidad de Bézout). Ahora voy a resolver el mismo problema, empleando este procedimiento estándar. El problema era el siguiente:

Se nos informa de que dos equipos, $X$ e $Y$, (del deporte que queráis imaginar) han jugado un conjunto de partidos, de tal manera que el doble de los partidos ganados por $X$ más el número de partidos ganados por $Y$ es igual a $12$. ¿Cuáles son las maneras (resultados) en que tal cosa ha podido acontecer?.

-oOo-

Recordemos sucintamente, primero, en qué consiste —en otros artículos de este mismo blog ya he trato este asunto— este procedimiento estándar. Sea la ecuación diofántica lineal $ax+by=c\; a,b\in \mathbb{Z}$, entonces existe solución, esto es, un conjunto de parejas de números enteros $(x,y)$ que satisfacen dicha ecuación, si y sólo si el máximo común divisor de los coeficientes $a$ y $b$, $\text{m.c.d}(a,b)$ (que denotaremos de manera abreviada por $d$), es divisor del coeficiente $c$ (el resto de la división entera $d\div c$ es $0$), lo cual se suele denotar por $d|c$.

Si existiese solución, para encontrar el conjunto de pares $(x,y)$ de números enteros que la conforman, se procede primero a encontrar una pareja cualesquiera que satisfaga la igualdad numérica expresada en la ecuación (esta pareja de números es pues una solución particular, y la denotaremos por $(x_P,y_P)$; y, a continuación, encontramos las otras parejas de la siguiente forma $$\left\{\begin{matrix}x=x_P+\lambda\cdot \dfrac{b}{d} \\ y=y_P-\lambda\cdot \dfrac{a}{d} \end{matrix}\right.\; \text{donde}\, \lambda \in \mathbb{Z}$$ que constituyen la solución general.

-oOo-

Procedo, pues. La ecuación diofántica lineal que hay que resolver es $2x+y=12$. Los coeficientes de la ecuación son $a=2$ y $b=1$. Parto de una solución particular, pongamos que de la pareja formada por $x_P=5$ e $y_P=2$ —cumple la igualdad $2x+y=12$; en efecto: $2\cdot 5 +2 = 12$—, que, como he anunciado, denoto de la forma $(5,12)$. Por otra parte el máximo común divisor de los coeficientes $a=2$ y $b=1$ es, $d=1$. Así pues, las otras parejas han de ser de la forma: $$\left\{\begin{matrix}x=5+\lambda\cdot \dfrac{1}{1}=5+\lambda \\ y=2-\lambda\cdot \dfrac{2}{1}=2-2\lambda \end{matrix}\right.\; \text{donde}\, \lambda \in \mathbb{Z}$$ Teniendo en cuenta el sentido «físico» de la solución, es claro que no todo valor de $\lambda \in \mathbb{Z}$ (hay infinitos, por supuesto) proporciona una pareja que forme parte de la solución. Hay que ir probando valores consistentes con la naturaleza de la solución. Así pues, voy a ir dando valores al parámetro $\lambda$ para así ir encontrando el resto de parejas. Es conveniente empezar a probar valores de $\lambda$ pequeños (en valor absoluto) y ir aumento incrementándolos/decrementándolos según proceda:

  • Si $\lambda=0$, entonces $x=5+0=5$ y $y=2-2\cdot 0=2-0=2$, esto es obtenemos la pareja $(5,2)$ como parte de la solución general.
  • Si $\lambda=1$, entonces $x=5+1=6$ y $y=2-2\cdot 1=0$, esto es obtenemos la pareja $(6,0)$ como parte de la solución general.
  • Si $\lambda=-1$, entonces $x=5+(-1)=4$ y $y=2-2\cdot (-1)=4$, esto es obtenemos la pareja $(4,4)$ como parte de la solución general.
  • Si $\lambda=2$, entonces $x=5+2=7$ y $y=2-2\cdot 2=-2\lt 0$, que no tiene sentido en nuestro problema, y por tanto este valor de $\lambda$ no aporta nada a la solución, como tampoco lo hacen (por la misma razón) los valores de $\lambda$ mayores que $2$
  • Si $\lambda=-2$, entonces $x=5+(-2)=3$ y $y=2-2\cdot (-2)=6$, esto es obtenemos la pareja $(3,6)$ como parte de la solución general.
  • Si $\lambda=-3$, entonces $x=5+(-3)=2$ y $y=2-2\cdot (-3)=8$, esto es obtenemos la pareja $(2,8)$ como parte de la solución general.
  • Si $\lambda=-4$, entonces $x=5+(-4)=1$ y $y=2-2\cdot (-4)=10$, esto es obtenemos la pareja $(1,10)$ como parte de la solución general.
  • Si $\lambda=-5$, entonces $x=5+(-5)=0$ y $y=2-2\cdot (-5)=12$, esto es obtenemos la pareja $(0,12)$ como parte de la solución general.
  • Si $\lambda=-6$, entonces $x=5+(-6)\lt 1$ y por tanto este valor de $\lambda$ no aporta nada a la solución, como tampoco lo hacen (por la misma razón) los valores de $\lambda$ menores que $-6$. Y, aquí, terminamos.

En conclusión, la solución de la ecuación diofántica propuesta está formada por las siguientes parejas de números $(x,y)$, enteros no negativos: $$\{(5,2),(6,0),(4,4),(3,6),(2,8),(1,10),(0,12)\}$$

$\diamond$

-oOo-

Referencias

[1] E. Bujalance, et. al, Elementos de matemática discreta (3ª edición), Sanz y Torres, Madrid, 2005

lunes, 26 de diciembre de 2022

Programación en Python. Implementación en la calculadora Numworks

El siguiente ejemplo de elaboración de programas empleando Python es muy sencillito. Puedes implementarlo en tu ordenador —instalando previamente el intérprete y algún enterno de programación de Python—, o si dispones de de una Raspberry Pi. Si dispones de alguna calculadora programable en este lenguaje (por ejemplo la calculadora NumWorks), a cuyo emulador en línea puede acceder siguiendo este enlace: https://www.numworks.com/simulator/. Te irás acostumbrando poco a poco de servirte de este efectivo recurso: investigar y poder resolver problemas mediante este recurso numérico (escribiendo algoritmos).

Ejemplo. Cálculo del factorial de $n \in \mathbb{Z}\cup \{0\}$, $n!:=n\cdot (n-1)\cdot (n-2)\cdot \ldots \cdot 1$, siendo $0!=1$

def factorial(n):
    resultado = 1
    for i in range(1, n+1):
        resultado *= i
    return resultado

print(factorial(5))  # imprime 120 (5! = 1 * 2 * 3 * 4 * 5)

$\diamond$

Un caso sencillo de ecuación diofántica lineal, resuelta sin utilizar la identiad de Bézout

En este artículo expongo la resolución de un problema que consiste en resolver una sencilla ecuación con coeficientes enteros cuyas solución debe estar en el conjunto de los números enteros (ecuación diofántica), que, en este caso en particular han de ser no negativos. Y dice así:

Se nos informa de que dos equipos, $X$ e $Y$, (del deporte que queráis imaginar) han jugado un conjunto de partidos, de tal manera que el doble de los partidos ganados por $X$ más el número de partidos ganados por $Y$ es igual a $12$. ¿Cuáles son las maneras (resultados) en que tal cosa ha podido acontecer?.

Escribo primero la ecuación pertinente, de acuerdo con la información del enunciado: $$2x+y=12$$ Desde luego, habrá la solución de dicha ecuación estará formada por más de una pareja de números enteros no negativos — como valores de las variables (incógnitas)—, que denoto por $(x,y)$, y que, al sustituirlos en la ecuación, cumplirán la igualdad numérica entre los dos miembros de la misma, razón por la cual, esta ecuación hay que resolverla en el conjunto de los números naturales, con el añadido del número $0$. Podemos decir, por ello, que es una ecuación diofántica, si bien muy sencilla. Tendremos que contemplar tres casos, que debemos examinar:

  1. Caso en que $a=b$
      Entonces, la ecuación pasa a ser $2x+x=12$, y por tanto, $3x=12$, de la cual se obtiene que $x=4$ y, por supuesto, $y=4$. Así, tenemos que en la solución está la pareja $(4,4)$
  2. Caso en que $x\gt y$
      Siendo así, $12=2x+y\lt 2x+x$, es decir $3x \gt 12$ y, por tanto, $x \gt 4$; por otra parte, al ser $y\gt 0$, se tiene que $2x\le 12$, luego $x\le 6$. Entonces, los posibles valores de $x$ que aportan solución son tales que $4\lt x \le 6$. Dicho de otro modo, los valores que, en principio, puede tomar $x$ ante esa posibilidad son: $\{5,6\}$. Examino a continuación, qué valores de $y$ corresponden a cada uno de éstos (a partir del despeje de $b$ en la ecuación: $y=12-2x$):
    • Si $x=5$, entonces $y=12-2\cdot 5=12-10=2$, luego $(5,2)$ forma parate de la solución
    • Si $x=6$, entonces $y=12-2\cdot 6=12-12=0$, luego otra pareja que forma parte de la solución es $(6,0)$
    • Si $x=7$, entonces $y=12-2\cdot 7=12-14=-2 \notin \mathbb{N} \cup \{0\} $, por lo que este valor de $x$ no aporta nada a la solución
    Observación: Obviamente, como ya se ha avanzado, si $x \gt 7$, se obtienen números negativos para $y$.
  3. Caso en que $y\gt x$
      Siendo así, $12=2x+y \lt 2y+y=3y$, es decir $3y \gt 12$ y, por tanto, $y \gt 4$; y, como, por otra parte, $y\le 12$, los valores posibles son tales que $4 \lt y \le 12$; dicho de otro modo, los valores a examinar que puede tomar $x$ ante esa posibilidad son: $\{5,6,7,8,9,19,11,12\}$. A continuación, voy a examinar de dicho conjunto dan valores de $x$ que sean consistentes, a partir del despeje de $x$ en la ecuación: $x=\dfrac{12-y}{2}$:
    • Si $y=5$, entonces $x=\dfrac{12-5}{2}=\dfrac{7}{2} \notin \mathbb{N}\cup \{0\}$, por lo que este valor no aporta nada a la solución
    • Si $y=6$, entonces $x=\dfrac{12-6}{2}=\dfrac{6}{2}=3 \in \mathbb{N}\cup \{0\}$, luego $(3,6)$ forma parte de la solución
    • Si $y=7$, entonces $x=\dfrac{12-7}{2}=\dfrac{5}{2} \notin \mathbb{N}\cup \{0\}$, por lo que este valor no aporta nada a la solución
    • Si $y=8$, entonces $x=\dfrac{12-8}{2}=\dfrac{4}{2}=2 \in \mathbb{N}\cup \{0\}$, luego $(2,8)$ forma parte de la solución
    • Si $y=9$, entonces $x=\dfrac{12-9}{2}=\dfrac{3}{2} \notin \mathbb{N}\cup \{0\}$, por lo que este valor no aporta nada a la solución
    • Si $y=10$, entonces $x=\dfrac{12-10}{2}=\dfrac{2}{2}=1 \in \mathbb{N}\cup \{0\}$, luego $(1,10)$ forma parte de la solución
    • Si $y=11$, entonces $x=\dfrac{12-11}{2}=\dfrac{1}{2} \notin \mathbb{N}\cup \{0\}$, por lo que este valor no aporta nada a la solución
    • Si $y=12$, entonces $x=\dfrac{12-12}{2}=\dfrac{0}{2}=0 \in \mathbb{N}\cup \{0\}$, luego $(0,12)$ forma parte de la solución

En conclusión, la solución de la ecuación diofántica propuesta está formada por las siguientes parejas de números $(x,y)$, enteros no negativos: $\{(4,4),(5,2),(6,0);(3,6),(2,8),(1,10),(0,12)\}$.

$\diamond$

miércoles, 21 de diciembre de 2022

Resolución de un sistema de ecuaciones lineales compatible determinado por el método de la matriz inversa (realizando los cálculos con GNU Octave)

Consideremos el siguiente sistema de ecuaciones lineales con tres incóngitas $$\left.\begin{matrix}x&+&y&+&z&=&1 \\ x&-&2y&+&3z&=&2 \\ x&+&3y&-&z&=&3\end{matrix}\right\}$$ que en forma matricial puede escribirse de la forma $$\begin{pmatrix} 1 & 1 & 1 \\ 1 & -2 & 3 \\ 1 & 3 & -1 \end{pmatrix}\,\begin{pmatrix} x \\ y \\ z\end{pmatrix}=\begin{pmatrix} 1 \\ 2 \\ 3\end{pmatrix}$$ Entendiendo por $A$ la matriz de los coeficientes del sistema, por $X$ el vector columna de las incóngnitas y por $B$ el vector columna de los términos independientes, podemos escribir la ecuación matricial $$AX=B$$ Multiplicando ambos miembros por $A^{-1}$, se tiene que $A^{-1}AX=A^{-1}B$, y como $A^{-1}A=I$ (matriz identidad), teniendo en cuenta que $IX=X$, llegamos a $$X=A^{-1}B$$ Esto constituye el método de la matriz inversa para resolver el sistema de ecuaciones, obteniendo éstas, esto es, el vector columna de las incógnitas, que, claro está, para poder aplicarlo es necesario que $\text{det}(A)\neq 0$ (el sistema tiene que ser compatible).

Voy ahora a resolverlo, con la ayuda del GNU Octave:

  >> A=[1,1,1;1,-2,3;1,3,-1]
A =

   1   1   1
   1  -2   3
   1   3  -1
   
>> det(A)
ans = 2
% Como el determinante de la matriz de los coeficientes es
% distinto de cero, la matriz es regular (inversible) y su 
% rango es 3; en efecto,

>> rank(A)
ans = 3


% luego el sistema es compatible. 
% Además, es compatible, habida cuenta de que 
% el rango de la matriz ampliada es también 3,

% (en efecto, el rango de la matriz ampliada es 3)

>> A_a=[1,1,1,1;1,-2,3,2;1,3,-1,3]
A_a =

   1   1   1   1
   1  -2   3   2
   1   3  -1   3

>> rank(A_a)
ans = 3

% Por otra parte, el rango, que es 3, 
% es igual al número de incóngitas
% por lo que el sistema es (compatible) determinado


% Procedo a resolverlo,
% calculando la matriz inversa de A: 
>> A_i=inv(A)
A_i =

  -3.5000   2.0000   2.5000
   2.0000  -1.0000  -1.0000
   2.5000  -1.0000  -1.5000


% Compruebo que está bien calculada:
% el producto de la matriz A por su inversa
% (y el de la inversa de A por A)
% ha de ser igual a la matriz identidad

>> I=[1,0,0;0,1,0;0,0,1]
I =

   1   0   0
   0   1   0
   0   0   1


>> A_i*A
ans =

   1.0000   0.0000        0
        0   1.0000        0
        0   0.0000   1.0000

>> A*A_i
ans =

   1.0000        0        0
   0.0000   1.0000   0.0000
        0        0   1.0000

% Finalmente, calculo el vector de las incóngitas X:

% (defino antes el vector de los términos independientes)
>> B=[1;2;3]
B =

   1
   2
   3

% Y he aquí la solución del sistema
>> X=A_i*B
X =

   8
  -3
  -4

% Compruebo la solución, sustituyendo en las ecuaciones
% los valores de las incóngitas que acabamos de calcular

% Substituyo en la primera ecuación
>> X(1)+X(2)+X(3)
ans = 1
que, en efecto, es el valor 
del término independiente de la misma


% Substituyo en la segunda ecuación
>> X(1)-2*X(2)+3*X(3)
ans = 2
que, en efecto, es el valor 
del término independiente de la misma

% Substituyo en la tercera ecuación
>> X(1)+3*X(2)-X(3)
ans = 3
que, en efecto, es el valor 
del término independiente de la misma

$\diamond$

-oOo-

Referencias

[1] J.F. Fernando; J.M. Gamboa; J.M. Ruiz, Álgebra lineal (vol. 1), Sanz y Torres, Madrid, 2011
[2] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

martes, 20 de diciembre de 2022

Cálculo rápido del determinante de una matriz cuadrada $A$, dada ésta factorizada como $A=LU$

Es sabido que dadas dos matrices cuadradas y del mismo orden, $A$ y $B$, se tiene que $\text{det}(AB)=\text{det}(A)\cdot \text{det}(B)$; por tanto, si una matriz $M$ viene ya expresada como el producto de una matriz triangular inferior por una matriz triangular superior (factorización $M=LU$) —ya se trate de la factorización de Crout o bien de la de Doolittle—, el cálculo del determinante de $M$ es muy rápido.

Teniendo en cuenta que el determinante de una matriz cuadrada triangular es igual al producto de los elementos de su diagonal principal, entonces el cálculo del determinante de $\text{det}(M)=\text{det}(L)\cdot \text{det}(U)$ requiere únicamente $n-1$ multiplicaciones (el producto de los elementos de la diagonal principal del factor que no tenga unos en la misma), ya que la otra matriz factor tiene determinante igual a $1$, habida cuenta de que los elementos de su diagonal principal son todos ellos unos.

Ejemplo con una matriz $M=LU$ (factorizada por el m. de Doolittle: matriz $L$ con unos en la diagonal principal)

Con $2$ multiplicaciones podemos calcular el determinante de una matriz cuadrada de orden $3$, siempre que conozcamos la factorización $LU$ de la misma. Hago los cálculos de comprobación con GNU Octave:

% Sea la matriz   
   A=[1,-1,2;1,2,2;1,1,-1]
A =

   1  -1   2
   1   2   2
   1   1  -1

>> [L,U]=lu(A)
L =

   1.0000        0        0
   1.0000   1.0000        0
   1.0000   0.6667   1.0000

U =

   1  -1   2
   0   3   0
   0   0  -3


% det(L)=1 (no hace falta hacer ningún cálculo, pues
% de antemano conocemos este resultado, puesto que
% L es una matriz diagonal con unos en la diagonal
% principal, y, por tanto, su determinante es igual a 1)

% A continuación vemos las dos multiplicaciones que 
% he comentado arriba:
% det(U)=1·3·(-3)=(1\cdot 3)\cdot (-3)=-9

% En efecto, por el algoritmo por defecto:
>> det(U)
ans = -9

% Así pues det(L)·det(U)=1·(-9)=-9
% en efecto, por el algoritmo por defecto:
>> det(L)*det(U)
ans = -9

% y nótese que, por el algoritmo por defecto,
>> det(A)
ans = -9

  

$\diamond$

-oOo-

Referencias

[1] J.F. Fernando; J.M. Gamboa; J.M. Ruiz, Álgebra lineal (vol. 1), Sanz y Torres, Madrid, 2011
[2] F. García; A. Nevot, Análisis numérico, Paraninfo, Madrid, 1992
[3] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

Cálculo de la matriz canónoca de Jordan de la matriz de un endomorfismo mediante el uso de GNU Maxima

En este artículo expongo un sencillo ejemplo de cálculo de la matriz canónica de Jordan (en la base adecuada) de la matriz dada (referida a la base canónica) de un cierto endomorfismo, empleando las utilidades de GNU Maxima, que es una buena herramienta CAS para este tipo de trabajos.


$\diamond$

-oOo-

Referencias

[1] L. Merino; E. Santos, Álgebra Lineal con métodos elementales, Paraninfo-Thomson, Madrid, 2007
[2] E. Hernández, Álgebra y geometría, Addison-Wesley/UAM, Madrid, 1994
[3] S. Xambó, Álgebra lineal y geometrías lineales, Eunibar, Barcelona, 1977
[4] J.F. Fernando; J.M. Gamboa; J.M. Ruiz, Álgebra lineal (vol. 2), Sanz y Torres, Madrid, 2010
[5] Documentación oficial en la red Internet sobre el uso de GNU Maxima, https://maxima.sourceforge.io/documentation.html

lunes, 19 de diciembre de 2022

Operaciones sencillas con matrices empleando GNU Octave

En este artículo expongo un sencillo divertimento del uso del programa GNU Octave con el cálculo con matrices, que, si bien no tiene una utilidad práctica evidente, puede ser de utilidad para juagar y familiarizarnos con el uso de este software.

Podemos descomponer una matriz, $A$, como la suma de la matriz formada por los elementos que quedan por debajo de la diagonal principal (incluidos éstos) —siendo los restantes (los de la parte superior a la misma nulos)— y la matriz formada por los elementos que quedan por por encima de la diagonal principal (incluidos éstos) —siendo los restantes (los de la parte inferior a la misma nulos)—, restando al resultado de esta suma la matriz diagonal formada por los elementos de la diagonal principal de la matriz $A$ (puesto que con la suma de la primera y segunda matriz sumamos dos veces los elementos de la diagonal principal). Veamos un ejemplo:

>> A=[1,2,3;4,5,6;7,8,9]
A =

   1   2   3
   4   5   6
   7   8   9

>> tril(A)
ans =

   1   0   0
   4   5   0
   7   8   9

>> triu(A)
ans =

   1   2   3
   0   5   6
   0   0   9

>> triu(A)+tril(A)
ans =

    2    2    3
    4   10    6
    7    8   18
    
>> diag=[1,0,0;0,5,0;0,0,9]
diag =

   1   0   0
   0   5   0
   0   0   9

Comprobémoslo:
>> tril(A)+triu(A)-diag
ans =

   1   2   3
   4   5   6
   7   8   9
que es la matriz A de partida.   

-oOo-

Referencias

[1] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

$\diamond$

domingo, 18 de diciembre de 2022

Diagonalización de matrices con GNU Octave. Valores y vectores propios

Para obtener los valores propios y los vectores propios de una matriz $A$ existe también una instrucción en GNU Octave. A modo de ejemplo, voy encontrar los valores y vectores propios de la matriz de orden $3$ $$A=\begin{pmatrix}1&2&3\\ 4&5&6 \\ 7&1&9 \end{pmatrix}$$ utilizando GNU Octave (de manera automática). La instrucción nos da la matriz del cambio de base $C$, siendo por tanto los coeficiente de la misma, por columnas, las coordenadas de los vectores propios; además, $D$ representa la matriz diagonal: en cuya diagonal principal tendremos los valores propios correspondientes.

  >> A=[1,2,3;4,5,6;7,1,9]
A =

   1   2   3
   4   5   6
   7   1   9

>> [C,D]=eig(A)
C =

  -0.285862  -0.818536  -0.227349
  -0.667939  -0.027924  -0.877584
  -0.687125   0.573776   0.422088

D =

Diagonal Matrix

   12.8843         0         0
         0   -1.0347         0
         0         0    3.1505


>> eig(A)
ans =

   12.8843
   -1.0347
    3.1505

-oOo-

Referencias

[1] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

$\diamond$

Factorización $QR$ de una matriz con GNU Octave

Una matriz $A$ no singular puede descomponerse (factorizarse) de la forma $A=QR$, donde $Q$ es una matriz ortogonal y $R$ es una matriz triangular superior. En partircular, si los elementos de la diagonal de $L$ son unos, denominamos a dicha factorización $LU$ de Crout. A modo de ejemplo, voy a resolver la factorización $LU$ de Crout de la siguiente matriz de orden $3$ $$A=\begin{pmatrix}1&-1&2\\ 1&2&2 \\ 1&1&-1 \end{pmatrix}$$ utilizando GNU Octave (de manera automática)-

Mediante el uso de la herramienta GNU Octave voy a resolver el sistema escalonando por Gauss la matriz ampliada, con pivotamiento por columnas, obteniendo así una matriz equivalente (en cuanto a la solución del sistema) de tipo triangular superior:

 >> A=[1,-1,2;1,2,2;1,1,-1]
A =

   1  -1   2
   1   2   2
   1   1  -1

>> [Q,R]=qr(A)
Q =

  -0.5774   0.7715  -0.2673
  -0.5774  -0.6172  -0.5345
  -0.5774  -0.1543   0.8018

R =

  -1.7321  -1.1547  -1.7321
        0  -2.1602   0.4629
        0        0  -2.4054

Por tanto, podemos escribir $$\begin{pmatrix}1&-1&2\\ 1&2&2 \\ 1&1&-1 \end{pmatrix}=\begin{pmatrix}-0.5774 & 0.7715 & -0.2673 \\ -0.5774 & -0.6172 & -0.5345 \\ -0.5774 & -0.1543 & 0.8018 \end{pmatrix}\,\begin{pmatrix} -1.7321 & -1.1547 & -1.7321\\ 0 & -2.1602 & 0.4629 \\ 0 & 0 & -2.4054 \end{pmatrix}$$ Comprobémoslo, empleando también Octave. En efecto,
>> Q*R
ans =

   1  -1   2
   1   2   2
   1   1  -1

---

Observación

La descomposición $QR$ es la base del algoritmo QR que se utiliza para el cálculo de los vectores y valores propios de una matriz.

-oOo-

Referencias

[1] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

$\diamond$

Factorización $LU$ de Doolittle empleando GNU Octave

Una matriz $A$ no singular puede descomponerse (factorizarse) de la forma $A=LU$, donde $L$ es una matriz triangular inferior y $U$ es una matriz triangular superior. En partircular, si los elementos de la diagonal de $L$ son unos, denominamos a dicha factorización $LU$ de Doolittle. A modo de ejemplo, voy a resolver la factorización $LU$ de Doolittle de la siguiente matriz de orden $3$ $$A=\begin{pmatrix}1&-1&2\\ 1&2&2 \\ 1&1&-1 \end{pmatrix}$$ utilizando GNU Octave (de manera automática)-

Mediante el uso de la herramienta GNU Octave voy a resolver el sistema escalonando por Gauss la matriz ampliada, con pivotamiento por columnas, obteniendo así una matriz equivalente (en cuanto a la solución del sistema) de tipo triangular superior:

 >> A=[1,-1,2;1,2,2;1,1,-1]
A =

   1  -1   2
   1   2   2
   1   1  -1

>> [L,U]=lu(A)
L =

   1.0000        0        0
   1.0000   1.0000        0
   1.0000   0.6667   1.0000

U =

   1  -1   2
   0   3   0
   0   0  -3


Por tanto, podemos escribir $$\begin{pmatrix}1&-1&2\\ 1&2&2 \\ 1&1&-1 \end{pmatrix}=\begin{pmatrix}1&0&0\\ 1&1&0 \\ 1&0.6667&1 \end{pmatrix}\,\begin{pmatrix}1&-1&2\\ 0&3&0 \\ 0&0&-3 \end{pmatrix}$$ Comprobémoslo, empleando también Octave. En efecto,
>> L*U
ans =

   1  -1   2
   1   2   2
   1   1  -1

---

Nota

Habida cuenta de que el coficiente $0.6667$ es la aproximación de $\dfrac{2}{3}$ podemos escribir también de la forma $$\begin{pmatrix}1&-1&2\\ 1&2&2 \\ 1&1&-1 \end{pmatrix}=\begin{pmatrix}1&0&0\\ 1&1&0 \\ 1&2/3&1 \end{pmatrix}\,\begin{pmatrix}1&-1&2\\ 0&3&0 \\ 0&0&-3 \end{pmatrix}$$

-oOo-

Observación

Para hacer frente a posibles inestabilidades del método conviene tener en cuenta algunos casos especiales; así, por ejemplo, en el caso de que uno o varios elementos de la diagonal principal de la matriz a factorizar sea cero, será necesario premultiplicar la matriz por una o varias matrices elementales de permutación. Existe un segundo método llamado factorización $P A = L U $ (o $L U$ con pivote), que se usa en el análisis numérico para resolver sistemas de ecuaciones con más eficiencia y también para encontrar las matrices inversas.

-oOo-

Referencias

[1] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

$\diamond$

Uso de GNU Octave en la resolución (automática) de sistemas de ecuaciones lineales

Consideremos el siguiente sistema de ecuaciones lineales con tres incóngitas $$\left.\begin{matrix}x&+&y&+&z&=&1 \\ x&-&2y&+&3z&=&2 \\ x&+&3y&-&z&=&3\end{matrix}\right\}$$ que en forma matricial puede escribirse de la forma $$\begin{pmatrix} 1 & 1 & 1 \\ 1 & -2 & 3 \\ 1 & 3 & -1 \end{pmatrix}\,\begin{pmatrix} x \\ y \\ z\end{pmatrix}=\begin{pmatrix} 1 \\ 2 \\ 3\end{pmatrix}$$ La matriz (ampliada) de los coeficientes del sistema es $$A=\left(\begin{array}{ccc|c} 1&1&1&1 \\ 1&-2&3&2 \\ 1&3&-1&3 \end{array}\right) $$

Mediante el uso de la herramienta GNU Octave voy a resolver el sistema escalonando por Gauss la matriz ampliada, con pivotamiento por columnas, obteniendo así una matriz equivalente (en cuanto a la solución del sistema) de tipo triangular superior $U$ tal que $U^{\top}U=A$. Con Octave es tan cómodo como hacer los siguiente:

  >> A=([1,1,1,1;1,-2,3,2;1,3,-1,3])
  >> U=rref(A)
  U =

   1   0   0   8
   0   1   0  -3
   0   0   1  -4 
  
esto es, la matriz $$\left(\begin{array}{ccc|c} 1&0&0&8 \\ 0&1&0&-3 \\ 0&0&1&-4 \end{array}\right) $$ Así, un sistema equivalente en solución es $$\left.\begin{matrix}x&&&&&=&8 \\ &&y&&&=&-3 \\ &&&&z&=&-4\end{matrix}\right\}$$ que nos da directamente la solución.

$\diamond$

-oOo-

Referencias

[1] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers (Manual de GNU Octave), https://www.gnu.org/software/octave/octave.pdf

viernes, 16 de diciembre de 2022

Cálculo matricial con R. Un ejemplo sencillo

Un ejemplo sencillo:

Introduzcamos una matriz 3x2; por ejemplo,
> A <- matrix(c(1,2,3,4,5,6),nrow=3,ncol=2)
> A
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

Sea (otra) matriz 2x3, que, por ejemplo, introducimos modificando A
sumando 1 a cada componente escalar de la matriz
> B=t(A+1)
> B
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    5    6    7

Calculamos el producto AB
> A%*%B
     [,1] [,2] [,3]
[1,]   22   27   32
[2,]   29   36   43
[3,]   36   45   54

-oOo-

Nota: No debe confundirse el producto de dos matrices $C$ por $D$, con $C$ de tamaño $m \times n$ y $D$ de tamaño $n\times p$, el cual da lugar a una matriz $CD$ de tamaño $m \times p$ —para realizar dicho producto en R se utiliza el operador C%*%D (tal como se ha hecho en el ejemplo anterior)—, con el producto componente a componente de sendas matrices (con el operador *), que da lugar a otra matriz del mismo tamaño/dimensión que éstas. Así, por ejemplo, con las siguientes matrices de la misma dimensión

> C <- matrix(c(1,2,3,4,5,6),nrow=2,ncol=3)
> D <- matrix(c(2,3,4,5,6,7),nrow=2,ncol=3)

> C
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> D
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    3    5    7

el producto componente a componente da lugar a otra matriz de las mismas 
dimensiones que C y D

> C*D
     [,1] [,2] [,3]
[1,]    2   12   30
[2,]    6   20   42

Démonos cuenta de que plantear el producto de matrices 
C%*%D no tiene sentido, pues $C$ es $2 \times 3$ (esto es, $m=2$ y $n=3), 
al igual que $D$, y por tanto, al no ser igual el número de columnas 
del primer factor (la matriz C tiene $3$ columnas) al número de filas 
del segundo factor (la matriz D tiene $2$ columnas), 
no está definido dicho producto matricial, por lo que el resultado
de aplicar dicho comando daría lugar a un error del programa.

En efecto,
> C%*%D
Error in C %*% D : argumentos no compatibles

-oOo-

Referencias

[1] The UIB-AprendeR team: https://aprender-uib.github.io/AprendeR1/
[2] The UIB-AprendeR team: https://aprender-uib.github.io/AprendeR2/
[3] The R Development Core Team: https://cran.r-project.org/manuals.html

$\diamond$

Salidas de los resultados decimales de un cálculo en GNU OCTAVE

¿Cómo establecer el número de cifras decimales significativas de una cantidad que se mostrarán en la salida?

Podemos mostrar 4 o bien 14 cifras decimales significativas estableciendo un formato largo o un formato corto, los cuales están preestablecidos

Ejemplos


    Aproximación de pi con 4 cifras decimales significativas
   (5 cifras significativas, las de la parte decimal más la de la parte entera)

>>  format short;pi
ans = 3.1416

    Aproximación de pi con 14 cifras decimales significativas
    (15 cifras significativas, las de la parte decimal más la parte entera)

>>  format long;pi
ans = 3.141592653589793

-oOo-

Es posible precisar el número de cifras decimales significativas que nos interese

Ejemplos

  >> printf("pi con tres cifras decimales significativas=%0.3f\n",pi)
pi con tres cifras decimales significativas (4 c. significativas)=3.142
  
  También podemos establecer la longitud del espaciado 
  delante de la primera cifra entera
  
  >> printf("aproximacion de pi con cuatro cifras significativas=%10.3f\n",pi)
aproximacion de pi con cuatro cifras significativas=     3.142
  
  >> printf("aproximacion de pi con cuatro cifras significativas=%20.3f\n",pi)
aproximacion de pi con cuatro cifras significativas=               3.142

-oOo-

Resultado de un cálculo empleando una variable y una constante, estableciendo el número de cifras decimales significativas que corresponda en cada caso

Ejemplo

  Cálculo del área de un círculo de radio dado 
  Ejemplo:
  >> r=2.1 
  Notemos que el radio, como dato (medido en unidades arbitrarias de longitud), 
  tiene una precisión de 2 cifras significativas (c.s.)
  
  Como el dato (el radio) tiene 2 cifras significativas (c.s.), 
  el resultado del cálculo, 
  que involucra productos (la potencia),
  no puede darse con una precisión mayor que la del dato, 
  esto es, con 2 c.s., y por tanto sin parte decimal, 
  que son, en este caso, las dos cifras 
  de la parte entera del mismo
  
  
  >> printf("area del circulo= %2.0f\n",pi*r^2)
area del circulo= 14

-oOo-

Referencias

[1] Manual de GNU Octave: https://www.gnu.org/software/octave/octave.pdf

$\diamond$