2011-02-02 10 views
20

Tengo un programa ejecutando un bucle Quiero tener dos contadores de tiempo, uno para el bucle, que me dirá cómo registro tomó una iteración del bucle, y uno para todo el programa. Según mi leal saber y entender, tic y toc funcionarán solo una vez.Varios contadores de tiempo en MATLAB

Respuesta

29

eres más que familiarizados con esta sintaxis tic toc:

tic; someCode; elapsed = toc; 

Pero hay otra sintaxis:

start = tic; someCode; elapsed = toc(start); 

La segunda sintaxis hace que el mismo medición de tiempo, pero le permite la opción de ejecutar más de un cronómetro al mismo tiempo. Asigne la salida de tic a una variable tStart y luego use esa misma variable cuando llame a toc. MATLAB mide el tiempo transcurrido entre el tic y su comando toc relacionado y muestra el tiempo transcurrido en segundos. Esta sintaxis le permite sincronizar varias operaciones simultáneas, incluida la sincronización de las operaciones anidadas (matlab documentation of tic toc).

Así es cómo usarlo en su caso. Digamos que este es su código:

for i = 1:M 
    someCode; 
end 

Inserte el tic y toc así:

startLoop = tic; 
for i = 1:N 
    startIteration = tic; 
    someCode; 
    endIteration = toc(startIteration); 
end 
endLoop = toc(startLoop); 

También puede utilizar la sintaxis anterior para crear un vector para la cual el elemento i es la medición del tiempo para la i-ésima iteración. De esta manera:

startLoop = tic; 
for i = 1:N 
    startIteration(i) = tic; 
    someCode; 
    endIteration(i) = toc(startIteration(i)); 
end 
endLoop = toc(startLoop); 
2

Puede utilizar tic y toc para operaciones en tiempo anidado, de la ayuda de Matlab para tic:

tStart=tic; any_statements; toc(tStart); hace que la misma medición del tiempo, pero se permite la opción de ejecutar más de un cronómetro al mismo tiempo. Asigne la salida de tic a una variable tStart y luego use esa misma variable cuando llame a toc. MATLAB mide el tiempo transcurrido entre el tic y su comando toc relacionado y muestra el tiempo transcurrido en segundos. Esta sintaxis que permite cronometrar múltiples operaciones simultáneas, incluyendo la programación de las operaciones anidadas

1

No soy capaz de probar esto ahora, pero debe ser capaz de utilizar múltiples tic y toc declaraciones si almacena los valores en tic variables.

Lea Matlab's documentation en esto, incluso hay una sección sobre anidarlos. Aquí es un ejemplo aproximado:

tStartOverall = tic; 

... 

tStartLoop = tic; 
<your loop code here> 
tEndLoop = toc(tStartLoop); 

... 

tEndOverall = toc(tStartOverall); 
Cuestiones relacionadas