Matlab - mostrar el tiempo que demora corriendo un codigo y actualizar grafica

 
Vista:
Imágen de perfil de Ricardo
Val: 60
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

mostrar el tiempo que demora corriendo un codigo y actualizar grafica

Publicado por Ricardo (42 intervenciones) el 13/07/2017 09:27:44
Buen dia programadores, tengo algunas dudas.

LA PRIMERA TRATA SOBRE UN CRONOMETRO
1. Tengo un codigo .m y quisiera que en una especie de msgbox o algo similar me muestre el tiempo que demora corriendo, pero no solo al final, sino que me muestre como avanza el tiempo como una especie de cronometro de reloj y que pare cuando el codigo termine de ejecutarse
2. Tengo la misma duda anterior pero ya aplicada a un guide, digamos tengo un boton para que corra cierto analisis de un codigo y que en una especie de textbox me muestre como transcurre el tiempo en que demora corriendo y que este pare cuando termina dicho proceso

LA SEGUNDA ES SOBRE ACTUALIZAR UNA GRAFICA
1. Digamos que tengo una grafica pero que esta va cambiando con el tiempo, hay manera de mostrarsela al usuario como va cambiando por iteracion, digamos terminada la 1 iteracion tengo la grafica normal del seno, pero en la iteracion 2, cambio un poco, hay manera de actualizarla y que siga asi sucesivamente con el resto de iteraciones?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

mostrar el tiempo que demora corriendo un codigo y actualizar grafica

Publicado por Lindsey (119 intervenciones) el 13/07/2017 17:34:59
Hola, espero que todas tus dudas queden resueltas con este pequeño ejemplo que hice, lo adjunto para que veas cómo funciona.

Primero que nada el contador. Ya sea en un .m o en un guide lo que puedes hacer es lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
contador=0; % Inicias el contador
for i=1:10 %Pondrás a repetir los cálculos 10 veces
    a=now; % Mide el instante antes de empezar a hacer cálculos
    % Cálculos que vayas a hacer
    % Cálculos que vayas a hacer
    % Cálculos que vayas a hacer
    % Cálculos que vayas a hacer
    % Cálculos que vayas a hacer
    b=now; % Mide el instante después de hacer los cálculos
    tiempo_transcurrido=datevec(b-a); % Calcula el tiempo transcurrido entre a y b
    contador=contador+tiempo_transcurrido(6)+60*tiempo_transcurrido(5)+360*tiempo_transcurrido(4)+(1*24*360)*tiempo_transcurrido(3); % Actualizar el valor del contador
    % Mostrar el contador en el método que desees
 end

El resultado de "tiempo_transcurrido" es un vector de 6 componentes que corresponde a:
1
[año meses días horas minutos segundos]
Como ves en el contador solo incluí desde segundos hasta horas, si tú crees que tu código se va a demorar más de un día puedes agregar el componente 3 de tiempo_transcurrido, y así sucesivamente. Todo está convertido a segundos por lo que el contador guarda los segundos transcurridos al final del for.

Ahora, para mostrar el tiempo guardado en contador puedes hacerlo como desees. En el guide se actualiza el contador en un static text.
Captura-de-pantalla-318

Para actualizar la gráfica solo debes agregar los comandos de graficar en las líneas de "% Cálculos que vayas a hacer" y poner una pausa pequeña para que se observe el cambio en las gráficas. Si no pones pausa todo va a ocurrir muy rápido y no se va a observar cómo se actualiza. Este es el callback del botón:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
axes(handles.axes1)
cla;
lim_a=0;
lim_b=15;
contador=0;
for i=1:10
    a=now;
    fplot(@sin,[lim_a lim_b]);
    pause(0.1)
    lim_a=lim_a+1;
    lim_b=lim_b+1;
    b=now;
    tiempo_transcurrido=datevec(b-a);
    contador=contador+tiempo_transcurrido(6)+60*tiempo_transcurrido(5)+360*tiempo_transcurrido(4)+(1*24*360)*tiempo_transcurrido(3);
    set(handles.text1,'String',num2str(contador));
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar