Actualizado el 21 de Marzo del 2018 (Publicado el 19 de Noviembre del 2017)
1.852 visualizaciones desde el 19 de Noviembre del 2017
80,4 KB
2 paginas
Creado hace 8a (30/01/2017)
Programaci´on: producto punto de dos vectores
Objetivos. Programar la funci´on que calcule el producto punto de dos vectores.
Requisitos. Programaci´on de funciones, ciclos for, entradas de vectores.
1. Problema: producto punto de dos vectores. En alg´un lenguaje de programaci´on
escribir una funci´on que calcule el producto punto de dos vectores dados.
Entrada: a, b ∈ Rn.
Condici´on que debe cumplir la entrada: los vectores dados son de la misma longitud.
No tiene que verificar esta condici´on.
Salida: el n´umero(cid:80)n
j=1 ajbj.
Soluci´on en el lenguaje de Matlab (guardar en el archivo mydotproduct.m):
function [p] = mydotproduct(a, b),
n = length(a);
p = 0;
for j = 1 : n,
p = p + a(j) * b(j);
end
end
2. An´alisis de complejidad. Calcular el n´umero de operaciones de multiplicaci´on en el
algoritmo anterior. La respuesta es un polinomio de la variable n. Calcular el n´umero de
operaciones de adici´on.
3. Pruebas con vectores peque˜nos. En alg´un lenguaje de programaci´on escribir un
programa que llame a la funci´on del ejercicio anterior, aplic´andola a los vectores
,
3−4
1
.
2
5−2
a =
b =
Soluci´on en el lenguaje de Matlab (guardar en el archivo testmydotproduct1.m):
function [] = testmydotproduct1(),
a = [3; -4; 1]; b = [2; 5; -2];
display(mydotproduct(a, b));
display(a’ * b);
end
Programaci´on: producto punto de dos vectores, p´agina 1 de 2
4. Pruebas con vectores pseudoaleatorios. El prop´osito de estas pruebas es asegurar-
se que la funci´on devuelve resultados correctos. Guardar en el archivo testmydotproduct1.m
y ejecutar:
function [] = testmydotproduct2(),
for testindex = 1 : 10,
n = round(rand() * 10);
a = 2 * rand(n, 1) - 1;
b = 2 * rand(n, 1) - 1;
res1 = mydotproduct(a, b);
res2 = a’ * b;
disp(abs(res1 - res2));
end
end
5. Tiempo de ejecuci´on con vectores largos pseudoaleatorios. En alg´un lenguaje
de programaci´on escribir un programa que genere vectores de tama˜nos grandes: n = 104,
luego n = 105, luego n = 106, aplique a estos vectores la funci´on del Ejercicio 1 y
mida el tiempo de ejecuci´on. Soluci´on en el lenguaje de Matlab (guardar en el archivo
testmydotproduct3.m):
function [] = testmydotproduct3(),
nrep = 10;
for n = [100000, 1000000, 10000000],
display(n);
a = rand(n, 1); b = rand(n, 1);
t1 = cputime();
for rep = 1 : nrep,
p = mydotproduct(a, b);
end
t2 = cputime();
display((t2 - t1) / nrep);
end
end
¿C´omo se cambia el tiempo de ejecuci´on cuando n se multiplica por 10?
Programaci´on: producto punto de dos vectores, p´agina 2 de 2
Comentarios de: Programación: producto punto de dos vectores (0)
No hay comentarios