Actualizado el 21 de Marzo del 2018 (Publicado el 19 de Noviembre del 2017)
1.970 visualizaciones desde el 19 de Noviembre del 2017
99,3 KB
2 paginas
Creado hace 8a (28/04/2016)
Programaci´on: normas matriciales 1 e ∞
Objetivos. Programar las funciones que calculen las normas matriciales asociadas a las
normas vectoriales (cid:107) · (cid:107)1 y (cid:107) · (cid:107)∞.
Requisitos. Normas matriciales, programaci´on de funciones, ciclos for, entradas de ma-
trices.
1. F´ormulas. Dada una matriz A ∈ Mm×n(R), sus normas matriciales (cid:107) · (cid:107)matr,1 y
(cid:107) · (cid:107)matr,∞ se pueden calcular mediante las siguiente f´ormulas:
n(cid:88)
k=1
|Aj,k|.
(cid:107)A(cid:107)matr,1 = max
1≤k≤n
|Aj,k|,
(cid:107)A(cid:107)matr,∞ = max
1≤j≤m
m(cid:88)
j=1
2. Problema: la norma matricial 1. En alg´un lenguaje de programaci´on escribir una
funci´on que calcule la norma (cid:107)A(cid:107)matr,1 de la matriz dada A. Una posible soluci´on en el
lenguaje de MATLAB:
function result = matrixnorm1(A),
[m, n] = size(A);
result = 0;
for k = 1 : n,
s = 0;
for j = 1 : m,
s = s + ???;
end
result = max(result, s);
end
end
3. Problema: calcular la norma matricial 1 usando las funciones sum y max
de manera eficiente. Estudie la sintaxis de la funci´on sum del lenguaje MATLAB.
¿Qu´e pasa al aplicar esta funci´on a una matriz? Ejecute los siguientes comandos:
A = [3 4 5; 11 12 13; 51 52 53];
sum(A)
sum(A, 2)
Usando las funciones sum y max escriba la funci´on matrixnorm1 de manera m´as breve y
m´as eficiente, evitando ciclos.
Programaci´on: normas matriciales 1 e ∞, p´agina 1 de 2
4. Problema: la norma matricial ∞. En alg´un lenguaje de programaci´on escribir una
funci´on que calcule la norma (cid:107)A(cid:107)matr,∞ de la matriz dada A.
function result = matrixnorminf(A),
[m, n] = size(A);
...
end
5. Pruebas con matrices peque˜nas. Soluci´on en el lenguaje de MATLAB (guardar en
el archivo testmatrixnormsmall.m):
function [] = testmatrixnormsmall(),
A = [3 -4; -5 1];
display([matrixnorm1(A), norm(A, 1)]);
display([matrixnorminf(A), norm(A, Inf)]);
end
6. Pruebas con matrices grandes. Soluci´on en el lenguaje de MATLAB (guardar en
el archivo testmatrixnormlarge.m):
function [] = testmatrixnormlarge(),
for n = [256, 512, 1024, 2048, 4096],
display(n);
A = 2 * rand(n, n) - ones(n, n);
t = cputime();
r = matrixnorm1(A);
t1 = cputime() - t;
t = cputime();
r = matrixnorminf(A);
tinf = cputime() - t;
display([t1 tinf]);
end
end
Despu´es de ejecutar esta funci´on se recomienda corregirla de la siguiente manera: en vez
de n = 256, . . . , 4096 poner tales valores de n (por ejemplo, algunas potencias de 2) para
los cuales el tiempo de ejecuci´on es de 10−2 segundos a 102 segundos.
¿C´omo se cambia el tiempo de ejecuci´on al multiplicar n por 2?
Programaci´on: normas matriciales 1 e ∞, p´agina 2 de 2
Comentarios de: Programación: normas matriciales 1 e infinito (0)
No hay comentarios