Siguiente Anterior

Vectores

La matriz (array) es el tipo fundamental de dato en MATLAB. La variable escalar que hemos estudiado en la página anterior es un caso particular de matriz de dimensión 1×1. Los vectores son las matrices más simples: un vector fila de m elementos es una matriz de dimensión m×1, un vector columna de n elementos es una matriz de dimension 1×n. En esta página, vamos a ver como se crean vectores, como se realizan operaciones con estas entidades y cómo se accede a sus elementos.

En muchos lenguajes, el primer elemento de un vector (array) tiene índice cero, en MATLAB tiene índice uno.

Vectores

Un vector x es un conjunto de n números reales

[x1, x2, ....xn]

Geometricamente, representa un punto en el espacio Rn, especificado por las n coordendas x1, x2, ....xn.

En Física representamos un vector r en el espacio R3 respecto a un Sistema de Referencia Ortonormal formado por el origen O y tres vectores unitarios mutuamente perpendiculares. Las direcciones de estos vectores se denominan, ejes X, Y y Z, respectivamente.

r =5 i ^ +3 j ^ 5 k ^

Los coeficientes de los vectores unitarios (las proyecciones del vector r sobre los ejes coordenados) son las coordendas (x, y, z) del punto P.

En MATLAB representamos un vector del siguiente modo

>> r=[5 3 -5]
r =     5     3    -5
>> r=[5,3,-5]
r =     5     3    -5

Para crear un vector fila se escribe sus elementos unos a continuación de los otros separados por espacios o comas, y entre paréntesis cuadrados, tal como se muestra en el cuadro. Para crear un vector columna se escribe los elementos unos a continuación de los otros separados por puntos y comas o bien, en forma columna tal como se indica en el cuadro.

>> r=[5; 3; -5];
>> r=[5
3 
-5]
r =
     5
     3
    -5

Podemos convertir un vector fila en columna mediante el operador transpuesto '

>> r=[1,2,3]'
r =  1
     2
     3

Un vector con un espaciado constante Δx entre el primer término, xi y el último término, xf., se crea del siguiente modo:

vector=xix:xf

>> x=3:2:15
x = 3 5 7 9 12 15
>> y=2:-0.2:1  
y = 2.0000 1.8000 1.6000 1.4000 1.2000 1.0000
>> z=-5:3 % el espaciado por defecto es 1
y = -5 -4 -3 -2 -1 0 1 2 3  

Creamos el vector

>> x=[0,0.38,0.71,0.92,1.00,0.92,0.71,0.38,0];

En la ventana Workspace vemos la variable x debajo de Name y los valores que guarda, debajo Value. Seleccionado la variable x, podemos cambiar los valores que guarda mediante el Variable Editor, que se abre pulsando el botón del menú Workspace denominado Open selection o haciendo doble-clic en el nombre de la variable.

Podemos hacer una representación gráfica pulsando en el botón plot(x)

Acceso a los elementos de un vector

Cuando se crea un vector, por ejemplo x=[3,6,9,12,15,18]; la tabla muestra los indices del x y los valores que guardan los elementos del vector.

Indice 1 2 3 4 5 6
Valor 3 6 9 12 15 18

En general, un vector fila tiene la forma [r1r2r3 ....rn]. Para acceder a un elemento i del vector r, ri se escribe r(i). Para acceder la primer elemento se escribe r(1). Para acceder al último se escribe r(end). La función length devuelve el número de elementos del vector

>> r=[5 3 -5];
>> r(1)
ans =5
>> r(end)
ans =-5
>> length(r)
ans = 3 	

Con el operador : podemos acceder a más de un elemento del vector. Cuando escribimos v(m:n) se accede a los elementos del vector v desde las posiciones m hasta n. Es la forma de extraer un vector de otro vector. Por ejemplo, creamos un vector u con los elementos comprendidos entre las posiciones 3 y 7 ambas incluidas, de un vector v que tiene 10 elementos

>> v=[4 10 -3 7 -1 0 8 13 -7 0];
>> u=v(3:7)
u =    -3     7    -1     0     8    

Creamos un vector u con los elementos de índice par del vector v.

>> v=[4 10 -3 7 -1 0 8 13 -7 0];
>> u=v(2:2:end)
u =    10     7     0    13     0

Podemos también crear un vector u a partir de otro vector de subíndices. Por ejemplo, crear un vector u tomando el elemento quinto, primero, cuarto y octavo elemento del vector v, en este orden.

>> v=[4 10 -3 7 -1 0 8 13 -7 0];
>> u=v([5 1 4 8])
u =    -1     4     7    13

Se pueden añadir elementos a un vector de la siguiente forma

>> v=1:4
v =     1     2     3     4
>> v(5:10)=7:3:22
v =     1     2     3     4     7    10    13    16    19    22
>> v(12)=-1
v =     1     2     3     4     7    10    13    16    19    22    0    -1

Si se sobrapasa la dimensión del vector que era 10, se le añade el elemento de índice 12, al elemento de índice 11 se le asigna automáticamente cero.

Creamos un vector a partir de otros dos vectores, insertamos un escalar (vector de dimensión 1) al principio de un vector o en medio del vector

>> a=[1 2 3];
>> b=[4 5 6 7];
>> c=[a b]
c =     1     2     3     4     5     6     7
>> d=[-1 a]
d =    -1     1     2     3
>> e=[d(1:2) -5 d(3:4)]
e =    -1     1    -5     2     3

Se pueden eliminar elementos de un vector

>> e
e =    -1     1    -5     2     3
>> e(2:4)=[]
e =    -1     3

Más adelante veremos como se accede a los elementos de un vector mediante los operadores relacionales

Operaciones con vectores

Suma de un escalar y un vector

>> x=[1,2,3];
>> x+5
ans =     6     7     8

Producto de un escalar por un vector

El producto de un vector u por un escalar λ es otro vector v de la misma dirección, se multiplica cada elemento por el escalar

v = λ · u = [ λ u 1 λ u 2 .... λ u n ]

>> u=[1,2,3];
>> u*3
ans =     3     6     9

Se pueden realizar más operaciones con un vector, por ejemplo calcular la raíz cuadrada de un conjunto de datos

>> x=[4 9 16 25];
>> u=sqrt(x)
u =     2     3     4     5
>> 3*u-2
ans =     4     7    10    13

Suma de dos vectores

Los vectores con el mismo número de elementos se pueden sumar o restar.

u=[ u 1 u 2 .... u n ]v=[ v 1 v 2 .... v n ] u+v=[ u 1 + v 1 u 2 + v 2 .... u n + v n ]

>> u=[1,2,3];
>> v=[4,5,6];
>> u+v
ans =     5     7     9

Producto escalar de dos vectores

u·v=u·v·cosθ u·v= u 1 v 1 + u 2 v 2 +....+ u n v n

El producto escalar se obtiene multiplicando el vector fila u por el vector columna v

( u 1 u 2 ... u n )( v 1 v 2 ... v n )= u 1 v 1 + u 2 v 2 +...+ u n v n

MATLAB dispone de la función dot(u,v) para calcular el producto escalar de dos vectores u y v.

>> u = [5 6 7];
>> v = [4 3 2];
>> dot(u,v)
ans =    52
>> u*v'
ans =    52

Cuando el vector u y v coinciden, calculamos el módulo del vector u.

u·u= u 2 = u 1 2 + u 2 2 +....+ u n 2

MATLAB dispone de la función norm que calcula el módulo de un vector.

>> u = [5 6 7];
>> norm(u)
ans =   10.4881
>> sqrt(u*u')
ans =   10.4881

A partir de la definición del producto escalar podemos calcular el ángulo entre los vectores u y v

cosθ= u 1 · v 1 + u 2 v 2 +....+ u n v n u·v

Escribimos la ventana de comandos

>> u = [5 6 7];
>> v = [4 3 2];
>> ang=acosd(dot(u,v)/(norm(u)*norm(v))
ang = 22.9745

Dos vectores u y v son perpendiculares si el producto escalar es cero.

La proyección de un vector u a lo largo de la dirección del vector v se calcula del siguiente modo: se multiplica escalarmente el vector u por el vector unitario v/v cuya dirección y sentido son los del vector v.

u v =ucosθ=u· v v = u 1 · v 1 + u 2 v 2 +....+ u n v n v

Por ejemplo, el ángulo que forma el vector u con el eje Z se calcula

u= u x i ^ + u y j ^ + u z k ^ cosθ= u z u

Otras formas de crear vectores

En MATLAB hay otras formas alternativas de crear un vector, que como veremos son muy útiles para el cálculo y representación gráfica de funciones.

Para crear un vector con espaciado constante especificando el primer término, xi, el último término xf. y el número de términos, n llamamos a la función linspace

vector=linspace(xi,xf,n)

>> x=linspace(0,6,5)
x = 0 1.5000  3.0000 4.5000 6.0000

El espaciado constante entre dos valores consecutivos Δx es

Δx= x f x i n1

Por lo que son equivalentes los vectores definidos por

>> x=0:2:20
>> x=linspace(0,20,11)

Creamos una tabla de valores de la función seno en el intervalo (0, 2π) del siguiente modo:

>> x=0:pi/5:2*pi
x =0  0.6283  1.2566  1.8850  2.5133  3.1416  3.7699  4.3982  5.0265  5.6549  6.2832
>> y=sin(x)
y =0  0.5878  0.9511  0.9511  0.5878  0.0000 -0.5878  -0.9511  -0.9511  -0.5878  -0.0000

Creamos una tabla de logaritmos de la siguiente forma

>> x=(1:0.1:1.5)'; %vector columna
>> logs=[x log10(x)]
logs =
    1.0000         0
    1.1000    0.0414
    1.2000    0.0792
    1.3000    0.1139
    1.4000    0.1461
    1.5000    0.1761

La función logspace es similar a linspace pero genera un conjunto de elementos espaciados logarítmicamente. Por ejemplo, para crear el vector x=[10,100,1000,10000] escribimos

>> x=logspace(1,4,4)
x =          10         100        1000       10000

Operaciones elemento a elemento

Existen muchas situaciones en las que se requieren operaciones elemento a elemento similares a las que se lleva a cabo con la suma o la diferencia de dos vectores de las mismas dimensiones

Sean dos vectores a=[a1 a2 a3] y b=[b1 b2 b3]

Las operaciones de multiplicación, división y exponenciación elemento a elemento de dos vectores a y b se definen del siguiente modo:

a . * b = [ a 1 b 1 a 2 b 2 a 3 b 3 ] a . / b = [ a 1 / b 1 a 2 / b 2 a 3 / b 3 ] a . ^ b = [ ( a 1 ) b 1 ( a 2 ) b 2 ( a 3 ) b 3 ]

>> u=[1,2,3];
>> v=[4,5,6];
>> u.*v
ans =     4    10    18

Evaluamos una función y=f(x) cuando le proporcionamos el valor de la variable x.

>> x=2;
>> y=2*x^2-3
y =     5

En MATLAB, podemos utilizar las operaciones elemento a elemento para evaluar una función para un conjunto de valores de la variable x, y esto nos va a ser de mucha utilidad en las representaciones gráficas.

>> x=[0,1,-1,2,-3,4];
>> y=2*x.^2-3
y =    -3    -1    -1     5    15    29

Obtener una tabla de valores de la función y = x 2 x 3 + 1 en el intervalo (0.5, 2) tomando un espaciado Δx=0.1

>> x =  0.5:0.1:2;
>> f =  x.^2;
>> g =  x.^3+1;
>> y = f./g

Obtener una tabla de valores de la función y=(2x+3)2(x3+2) en el intervalo (-1, +1) tomando un espaciado Δx=0.1

>> x =  -1:0.1:1;
>> f =  2*x+3;
>> g =  x.^3+2;
>> y = (f.^2).*g

o bien, en una sola línea

>> x=-1:0.1:1;
>> y=((2*x+3).^2).*(x.^3+2)

Funciones que operan con vectores

mean(u)

Valor medio de los elementos del vector u

>> u = [3 7 2 16];
>> mean(A)
ans = 7

max(u)

c es el mayor elemento del vector u

>> u = [3 7 2 16 9 5 18 13 0 4];
>> c = max(u)
c = 18

min(u)

El más pequeño elemento del vector u

>> u = [3 7 2 16];
>> min(u)
ans = 2

sum(u)

Devuelve la suma de todos los elementos del vector

>> u = [3 7 2 16];
>> sum(u)
ans = 28

sort(u)

Ordena los elementos del vector en orden ascendente

>> u = [3 7 2 16];
>> sort(u)
ans = 2 3 7 16

std(u)

Devuelve la desviación estándar

>> u = [3 7 2 16];
>> std(u)
ans = 6.3770

dot(u,v)

Calcula el producto escalar u·v de los vectores u y v

>> u = [5 6 7];
>> v = [4 3 2];
>> dot(u,v)
ans = 52

cross(u,v)

Calcula el producto vectorial u×v de los vectores u y v.

>> u = [5 6 7];
>> v = [4 3 2];
>> cross(u,v)
ans = -9 18 -9

Suma de los elementos de un vector

La suma sum(u) de los elementos de un vector u es un escalar. La suma acumulada cumsum(u) de un vector u es otro vector s cuyos elementos son s(k) k=1...N

s= n=1 N x(n)=x(1)+x(2)+....x(N) s(k)= n=1 k x(n)=x(1)+x(2)+....x(k)

Producto de los elementos de un vector

El producto prod(u) de los elementos de un vector u es un escalar. El producto acumulado cumprod(u) de un vector u es otro vector p cuyos elementos son p(k) k=1...N

p= n=1 N x(n)= x(1)·x(2)....x(N) p(k)= n=1 k x(n)= x(1)·x(2)....x(k)

Probar que

n=1 N n = N(N+1) 2 n=1 N n =1·2·3...·N=N!

>> s=sum(1:5)
s =    15
>> fact=prod(1:5)
fact =   120
>> cumsum(1:5)
ans =     1     3     6    10    15
>> cumprod(1:5)
ans =     1     2     6    24   120

Calcular el valor de las expresión para N=8.

n=1 N ( 1+ 3 n )

>> n=1:8;
>> u=1+3./n;
>> p=prod(u)
p =   165

Máximo y mínimo

Para obtener el máximo valor de los elementos de un vector

>>  x=[0,0.38,0.71,0.92,1.00,0.92,0.71,0.38,0];
>> [xmax, nmax]=max(x)
xmax =     1
nmax =     5
>> x(5)
ans =     1

La función max nos devuelve dos datos, el valor máximo xmax y el índice nmax del elemento del vector que guarda el máximo. Vemos que el quinto elemento del vector x guarda el máximo valor 1.0.

Cadena de caracteres (strings)

Una cadena de caracteres es una secuencia de cualquier número de caracteres encerrados entre comillas simples: 'hola'.

Se puede crear una cadena de caracteres a partir de otras, tal como se hace con los números

>> texto='hola'
texto=
hola
>> saludo='¿cómo estás?';
>> mas_texto=[texto,' - ',saludo]
mas_texto=
hola - ¿cómo estás?

Los valores numéricos se pueden convertir a cadenas de caracteres mediante las funciones num2str (números en general ) o int2str (enteros)

>> tF=50; %grado Fahrenheit
>> tC=(tF-32)*5/9; %grado Celsius
>> texto=['La temperatura es ',num2str(tC),' C']
texto =
La temperatura es 10 C

La función strcat concatena cadenas de caracteres lo que como veremos más adelante es muy útil para trabajar con ecuaciones. Por ejemplo:

θ 1 =2πt θ 2 = π 2 +4πt π 12 t 2 } θ 1 = θ 2 +2kπ

>> eq1='2*pi*t';
>> eq2='pi/2+4*pi*t-(pi/12)*t^2';
>> eq=strcat(eq1,'=',eq2,'+k*2*pi')
eq =2*pi*t=pi/2+4*pi*t-(pi/12)*t^2+k*2*pi

 

Siguiente Anterior