Vectores con R, Python y Octave
5.6 Vectores con R
Para definir vectores con R
, simplemente utilizamos la función c()
[1] 1 2 3 4 5 6 7 8 9 0
Para saber la longitud de un vector (la dimensión), utilizamos la función length()
[1] 10
5.6.1 Operaciones con vectores en R
Sumar y restar dos o más vectores es muy simple, siempre y cuando sean de la misma dimensión:
[1] 1 5 2 2 5
[1] -1 1 -4 4 5
El producto por un escalar también funciona de forma sencilla:
[1] 2 0 -2 0 4 0 -4
[1] -2 0 2 0 -4 0 4
[1] 5 0 -5 0 10 0 -10
5.6.2 Producto escalar en R
El producto escalar no está definido en R
, pero es sencillo crear una función que nos lo calcule:
productoEscalar = function(x,y){
if (length(x) == length(y)){
sum(x*y)
}else{
print("ERROR: No se puede calcular el producto escalar de estos dos vectores porque
no son de la misma dimensión")
}
}
Simplemente, lo que hace la función anterior es calcular el producto escalar de dos vectores, siempre y cuando estos tengan la misma dimensión.
Si no, salta un mensaje explicando el error cometido.
[1] 0
5.6.3 Norma Euclídea con R
Para calcular la norma euclídea de un vector, utilizamos la función Norm()
[1] 4
5.6.4 Calcular Distancia Euclídea entre dos puntos con R
La distancia entre dos puntos \(x,y\), se define como la norma del vector \(\vec{xy}\), es decir \(\text{d}(x,y) = ||x-y||\). Para calcularla, definimos la función distancia()
del siguiente modo:
distancia = function(x,y){
if (length(x) == length(y)){
Norm(x-y)
}else{
print("ERROR: No se puede calcular la distancia entre estos dos puntos porque
no son de la misma dimensión")
}
}
Y la ponemos en práctica del siguiente modo:
[1] 7.681146
Simplemente, lo que hace la función anterior es calcular la distancia Euclídea entre dos puntos, siempre y cuando estos tengan la misma dimensión.
Si no, salta un mensaje explicando el error cometido.
5.6.5 Ángulo entre dos vectores en R
Si queremos calcular el ángulo entre dos vectores, debemos definir nosotros mismos la función
angleRad = function(x,y){
if (length(x) == length(y)){
acos(productoEscalar(x,y)/(Norm(x)*Norm(y)))
}else{
print("ERROR: No se puede calcular el ángulo entre estos dos vectores porque
no son de la misma dimensión")
}
}
angleRad(x,y)
[1] 1.570796
Nuestra función nos devuelve el resultado en Radianes. En caso de querer el resultado en grados, lo que podemos hacer es una pequeña conversión:
angleGrad = function(x,y){
if (length(x) == length(y)){
acos(productoEscalar(x,y)/(Norm(x)*Norm(y)))*360/(2*pi)
}else{
print("ERROR: No se puede calcular el ángulo entre estos dos vectores porque
no son de la misma dimensión")
}
}
angleGrad(x,y)
[1] 90
5.6.6 Calcular la proyección ortogonal de \(\vec{v}\) sobre \(\vec{u}\) con R
proyeccionOrt = function(u,v){
if (length(u) == length(v)){
productoEscalar(u,v)/Norm(u)^2*u
}else{
print("ERROR: No se puede calcular la proyección ortogonal de v sobre
u porque no son de la misma dimensión")
}
}
u = c(3,1)
v = c(1,2)
proyeccionOrt(u,v)
[1] 1.5 0.5
5.6.7 Producto vectorial con R
productoVectorial= function(x,y){
if (length(x) == length(y) & length(x) == 3){
c(x[2]*y[3] - x[3]*y[2], -(x[1]*y[3]-x[3]*y[1]), x[1]*y[2]-x[2]*y[1])
}else{
print("No se cumplen las condiciones necesarias para calcular el
producto vectorial de estos dos vectores")
}
}
[1] 5 -1 -1
5.7 Vectores con Python
Para crear un vector en Python
, utilizamos numpy.array()
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
Para calcular la longitud (la dimensión), utilizamos la función len()
10
5.7.1 Operaciones con vectores en Python
Sumar y restar dos o más vectores es muy simple, siempre y cuando sean de la misma dimensión:
array([1, 5, 2, 2, 5])
array([-1, 1, -4, 4, 5])
El producto por un escalar también funciona de forma sencilla:
array([ 2, 0, -2, 0, 4, 0, -4])
array([-2, 0, 2, 0, -4, 0, 4])
array([ 5, 0, -5, 0, 10, 0, -10])
5.7.2 Producto escalar en Python
def productoEscalar(x,y):
if len(x) == len(y):
suma = 0
for i in range(0,len(x)):
suma = suma + x[i]*y[i]
return suma
else:
return "ERROR: las longitudes de los vectores no coinciden"
x = np.array([0, 3, -1, 3, 5])
y = np.array([1, 2, 3, -1, 0])
productoEscalar(x,y)
0
Simplemente, lo que hace la función anterior es calcular el producto escalar de dos vectores, siempre y cuando estos tengan la misma dimensión.
Si no, salta un mensaje explicando el error cometido.
5.7.3 Norma Euclídea con Python
Para calcular la norma de un vector, lo que hacemos es utilizar la función numpy.linalg.norm()
:
4.0
5.7.4 Calcular Distancia Euclídea entre dos puntos con Python
Para calcular la distancia entre dos puntos, la definimos la norma del vector que los une, es decir \(d(x,y)=||x−y||\). En nuestro caso vamos a utilizar la función distancia()
, la cual definimos del siguiente modo:
def distancia(x,y):
import numpy as np
if len(x) == len(y):
dist = np.linalg.norm(x-y)
return dist
else:
return "ERROR: las longitudes de los vectores no coinciden"
7.681145747868608
5.7.5 Ángulo entre dos vectores en Python
def angleRad(x,y):
import numpy as np
import math
if len(x) == len(y):
angle = math.acos(productoEscalar(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)))
return angle
else:
return "ERROR: Las dimensiones no coinciden"
x = np.array([0, 3, -1, 3, 5])
y = np.array([1, 2, 3, -1, 0])
angleRad(x,y)
1.5707963267948966
Si lo que queremos es el resultado en grados,
def angleGrad(x,y):
import numpy as np
import math
if len(x) == len(y):
angle = math.acos(productoEscalar(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)))
return angle/(2*math.pi)*360
else:
return "ERROR: Las dimensiones no coinciden"
x = np.array([0, 3, -1, 3, 5])
y = np.array([1, 2, 3, -1, 0])
angleGrad(x,y)
90.0
5.7.6 Calcular la proyección ortogonal de \(\vec{v}\) sobre \(\vec{u}\) con Python
def proyeccionOrt(u,v):
import numpy as np
if len(u) == len(v):
proy = (productoEscalar(u,v)/pow(np.linalg.norm(u),2))*u
return proy
else:
return "ERROR: Las dimensiones no coinciden"
u = np.array([3,1])
v = np.array([1,2])
proyeccionOrt(u,v)
array([1.5, 0.5])
5.8 Vectores con Octave
Todo lo relativo a vectores con Octave
se encuentra en un script en la carpeta codigo
, subcarpeta Octave
, del repositorio del curso de Álgebra Lineal en GitHub.