4.1 Normas vs distancias en 3D

Normas de un vector en 3D

La norma de un vector se interpreta como una distancia entre la coordenada definida por el vector [xi, yi, zi] y el origen; también se puede realizar respecto a otra referencia.

Para el caso de soluciones matriciales, lo que se usa en un método iterativo es la diferencia entre una solucion xi vs xi+1 que se usa como criterio del error.

Si se observa como el error entre vectores x1 y xi+1se tendría:

x1     =  [ 1  2  3]
x2     =  [ 2  4 -1]
errado =  [-1 -2  4]

se genera con simples instrucciones de python:

# error como la distancia entre dos puntos
# para el caso en 3D
import numpy as np

x0 = np.array([0,0, 0])
x1 = np.array([1,2, 3])
x2 = np.array([2,4,-1])

errado = x1-x2

print('x1 = ', x1)
print('x2 = ', x2)
print('errado = ', errado)

Sin embargo, para visualizar el concepto se obtiene una gráfica:

La norma de x1 se interpreta como la distancia al origen, es decir:

||x|| = \Big[ \sum_{i=0}^{n} x_i ^2 \Big] ^{1/2} ||x_1|| = \sqrt{x^2+y^2+z^2}
errado =  [-1 -2  4]
||errado|| =  4.58257569495584


Observar en el contexto de los temas en video:

La final, si debe existir acoplamiento, es necesario calcular la raiz cuadrada de los cuadrados?

¿ o solo toman en cuenta las diferencias entre las coordenadas?

¿cuál de las formas tiene menos operaciones?


Norma infinito

||x|| = max\Big[ |x_i| \Big]

Extender el proceso a matrices


# error como la distancia entre dos puntos
# para el caso en 3D
import numpy as np

x0 = np.array([0,0, 0])
x1 = np.array([1,2, 3])
x2 = np.array([2,4,-1])

errado = x1-x2

erradonorma = np.linalg.norm(errado)

print('x1 = ', x1)
print('x2 = ', x2)
print('errado = ', errado)
print('||errado|| = ', erradonorma)

# Grafica
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
figura = plt.figure()
ejes = figura.add_subplot(111,projection = '3d')

punto = x0
[x, y , z] = punto
ejes.scatter(x,y,z, c = 'blue',
             marker='o', label = 'x0')

punto = x1
[x, y , z] = punto
ejes.scatter(x,y,z, c = 'red',
             marker='o', label = 'x1')

punto = x2
[x, y , z] = punto
ejes.scatter(x,y,z, c = 'green',
             marker='o', label = 'x2')

linea = np.concatenate(([x0],[x1]),axis = 0)
x = linea[:,0]
y = linea[:,1]
z = linea[:,2]
ejes.plot(x,y,z, label = '||x1||')

linea = np.concatenate(([x0],[x2]),axis = 0)
x = linea[:,0]
y = linea[:,1]
z = linea[:,2]
ejes.plot(x,y,z, label = '||x2||')

linea = np.concatenate(([x1],[x2]),axis = 0)
x = linea[:,0]
y = linea[:,1]
z = linea[:,2]
ejes.plot(x,y,z, label = '||error||')

ejes.set_xlabel('eje x')
ejes.set_ylabel('eje y')
ejes.set_zlabel('eje z')
ejes.legend()
plt.show()