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=xi:Δx: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. Haciendo doble-clic sobre el nombre de la variable se abre un editor en forma de hoja de cálculo que nos permite modificar los valores de los elementos de dicho vector x

La función zeros(1,n) nos crea un vector fila formado por n ceros. La función zeros(n,1) nos crea un vector columna formado por n ceros. La función onesnos crea vectores formado por unos

>> zeros(1,5)
ans =     0     0     0     0     0
>> zeros(3,1)
ans =
     0
     0
     0
>> ones(1,4)
ans =     1     1     1     1

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 [r1, r2, r3 ,....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 : accedemos 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

Creamos 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

Elimina elementos de un vector

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

El polinomio p1=x4+3x3-2x2+x-2 se representa por el vector p1=[1,3,-2,1,-2]. El polinomio p2=5x2-2x+1 se representa por el vector p2=[5,-2,1]

No podemos sumar estos dos polinomios ya que los vectores p1 y p2 no tienen la misma longitud. Para hacerlos de la misma longitud insertamos a la izquierda los ceros necesarios en el vector que tiene menos elementos.

>> p1=[1,3,-2,1,-2]
p1 =     1     3    -2     1    -2
>> p2=[5,-2,1];
>> p2=[zeros(1,length(p1)-length(p2)),p2]
p2 =     0     0     5    -2     1
>> s=p1+p2
s =      1     3     3    -1    -1 

Producto escalar de dos vectores

u · v =uvcosθ 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 · 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, calculamos 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

Vectores predefinidos

>> ones(1,3)
ans =
     1     1     1
>> ones(3,1)
ans =
     1
     1
     1

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
>> u = [5 6 7];
>> v = [4 3 2];
>> dot(u,v)
ans = 52
cross(u,v) Calcula el producto vectorial u × 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.

fliplr

La función fliplr invierte el sentido de los elementos de un vector fila

>> b=[4, 5, 6, 7]
b =     4     5     6     7
>> fliplr(b)
ans =     7     6     5     4

Se podría hacer también del siguiente modo:

>> b=[4, 5, 6, 7]
b =     4     5     6     7
>>  b(length(b):-1:1)
ans =     7     6     5     4

fliplr no funciona con un vector columna

>> b=[4;5;6;7]
b =
     4
     5
     6
     7

>> fliplr(b)
ans =
     4
     5
     6
     7

Funciona la segunda versión

>> b(length(b):-1:1)
ans =
     7
     6
     5
     4

Ejercicios

1.-Crear el vector que contenga los números pares entre 10 y cero. Crear un vector que contenga los múltiplos de 3 entre 6 y 36, ambos inclusive.

>> x=10:-2:0
x =    10     8     6     4     2     0
>> x=6:3:36
x =     6     9    12    15    18    21    24    27    30    33    36

2.-Sea el vector u=2:3:18;

>> u=2:3:18
u =     2     5     8    11    14    17
>> u(1:3)
ans =     2     5     8
>> u(2:2:6)
ans =     5    11    17
>> u(end-2:end)
ans =    11    14    17
>> u([1,3,4])
ans =     2     8    11

3.-Crear el siguiente vector [10, 9, 8, 7, 6, 5, 4, 3, 2.5, 2.4, 2.3, 2.2, 2.1, 2.01, 2.001, 2.0001]

>> [10:-1:3,2.5:-0.1:2.2, 2*ones(1,4)+1./10.^(1:4)]
ans =
   10.0000    9.0000    8.0000    7.0000    6.0000    5.0000    4.0000    3.0000   
    2.5000    2.4000    2.3000    2.2000    2.1000    2.0100    2.0010    2.0001

4.- Crear una tabla de valores del coseno de los ángulos comprendidos entre 0 y 180, de 30 en 30 grados

ángulo coseno
0  
30  
60  
...  
>> ang=0:30:180;
>> y=cosd(ang);
>> [ang',y']
ans =
         0    1.0000
   30.0000    0.8660
   60.0000    0.5000
   90.0000         0
  120.0000   -0.5000
  150.0000   -0.8660
  180.0000   -1.0000

5. Dado el vector de datos u=[5, 9, 2, 4, 1, 12, 7, 6, 5, 8];

>> u=[5,9,2,4,1,12,7,6,5,8]
u =
     5     9     2     4     1    12     7     6     5     8
>> [m,k]=max(u)
m =    12
k =     6
>> [m,k]=min(u)
m =     1
k =     5
>> sum(u)
ans =    59
>> prod(u)
ans =     7257600
>> mean(u)
ans =    5.9000
>> v=sort(u)
v =     1     2     4     5     5     6     7     8     9    12

6. Crear una tabla de valores de la función

y= x 2 2 x+4

para los siguientes valores de x: -3, -2, -1, 0, 1, 2, 3

>> x=-3:3;
>> y=(x.^2-2)./(x+4);
>> [x',y']
ans =
   -3.0000    7.0000
   -2.0000    1.0000
   -1.0000   -0.3333
         0   -0.5000
    1.0000   -0.2000
    2.0000    0.3333
    3.0000    1.0000

7. Comprobar que

lim x0 sinx x =1

>> format long
>> n=0:5;
>> x=1./10.^n;
>> y=sin(x)./x;
>> [x',y']
ans =
   1.000000000000000   0.841470984807897
   0.100000000000000   0.998334166468282
   0.010000000000000   0.999983333416666
   0.001000000000000   0.999999833333342
   0.000100000000000   0.999999998333333
   0.000010000000000   0.999999999983333
>> format short

8.-Comprobar que la suma

n=1 1 2 n =1

>> format long
>> n=1:10;
>> y=1./2.^n;
>> sum(y)
ans =   0.999023437500000
>> format short

9.- Comprobar que la suma

12 n=0 (3) n 2n+1 =π

Calcular la suma (a) n=10, (b) n=20, (c) n=40.

>> format long
>> n=0:10;
>> y=sqrt(12)*(-3).^(-n)./(2*n+1);
>> sum(y)
ans =   3.141593304503082
>> pi
ans =   3.141592653589793
>> format short

10.-Comprobar

π 4 =1 1 3 + 1 5 1 7 + 1 9 +...

>> n=1:4:10001;
>> sum(1./n-1./(n+2))
ans =    0.7853
>> pi/4
ans =    0.7854

>> n=1:2:10001;
>> sum((-1).^((n-1)/2)./n)
ans =    0.7854