3. Secuencias, matrices de números aleatorios y matrices especiales

 

Secuencias

La sintaxis a:b:c genera la secuencia de valores que van de a a c en incrementos de magnitud b. Si se omite el valor de b se genera una secuencia de valores de a a c de uno en uno. En general una secuencia de valores es considerada por Matlab como un vector.

>> U=0:10
U =

    0    1    2    3    4    5    6    7    8    9   10

 

>> V=0:2:10
V =

    0    2    4    6    8   10

 

>> W=0:0.1:0.5
W =

    0.00000    0.10000    0.20000    0.30000    0.40000    0.50000

 

>> X=12:-3:-12
X =

   12    9    6    3    0   -3   -6   -9  -12

 

 

Secuencias de valores espaciados linealmente

la función linspace(a,b,n) genera n valores equiespaciados entre a y b.

Por ejemplo, para generar 3 valores entre 1 y 10:

>> linspace(1,10,3)
ans =

    1.0000    5.5000   10.0000

 

Para generar 20 valores entre 0 y 100:

>> linspace(0,100,20)
ans =

 Columns 1 through 6:

     0.00000     5.26316    10.52632    15.78947    21.05263    26.31579

 Columns 7 through 12:

    31.57895    36.84211    42.10526    47.36842    52.63158    57.89474

 Columns 13 through 18:

    63.15789    68.42105    73.68421    78.94737    84.21053    89.47368

 Columns 19 and 20:

    94.73684   100.00000

 

 

Vectores y matrices de números aleatorios:

La función rand() crea vectores o matrices de números aleatorios distribuidos uniformemente entre 0 y 1; si se especifica rand(n) se crea una matriz de dimensión \(n\times n\); si se especifica rand(m,n) se genera una matriz de dimensión \(m \times n\):

>> rand(1)
ans =  0.58061
>> rand(2)
ans =

   0.65882   0.28362
   0.21197   0.36883
>> rand(1,4)
ans =

   0.87558   0.35632   0.16954   0.46338
>> rand(2,3)
ans =

   0.925775   0.133559   0.338582
   0.265939   0.735367   0.091354

 

La función randi() es similar, pero genera números enteros:

Ejemplos:

>> randi(7)
ans =  1
>> randi(7,2,2)
ans =

   1   1
   7   3
>> randi([3,9],1,10)
ans =

   6   4   6   8   8   5   3   6   8   7

 

Matrices especiales: Identidad, Diagonal, Unos, Ceros

Matriz Identidad

La matriz identidad de dimensión \(n\) se define en Matlab como eye(n). La razón es que en inglés eye y la letra I (que es el símbolo utilizado habitualmente para la matriz identidad) suenan igual:

>> eye(3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

 

Matriz diagonal

En Matlab una matriz diagonal se construye fácilmente como:

>> diag([1 2 3])
ans =

Diagonal Matrix

   1   0   0
   0   2   0
   0   0   3

Se pueden generar matrices con los términos no nulos en alguna diagonal distinta de la principal. Por ejemplo, la siguiente sintaxis genera una matriz cuadrada con los valores (1,2,3) en la quinta diagonal (NOTA: téngase en cuenta que para Matlab la diagonal principal es la diagonal 0):

>> diag([1 2 3],5)
ans =

   0   0   0   0   0   1   0   0
   0   0   0   0   0   0   2   0
   0   0   0   0   0   0   0   3
   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0

 

Matriz de unos

Podemos construir una matriz de unos de dimensión \(m\times n\) como ones(m,n):

>> ones(3,2)
ans =

   1   1
   1   1
   1   1

Si queremos que la matriz de unos sea cuadrada de orden \(n\) basta con ones(n):

>> ones(3)
ans =

   1   1   1
   1   1   1
   1   1   1

 

Matriz de ceros

Asimismo una matriz de ceros de dimensión \(m\times n\) se define como zeros(m,n):

>> zeros(2,3)
ans =

   0   0   0
   0   0   0

Si queremos una matriz cuadrada de ceros de orden \(n\) basta con zeros(n):

>> zeros(3)
ans =

   0   0   0
   0   0   0
   0   0   0

 

 

Cuadrados mágicos

Un cuadrado mágico es una matriz construida de tal forma que todos sus valores son distintos, y todas sus filas y columnas siempre suman lo mismo. En matlab se genera un cuadrado mágico de dimensión n x n mediante la sintaxis magic(n):

>> magic(4)
ans =

   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1

 

 

 

Ejercicios

  1. Genera una matriz de números enteros aleatorios de dimensión 10x12

    1. ¿Cuánto suman las filas pares de esta matriz?
    2. ¿Cuánto suman las filas impares?
    3. ¿Cuanto suman las columnas pares?
    4. ¿Cuánto suman las columnas impares?
  2. Construye una matriz tridiagonal que tenga los números 1 a 10 en la diagonal principal, que repita el número 1 en la diagonal superior y el 2 en la diagonal inferior.

  3. Se han observado los siguientes puntos \((x,y)\) en el plano: (1,1), (2,3), (3,4), (3,1), (4,6), (4,4), (5,4), (6,5), (6,7). Estos puntos pueden representarse gráficamente creando dos vectores en matlab, uno con los valores de \(x\) y otro con los valores de \(y\), y utilizando la función plot:

>> x=[1 2 3 3 4 4 5 6 6]
>> y=[1 3 4 1 6 4 4 5 7]
>> plot(x,y,"o")

La recta de mejor ajuste que pasa por el centro de la “nube de puntos” tiene una ecuación de la forma:

\[y= b_0 + b_1 x\]

Llamando:

\[B=\left(\begin{array}{c} b_{0}\\ b_{1} \end{array}\right)\,\,\,\,\,\,\,\,\,X=\left(\begin{array}{cc} 1 & x_{1}\\ 1 & x_{2}\\ 1 & x_{3}\\ \vdots & \vdots\\ 1 & x_{n} \end{array}\right)\,\,\,\,\,\,\,\,\,Y=\left(\begin{array}{c} y_{1}\\ y_{2}\\ y_{3}\\ \vdots\\ y_{n} \end{array}\right)\]

donde \(\left(x_1,x_2,x_3,\dots,x_n\right)\) e \(\left(y_1,y_2,y_3,\dots,y_n\right)\) son, respectivamente, los valores observados de \(x\) y de \(y\), se puede demostrar que:

\[B=(X^tX)^{-1}X^tY\]

Calcular los valores de \(b_0\) y \(b_1\) para la recta que mejor se ajusta a la nube de puntos anterior y dibujar la recta sobre la nube de puntos.