Referencia: Chapra 10.3.1 p298 pdf322, Burden 7.1 p320, Rodríguez 4.4.1 p132, MATG1049 Algebra Lineal – Norma, distancias y ángulos
Es una manera de expresar la magnitud de sus componentes:
Sea X un vector de n componentes:
||X|| = \sum_{i=1}^{n}|X_i| ||X|| = max|X_i| , i=1,2, ...,n ||X|| = \left( \sum_{i=1}^{n}X_i^2 \right) ^{1/2}Sea una matriz A de nxn componentes:
||A|| = max(\sum_{j=1}^{n}|a_{i,j}|, i = 1,2,...,n) ||A|| = max(\sum_{i=1}^{n}|a_{i,j}|, j = 1,2,...,n) ||A|| = \left( \sum_{i=1}^{n}\sum_{j=1}^{n} a_{i,j}^2 \right) ^{1/2}Ejercicios
Ejercicio 1. Usando los conceptos de normas mostradas, para el siguiente vector:
x= [5, -3, 2]
a) calcule las normas mostradas (en papel),
b) Realice los respectivos algoritmos en python,
c) Determine los tiempos de ejecución de cada algoritmo. ¿Cúál es el más rápido?
Ejercicio 2. Usando los conceptos de normas mostradas, para la siguiente matriz:
A = [[5, -3, 2], [4, 8,-4], [2, 6, 1]]
Repita los literales del ejercicio anterior.
Nota: para convertir una lista X en arreglo use: np.array(X)
Normas con Numpy
Algunas normas vectoriales y matriciales con Python. Cálculo del número de condición.
Se presenta un ejemplo usando la matriz A y el vector B en un programa de prueba.
A = np.array([[3,-0.1,-0.2], [0.1,7,-0.3], [0.3,-0.2,10]]) B = np.array([7.85,-19.3,71.4])
Instrucciones en Python:
# Normas vectoriales y matriciales # Referencia: Chapra 10.3, p299, pdf323 import numpy as np def norma_p(X,p): Xp = (np.abs(X))**p suma = np.sum(Xp) norma = suma**(1/p) return(norma) def norma_euclidiana(X): norma = norma_p(X,2) return(norma) def norma_filasum(X): sfila = np.sum(np.abs(X),axis=1) norma = np.max(sfila) return(norma) def norma_frobenius(X): tamano = np.shape(X) n = tamano[0] m = tamano[1] norma = 0 for i in range(0,n,1): for j in range(0,m,1): norma = norma + np.abs(X[i,j])**2 norma = np.sqrt(norma) return(norma) def num_condicion(X): M = np.copy(X) Mi = np.linalg.inv(M) nM = norma_filasum(M) nMi= norma_filasum(Mi) ncondicion = nM*nMi return(ncondicion) # Programa de prueba ####### # INGRESO A = np.array([[3,-0.1,-0.2], [0.1,7,-0.3], [0.3,-0.2,10]]) B = np.array([7.85,-19.3,71.4]) p = 2 # PROCEDIMIENTO normap = norma_p(B, p) normaeucl = norma_euclidiana(B) normafilasuma = norma_filasum(A) numerocondicion = num_condicion(A) # SALIDA print('vector:',B) print('norma p: ',2) print(normap) print('norma euclididana: ') print(normaeucl) print('******') print('matriz: ') print(A) print('norma suma fila: ',normafilasuma) print('número de condición:') print(numerocondicion)
cuyos resultados del ejercicio serán:
vector: [ 7.85 -19.3 71.4 ] norma p: 2 74.3779033047 norma euclididana: 74.3779033047 ****** matriz: [[ 3. -0.1 -0.2] [ 0.1 7. -0.3] [ 0.3 -0.2 10. ]] norma suma fila: 10.5 número de condición: 3.61442432483 >>>
compare sus resultados con las funciones numpy:
np.linalg.norm(A) np.linalg.cond(A)
http://www.numpy.org/devdocs/reference/generated/numpy.linalg.norm.html
http://www.numpy.org/devdocs/reference/generated/numpy.linalg.cond.html