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) |