Vectores
Un vector 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 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.
Los coeficientes de los vectores unitarios (las proyecciones del vector 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=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
La función
>> 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
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=[5 3 -5]; >> r(1) ans =5 >> r(end) ans =-5 >> length(r) ans = 3
Con el operador
>> v=[4 10 -3 7 -1 0 8 13 -7 0];
>> u=v(3:7)
u = -3 7 -1 0 8
Creamos un vector
>> 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
>> 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 por un escalar λ es otro vector de la misma dirección, se multiplica cada elemento por el escalar
>> 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=[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
No podemos sumar estos dos polinomios ya que los vectores
>> 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
El producto escalar se obtiene multiplicando el vector fila
MATLAB dispone de la función dot(u,v) para calcular el producto escalar de dos vectores
>> u = [5 6 7]; >> v = [4 3 2]; >> dot(u,v) ans = 52 >> u*v' ans = 52
Cuando el vector y coinciden, calculamos el módulo del vector .
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 y
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 y son perpendiculares si el producto escalar es cero.
La proyección de un vector a lo largo de la dirección del vector , se calcula del siguiente modo: se multiplica escalarmente el vector por el vector unitario cuya dirección y sentido son los del vector .
Por ejemplo, el ángulo que forma el vector con el eje Z se calcula
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,
>> x=linspace(0,6,5) x = 0 1.5000 3.0000 4.5000 6.0000
El espaciado constante entre dos valores consecutivos Δx es
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
>> x=logspace(1,4,4) x = 10 100 1000 10000
Vectores predefinidos
- La función
zeros(1,n) crea una vector fila den elementos que son todos ceros - La función
zeros(n,1) crea una vector columna den elementos que son todos ceros - La función
ones(1,n) crea una vector fila den elementos que son todos unos - La función
ones(n,1) crea una vector columna den elementos que son todos unos
>> 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:
>> 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 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 = [3 7 2 16]; >> mean(A) ans = 7 |
---|---|---|
max(u) | c es el mayor elemento del vector | >> 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 = [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 = [5 6 7]; >> v = [4 3 2]; >> dot(u,v) ans = 52 |
cross(u,v) | Calcula el producto vectorial . | >> u = [5 6 7]; >> v = [4 3 2]; >> cross(u,v) ans = -9 18 -9 |
Suma de los elementos de un vector
La suma
Producto de los elementos de un vector
El producto
Probar que
>> 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: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
fliplr
La función
>> 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
>> 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
- Acceder a los tres primeros elementos del vector
u - Acceder al segundo, cuarto y sexto elementos del vector
u - Acceder al sexto, cuarto y sexto elemento del vector
u - Acceder a los tres últimos elementos del vector
u - Acceder al primero, tercero y cuarto elementos del vector
u
>> 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
- El valor máximo y el índice de dicho elemento en el vector
u - El valor mínimo y el índice de dicho elemento en el vector
u - La suma de todos los elementos
- El producto de todos los elementos
- El valor medio
- Crear un vector
v a partir deu pero con los elementos ordenados en orden ascendente, utilizando la funciónsort
>> 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
para los siguientes valores de
>> 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
- Establecer el formato largo para expresar los números con 15 decimales (
format long ) - Crear un vector x cuyos elementos son 1,0.1, 0.01,0.001,...y calcular el cociente sin(x)/x. Regresar al formato por defecto(
format short )
>> 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
- Establecer el formato, 15 decimales (
format long ). Calcular la suma (a) n=10, (b) n=20, (c) n=40. - Crear el vector
n , luego el vectory =1/2n, y sumar los elementos del vectory con la funciónsum de MATLAB - Restaurar el formato por defecto
>> format long >> n=1:10; >> y=1./2.^n; >> sum(y) ans = 0.999023437500000 >> format short
9.- Comprobar que la suma
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
>> 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