• No se han encontrado resultados

Programaci´on: operaci´on axpy

N/A
N/A
Protected

Academic year: 2022

Share "Programaci´on: operaci´on axpy"

Copied!
2
0
0

Texto completo

(1)

Programaci´ on: operaci´ on axpy

Objetivos. Programar una funci´on que calcule αx + y, donde α ∈ R, x, y ∈ Rn.

Requisitos. Programaci´on de funciones con arreglos y ciclos for; creaci´on de vectores pseudoaleatorios; medici´on del tiempo de ejecuci´on.

1. Problema: operaci´on axpy. En alg´un lenguaje de programaci´on escribir una funci´on que calcule el vector αx + y, donde α ∈ R, x, y ∈ Rn.

Entrada: α ∈ R, x, y ∈ Rn.

Condici´on que debe cumplir la entrada: los vectores dados x, y son de la misma longitud. No tiene que verificar esta condici´on.

Salida: el vector αx + y.

Soluci´on en el lenguaje de Matlab (guardar en el archivo axpy.m):

function r = axpy(a, x, y), n = length(x);

r = zeros(n, 1);

for j = 1 : n,

r(j) = a * x(j) + y(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. Escribir un programa que llame a la funci´on del ejercicio anterior, aplic´andola a los siguientes datos:

α = 5, x =

 3

−4 1

, y =

 2 5

−2

.

Nuestra funci´on axpy debe regresar el mismo resultado que la expresi´on alpha * x + y.

Soluci´on en el lenguaje de Matlab (guardar en el archivo testaxpy1.m):

function [] = testaxpy1(),

alpha = 5; x = [3; -4; 1]; y = [2; 5; -2];

display(axpy(alpha, x, y));

display(alpha * x + y);

end

Programaci´on: operaci´on axpy, p´agina 1 de 2

(2)

4. Prueba con un vector corto pseudoaleatorio.

function [] = testaxpy2(), alpha = 2 * rand() - 1;

x = 2 * rand(n, 1) - ones(n, 1);

y = 2 * rand(n, 1) - ones(n, 1);

display(alpha);

display(x);

display(y);

p = axpy(alpha, x, y);

display(p);

q = alpha * x - y;

display(norm(p - q));

end

5. Pruebas con vectores pseudoaleatorios largos. En alg´un lenguaje de progra- maci´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 tiem- po de ejecuci´on. Las computadoras contemporaneas realizan una operaci´on de tipo axpy muy r´apidamente, a´un cuando n es grande. Para medir mejor los intervalos de tiempo, repetimos cada prueba 10 veces. Soluci´on en Matlab (guardar en el archivo testaxpy3.m):

function [] = testaxpy3(), nrep = 10;

for n = [10000, 100000, 1000000], display(n);

alpha = 2 * rand() - 1;

x = 2 * rand(n, 1) - ones(n, 1);

y = 2 * rand(n, 1) - ones(n, 1);

t1 = cputime();

for rep = 1 : nrep,

p = axpy(alpha, x, y);

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: operaci´on axpy, p´agina 2 de 2

Referencias

Documento similar

Notemos que la funci´ on mulmatvec1r es de nivel 2 porque tiene dos ciclos for a˜ nidados: el ciclo exterior est´ a escrito de manera expl´ıcita, el ciclo interior est´ a

Programar el m´ etodo de la sustituci´ on hacia adelante para resolver sistemas de ecuaciones lineales con matrices triangulares

Los siguientes comandos est´ an escritos en el lenguaje de Matlab y se pueden ejecutar en el sistema Matlab o en sus an´ alogos (GNU Octave, Scilab, FreeMat).. Vectores ortogonales y

Programar una funci´ on que calcule la reflexi´ on ortogonal de un vector respecto al hipersubespacio determinado por un vector no

Idea: transformar un vector en otro vector de la misma longitud por medio de una reflexi´ on ortogonal.. Ejercicio te´ orico (resolver antes de la clase

Mediante ejercicios peque˜ nos intentamos comprender el comando + = empleado en Wol- fram Mathematica y algunos otros lenguajes de programaci´ on.. Ejemplo de reducci´ on de

(No es escencial pedir a B que las entradas de su primer columna salvo la entrada B 1,1 sean iguales a cero, sin embargo pensaremos que es as´ı).. Programar el segundo paso de

En lenguajes de programaci´ on orientados a matrices se pueden usar operaciones vectoriales para eliminar el ciclo sobre j.. M´ as a´ un, utilizando la operaci´ on de multiplicaci´