Evitando Los Ciclos Repetitivos

3
 Matlab Laboratorio de Programación y Computación  Prof. Helfer 1 El comportamiento usual de Matlab puede ser cambiado especificando un formato numérico diferente dentro del menú File/Preferences o escribiendo el comando FORMAT en la señal de ingreso de comandos. La tabla siguiente indica el efecto prod ucido al ca mbiar el formato d e presentación de la razón de variables calculadas como: >> razon = 610./12 razon = 50.8333 Matlab Command ratio Comments format short 50.8333 4 dígitos decimales format long 50.83333333333334 14 dígitos decimales format short e 5.0833e+001 4 dígitos decimales más exponente format long e 5.083333333333334e+001 14 dígitos decimales más exponente format short g 50.8333 mejor que format short o format short e (predefinido), cambia cuando ans > 1000 format long g 5.083333333333334e+001 mejor que format long o format long e format bank 50.83 2 dígitos decimales format + + escribe el signo +, - o en blanco(cero) format bank formato fijo para dólares y centavos format rat formato de salida como una razón(ratio) format compact formato con salida sin líneas vacías format loose reestablece la salida con espacios vacíos. format hex salida con formato hexadecimal % rqroots: Script para encontrar las raíces cuadráticas format compact; % señal de ingreso de los coeficientes a = input('Ingres e el coeficiente cuadrático a: ');  b = input('I ngrese el coef iciente cuadr ático b: '); c = input('Ingres e el coeficiente cuadrático c: '); disp('') % calcula los valores intermedios x & y x = -b/(2*a); y = sqrt(b^2-4*a* c)/(2*a); % calcula y despliega las raíces s1 = x+y; disp('Valor de la primera raíz cuadrática: '),disp(s1); s2 = x-y; disp('Valor de la segunda raíz cuadrática: '),disp(s2);

Transcript of Evitando Los Ciclos Repetitivos

Page 1: Evitando Los Ciclos Repetitivos

7/21/2019 Evitando Los Ciclos Repetitivos

http://slidepdf.com/reader/full/evitando-los-ciclos-repetitivos 1/3

Matlab 

Laboratorio de Programación y Computación  Prof. Helfer 

1

El comportamiento usual de Matlab puede ser cambiado especificando un formato numérico

diferente dentro del menú File/Preferences o escribiendo el comando FORMAT en la señal de

ingreso de comandos. La tabla siguiente indica el efecto producido al cambiar el formato de

presentación de la razón de variables calculadas como:

>> razon = 610./12razon =

50.8333Matlab Command ratio Comments

format short 50.8333 4 dígitos decimales

format long 50.83333333333334 14 dígitos decimales

format short e 5.0833e+001 4 dígitos decimales más exponente

format long e 5.083333333333334e+001 14 dígitos decimales más exponente

format short g 50.8333 mejor que format short o format short e

(predefinido), cambia cuando ans > 1000

format long g 5.083333333333334e+001 mejor que format long o format long e

format bank 50.83 2 dígitos decimales

format + + escribe el signo +, - o en blanco(cero)

format bank formato fijo para dólares y centavos

format rat formato de salida como una razón(ratio)

format compact  formato con salida sin líneas vacías

format loose reestablece la salida con espacios vacíos.

format hex salida con formato hexadecimal

% rqroots: Script para encontrar las raíces cuadráticas

format compact;

% señal de ingreso de los coeficientes

a = input('Ingrese el coeficiente cuadrático a: ');

 b = input('Ingrese el coeficiente cuadrático b: ');

c = input('Ingrese el coeficiente cuadrático c: ');

disp('')

% calcula los valores intermedios x & y

x = -b/(2*a);

y = sqrt(b^2-4*a*c)/(2*a);

% calcula y despliega las raíces

s1 = x+y;

disp('Valor de la primera raíz cuadrática: '),disp(s1);

s2 = x-y;

disp('Valor de la segunda raíz cuadrática: '),disp(s2);

Page 2: Evitando Los Ciclos Repetitivos

7/21/2019 Evitando Los Ciclos Repetitivos

http://slidepdf.com/reader/full/evitando-los-ciclos-repetitivos 2/3

 

 

Laboratorio de Programación y Computación  Prof. Helfer 

2

Evitando los Ciclos Repetitivos

En general, los ciclos repetitivos deben evitarse en Matlab porque pueden aumentar

significativamente el tiempo de ejecución de un programa. Matlab tiene la capacidad de aumentar

dinámicamente el tamaño de vectores y matrices cuando un ciclo repetitivo lo requiera. Por

ejemplo, un vector puede tener una longitud N en la N-ésima ejecución de un ciclo y en la N-ésima+1, Matlab puede aumentar la longitud del vector de N a N+1. Sin embargo, esta localización

dinámica de almacenamiento no está acompañada eficientemente en términos de tiempo de cálculo.

Por consiguiente, considere el siguiente programa para generar una onda sinusoidal:

clear all% sinusoide de longitud 5000ticfor t=1:5000y(t) = sin(2*pi*t/10);

endtoc

Esto da como resultado un escalar t, con un valor final de 5000 y un vector  y, una onda sinusoidal

con 10 muestras por ciclo, con 5000 elementos. Cada vez que el comando dentro del ciclo for es

ejecutado, el tamaño de la variable  y  se aumenta en uno. El tiempo de ejecución en cierta

computadora es 7,91 segundos. Considere ahora este programa:

% sinusoide de longitud 10000ticfor t=1:10000

y(t) = sin(2*pi*t/10);endtoc 

Despejando el espacio de trabajo de matlab y corriendo este programa para producir un vector  y que

tiene 10000 elementos requiere un tiempo de ejecución en la misma computadora de 28,56

segundos, casi cuatro veces el tiempo de ejecución del primer programa. Forzando a que Matlab

localice memoria para  y cada vez que se ejecuta el ciclo  for  causa que el tiempo de ejecución crezca

geométricamente con la longitud del vector.

Para maximizar la velocidad los arreglos (vectores/matrices) deben ser prelocalizados antes que se

ejecute el ciclo for. Para eliminar la necesidad de aumentar la longitud de  y cada vez que se ejecutael ciclo, el programa podría escribirse como:

% sinusoide de longitud 10000 con prelocalización del vectortic

y = zeros(1,10000);for t=1:10000y = sin(2*pi*t/10);

endtoc 

En este caso,  y fue definido arbitrariamente definido como un vector de longitud 10000, con valorrecalculados en el ciclo repetitivo. El tiempo de cálculo en este caso fue 2,03 segundos. El tiempo

Page 3: Evitando Los Ciclos Repetitivos

7/21/2019 Evitando Los Ciclos Repetitivos

http://slidepdf.com/reader/full/evitando-los-ciclos-repetitivos 3/3

 

 

Laboratorio de Programación y Computación  Prof. Helfer 

3

de ejecución puede ser disminuído aún más "vectorizando" el algoritmo, aplicando una operación a

un vector completo en vez de un elemento por vez. Aplicando esta aproximación a nuestro ejemplo

de generación del sinusoide:

% mejor método para la generación del sinusoide

tict = 1:10000;y = sin(2*pi*t/10);toc

Este programa produce el vector t con 10000 elementos y luego el vector y con 10000 elementos, el

cual es el mismo  y  del segundo programa anterior. Sin embargo, usando nuevamente la misma

computadora, este programa se ejecuta en 0,06 segundos opuestamente a los 16,04 segundos que

demoró el ciclo for del segundo programa, o los 1,92 segundos del ciclo for con prelocalización del

vector.