ÍNDICE


 
OPERACIONES CON ARRAYS
Arrays simples
  Los cálculos examinados hasta ahora han considerado solamente números escalares, las operaciones con escalares son la base de las matemáticas, pero si deseamos realizar un mismo cálculo con varios números a la vez, las operaciones escalares resultaran tediosas y engorrosas.
   Por ejemplo, supongamos que deseamos evaluar la función exp(x) en los puntos 0.1, 0.2, 0.3, ..., 0.9, 1. Podemos realizar las evaluaciones una a una o trabajar con arrays (vectores).
   Para definir un array en MATLAB escribiremos sus elementos (o coordenadas) entre corchetes separados por espacios o comas. De este modo, podemos resolver el problema antrior como sigue
 
EDU» x = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1];
EDU» y = exp(x)
y =
  Columns 1 through 7 
    1.1052    1.2214    1.3499    1.4918    1.6487    1.8221    2.0138
  Columns 8 through 10 
    2.2255    2.4596    2.7183

   Observemos que MATLAB entiende la última orden de manera natural, calculando la exponencial de cada elemento del array x. Esta capacidad hace que sea extremadamente sencillo e intuitivo el manejo de arrays.
   Como los espacios actuan de separadores en un array, es importante no introducir espacios entre medias de expresiones que forman un único elemento (si aún así deseas hacerlo, encierra estas expresiones entre parentesis).

Direccionamiento de ARRAYS
   Podemos acceder a los elementos individuales de un array usando subindices, por ejemplo, x(1) será el primer elemento del array x, x(1) será el segundo elemento, etc.
 
» x(3), y(3)
ans =
0.3000
ans =
1.3499

   Para acceder a un bloque de elementos usaremos la notacion de dos puntos
 

» x(3:5) %Obtenemos los elementos del 3 al 5
ans =
0.3000    0.4000    0.5000
» x(3:2:7) %Obtenemos los elementos del 3 al 7 salteados de 2 en 2
ans =
0.3000    0.5000    0.7000
» x(5:-1:3) %Obtenemos los elementos del 3 al 5 en orden inverso
ans =
0.5000 0.4000 0.3000

   Por último, podemos seleccionar los elementos que deseemos en el orden que deseemos como sigue
 

»y= x([3,5,1]) %Obtenemos los elementos 3, 5 y 1 en este orden
y =
0.3000    0.5000    0.1000

Intenta coger un elemento que no exista en el array, como el 15, para ver que sucede.

Construcción automática de ARRAYS
   Anteriormente hemos introducido un array elemento a elemento, pero existen otras dos formas de crear arrays:
    • Conocido el paso entre elementos
» x=(0:0.2:2.7) %Construimos un array de 0 a 2.7 de 0.2 en 0.2 
x =
  Columns 1 through 7 
         0    0.2000    0.4000    0.6000    0.8000    1.0000    1.2000
  Columns 8 through 14 
    1.4000    1.6000    1.8000    2.0000    2.2000    2.4000    2.6000
» x=(2.7:-0.2:0)
x =
  Columns 1 through 7 
    2.7000    2.5000    2.3000    2.1000    1.9000    1.7000    1.5000
  Columns 8 through 14 
    1.3000    1.1000    0.9000    0.7000    0.5000    0.3000    0.1000
  • Conocido el número de elementos pero no el paso
EDU» linspace(0,pi,10) %array de 10 elementos espaciados linealmente entre 0 y pi
ans =
  Columns 1 through 7 
         0    0.3491    0.6981    1.0472    1.3963    1.7453    2.0944
  Columns 8 through 10 
    2.4435    2.7925    3.1416
EDU» logspace(0,pi,10) %array de 10 elementos espaciados logaritmicamente entre 0 y pi
ans =
  Columns 1 through 7 
    1.0000    1.1356    1.2897    1.4646    1.6632    1.8888    2.1450
  Columns 8 through 10 
    2.4360    2.7664    3.1416
Composición de ARRAYS
   En ocasiones necesitamos un array que no es facil describir con las relaciones anteriores. No hay una única manera de crear estos arrays, pero gracias al direccionamiento de arrays y a la posibilidad de componer éstos, disponemos de numerosasw opciones para evitarnos el introducir los elementos individualmente.
Construir de forma automática el array [1 2 3 4 5 0 1 -1 7 9 11 13]
 
EDU» x=[1:5];y=[0 1 -1];z=[7:2:13];a=[x y z] %modo 1
a =
     1     2     3     4     5     0     1    -1     7     9    11    13
EDU» x=[1:13];y=[0 1 -1];a=[x(1:5) y x(7:2:13)] %modo 2
a =
     1     2     3     4     5     0     1    -1     7     9    11    13
EDU» x=[1:5];y=[0 1 -1];a=[x y 5+2*x(1:4)] %modo 3
a =
     1     2     3     4     5     0     1    -1     7     9    11    13
Operaciones escalares con ARRAYS
   En el último ejemplo observamos que las operaciones escalares con arrays son completamente intuitivas, así, para sumar, restar, multiplicar o dividir todos los elementos por un mismo número basta realizar la orden obvia.
Operaciones con ARRAYS
   Menos claras son las operaciones entre arrays (pensemos por ejemplo como elevar los elementos de un array a los de otro), aunque debería ser claro que las operaciones entre arrays de distita longitud no deben ser faciles de definir.
   De este modo, partiendo de arrays de igual longitud, la operación suma no da problemas, pero si deseamos multiplicar o dividir arrays elemento a elemento precisamos de las denominadas operaciones con punto.
 
EDU» a=[1:5];b=[4:-1:1];c=[b 0];
EDU» a+b %no esta definido
??? Error using ==> +
Matrix dimensions must agree.
EDU» a+c
ans =
     5     5     5     5     5
EDU» a*c
??? Error using ==> *
Inner matrix dimensions must agree.
EDU» a.*c
ans =
     4     6     6     4     0
EDU» a/c,a\c
ans =
    0.6667
ans =
         0         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0
    0.8000    0.6000    0.4000    0.2000         0
EDU» a./c,a.\c
Warning: Divide by zero.
ans =
    0.2500    0.6667    1.5000    4.0000       Inf
ans =
    4.0000    1.5000    0.6667    0.2500         0

   Observemos que al intentar hacer la multiplicación sin punto nos da un error por no concordar las dimensiones, la multiplicación sin punto corresponde a la multiplicación matricial que se discutira posteriormente. Observemos también que la divisón sin punto esta definida, pero no realiza lo que pretendemos, es una división matricial que se discutira con posterioridad.
   Las potencia de arrays también tiene sus particularidades, el símbolo ^ se reserva para las potencias de matrices, los cálculos elemento a elemento se realizarán con el símbolo .^
 

EDU» a.^2 %calcula el cuadrado de los elementos de a
ans =
     1     4     9    16    25
EDU» 2.^a %calcula 2 elevado a la potencia de cada elemento de a
ans =
     2     4     8    16    32
EDU» a.^c %eleva los elementos de a a los correspondientes de c
ans =
     1     8     9     4     1
Orientación de ARRAYS
   Hasta ahora los arrays han tenido una fila y múltiples columnas, por lo que se denominan vectores (o matrices) fila. También es posible definir vectores columna, arrays con una columna y múltiples filas. Para ello se introduciran los elementos separados con ;
   Todas las manipulaciones matemáticas permanecen sin cambios, solamente varía la forma en que se visualizan los resultados. En cambio, si deseamos usar la notación de dos puntos, deberemos transponer el vector fila resultante.
 
EDU» a=[1;2;-1;0]
a =
     1
     2
    -1
     0
EDU» b=[1:2:8]
b =
     1     3     5     7
EDU» b=b' %transponemos
b =
     1
     3
     5
     7

   Además del operador tanspuesta anterior, existe el operador .', que proporciona la transpuesta compleja no conjugada en contraposición de la transpuesta conjugada que proporciona el operador ' (si los elementos del array no son complejos no hay diferencia entre ambos operadores).

Producto escalar y vectorial
   Para calcular el producto escalar de dos arrays A y B contamos con el operador dot(A,B), que equivale a calcular A'*B. El producto vectorial de dos vectores de dimensión 3 se realiza con el operador cross
Longitud de un ARRAY
  La longitud de un array se calcula con la orden length o con la orden size (ver el tema 8: Matrices y Álgebra Lineal)


ÍNDICE