Mostrando entradas con la etiqueta cálculo con matrices. Mostrar todas las entradas
Mostrando entradas con la etiqueta cálculo con matrices. Mostrar todas las entradas

miércoles, 2 de agosto de 2023

Cálculos matriciales básicos con GNU Octave

Introduciendo los coeficientes de la matriz $A$ en GNU Octave
-->A=[2,1;5,4]

eco
A =
2. 1.
5. 4.

a) Norma matricial subordinada a la norma vectorial $\left\|\;\right\|_1 \rightarrow \left\|A\right\|_1$=máximo de las sumas de los valores absolutos de los elementos de las columnas de la matriz $A$
-->max(sum(abs(A),'r'))
ans =
7.

o también

-->norm(A,1)
ans =
7.

b) Norma matricial subordinada a la norma vectorial $\left\|\;\right\|_2 \rightarrow \left\|A\right\|_2=\rho(A^t\,A)^{1/2}$
-->norm(A,2)
ans =
6.7678289

Observación:
Los autovalores de $A$ son:
-->spec(A)
ans =
0.5505103
5.4494897
y el máximo de éstos ( el radio espectral, $\rho(A)$ ) es $5,4494897 \neq \left\|A\right\|_2=6.7678289 $

c) Norma matricial subordinada a la norma vectorial $\left\|\;\right\|_2 \rightarrow \left\|A\right\|_{\infty}$=máximo de las sumas de los valores absolutos de los elementos de las filas de la matriz $A$
-->max(sum(abs(A),'c'))
ans =
9.
o también
-->norm(A,'inf')
ans =
9.

d) Norma de Fröbenius es la norma asociada al producto escalar matricial $A:B\overset{def}{=}\text{tr}\,(A^t\,B)$ ), esto es, $\left\|A\right\|_{F}=(A:A)^{1/2}=\left(\text{tr}\,(A^t\,A)\right)^{1/2}$
-->trace(A'*A)^(1/2)
ans =
6.78233

Factorización QR en SciLab

Factorización QR
Nota: Q es una matriz ortogonal y R una matriz triangular superior

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

1. 2.
3. 4.
-->[Q,R]=qr(A)
R =

- 3.1622777 - 4.4271887
0. - 0.6324555
Q =

- 0.3162278 - 0.9486833
- 0.9486833 0.3162278

-->Q*R
ans =

1. 2.
3. 4.

martes, 1 de agosto de 2023

Factorización QR de una matriz

Sea la matriz invertible $A=\begin{pmatrix}2&-1&0\\0&0&-2\\0&2&-1\end{pmatrix}$. Los vectores columna de esta matriz son $a^{1}=\begin{pmatrix}2&0&0\end{pmatrix}$, $a^{2}=\begin{pmatrix}-1&0&2\end{pmatrix}$, $a^{3}=\begin{pmatrix}0&-2&-1\end{pmatrix}$. Los vectores que constituyen una base ortogonal son $p^{i}\;,\,i=1,2,3$ podemos obtenerlos por el método de Gram-Schmidt

$u^{1}=a^1=\begin{pmatrix}2\\0\\0\end{pmatrix}$

$u^{2}=a^2-\langle a^2,u^1 \rangle \,u^1=\begin{pmatrix}0\\0\\2\end{pmatrix}$

$u^{3}=a^3-\langle a^3,u^1\rangle\,u^1 - \langle u^3,u^2\rangle \,u^2=a^{3}-0\,p^{1}+\dfrac{1}{2}\,p^{2}=\begin{pmatrix}0\\-2\\0\end{pmatrix}$
luego la matriz de paso a la nueva base es la siguiente matriz ortogonal $P=\begin{pmatrix}2&0&0\\0&0&-2\\0&2&0\end{pmatrix}$
con lo que una matriz ortonormal se obtiene normalizando los vectores columnas de la anterior (los vectores de la base ortogonal): $q_1=\dfrac{u^1}{\left\|u^1\right\|}$, $q_2=\dfrac{u^2}{\left\|u^2\right\|}$, $q_3=\dfrac{u^3}{\left\|u^3\right\|}$ por tanto
$Q=\begin{pmatrix}1&0&0\\0&0&-1\\0&1&0\end{pmatrix}$, como puede comprobarse por la definición de matriz ortogonal: $Q^t=Q^{-1}$, esto es $QQ^t=I$



Queremos expresar la matriz $A$ de la forma $A=QR$, siendo $Q$ una matriz ortogonal (que ya hemos obtenido a partir de las coordenadas de los vectores de la nueva base $\{p^i\}\,,i=1,2,3$) dispuestos en columnas y normalizados) y $R$ una matriz triangular superior.
Ya tenemos la matriz ortogonal $Q$. Veamos ahora cómo podemos determinar la matriz triangular superior $R$:
  De las ecuaciones escritas arriba podemos escribir, en forma matricial, que $A=P-PM$, y por tanto, $A=P(I+M)$, donde $I$ es la matriz identidad y $M$ puede verse fácilmente que es $\begin{pmatrix}0&m_{12}&m_{13}\\0&0&m_{23}\\0&0&0\end{pmatrix}$, siendo sus coeficientes de la forma $m_{ij}=\dfrac{a^j\,p^i}{\left\|p^i\right\|^2}\,\text{para}\,j\gt i$
Entonces, como al normalizar los vectores columna se han dividido sus coordenadas, $p^{i}\,,i=1,2,3$, por la norma respectiva de cada vector, $\left\|p^i\right\|$, tenemos que $A=P(I+M)=QD(I+M)=Q\,(D(I+M))$, y como esto debe ser igual a $QR$, se tiene que $R=D(I+M)$, siendo $D$ una matriz diagonal que, como acabamos de justificar, resulta ser $D=(d_{ii})$, con $d_{ii}=\left\|p^i\right\|$; y, en nuestro caso, resulta ser $D=\begin{pmatrix}2&0&0\\0&2&0\\0&0&2\end{pmatrix}$, por lo que la matriz triangular superior es $R=\begin{pmatrix}2&-1&0\\0&2&-1\\0&0&2\end{pmatrix}$. Así, una descomposción $QR$ de $A$ puede comprobarse que es $A=\begin{pmatrix}1&0&0\\0&0&-1\\0&1&0\end{pmatrix}\begin{pmatrix}2&-1&0\\0&2&-1\\0&0&2\end{pmatrix}$. $\square$

martes, 20 de diciembre de 2022

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$

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$