2012-04-12 16 views
11

Tengo algunos programas escritos en Matlab que se necesita para ejecutar varias veces por algunas razones (depuración, las pruebas con diferentes insumos, etc ...)parcelas Deshabilitar Matlab

Sin embargo, hay una gran cantidad de gráficos que de están graficados por los programas y sus diversas funciones, de modo que cada vez que ejecuto el programa, tengo que esperar a que se muestren todos los gráficos, lo cual es muy molesto y consume mucho tiempo (especialmente cuando se trabaja con una computadora portátil pequeña). Después de que se ejecuta el programa, los cierro con un close all.

Así que mi pregunta es:

¿Hay una manera de desactivar todas las parcelas/figuras/gráficos en Matlab? en las opciones, o ejecutando un código determinado como disable plot y enable plot para asegurarse de que no se muestran las cifras.

Sé que puedo navegar por el código y comentar la parte del trazado, pero no quiero olvidar para descomentar.

Respuesta

13

Pruebe alguna combinación de los dos comandos:

set(gcf,'Visible','off')    % turns current figure "off" 
set(0,'DefaultFigureVisible','off'); % all subsequent figures "off" 

El segundo, si lo pones cerca del comienzo de su programa, puede hacer el truco para usted. Por supuesto, todavía está creando tramas, lo que puede ser indeseable para problemas de tiempo de cómputo y/o RAM.

Esta es una razón clásica para evitar Matlab cuando se puede. Fomenta un mal diseño de programación. Para resolver este problema correctamente, debe crear algo que le permita "activar un interruptor" en el nivel más alto de su programa y controlar si las representaciones se muestran o no. Quizás incluso tenga gradaciones de la opción mostrar/no mostrar para que pueda seleccionar diferentes tipos de gráficos que no se muestran dependiendo de qué diagnóstico esté ejecutando.

Idealmente, querría que esta creación de "cambio de botón" sea una clase que tenga acceso a la visibilidad y funciones de trazado de otros objetos. Pero debido a que la orientación interactiva de los objetos es tan engorrosa en Matlab, a menudo no vale la pena el esfuerzo desarrollar una solución de este tipo, y la mayoría de las personas no piensa en este aspecto del diseño desde el comienzo de su proyecto.

Matlab animaría a alguien a resolver esto haciendo variables de marcador como "isPlotVisible" o algo así, y creando funciones que siempre acepten tales indicadores. Estoy de acuerdo que este es un mal diseño.

+0

ah, bien. No sabía sobre eso. – Richante

+0

Lo mismo también funcionará en Octave, lo que es notable ya que el trazado es una de las formas en que Octave suele diferir de la funcionalidad normal de Matlab. – ely

+2

El 'set (0, 'DefaultFigureVisible', 'off');' es simplemente perfecto. Mejoró enormemente el rendimiento del programa. Es como si hubiera pasado más tiempo creando ventanas para las figuras que haciendo cálculos reales. – Mesop

3

Usted podría funcionar MATLAB desde la línea de comandos con:

matlab -nojvm 

pero luego no obtener la interfaz gráfica de usuario en absoluto. Alternativamente, podría escribir un archivo 'plot.m':

function h = plot(varargin) 
    h = []; 
end 

que no hace nada. Si esto está en el directorio de trabajo (o en algún otro lugar cerca de la parte superior de la ruta), la trama llamará a su función en lugar de la trama 'real'. Tendrá que hacer lo mismo desde cualquier otra función de gráficos que llame.

La manera más cercana que conozco de 'desactivar el trazado' sería una carpeta de tales funciones que puede agregar a la ruta para deshabilitar el trazado, y eliminar para habilitar.

+1

+1 solución creativa, aunque es horrible (ocultando INTENCIONALMENTE MATLAB builtins?) –

+0

yup, y lo que es peor desde que castigé recientemente a alguien por dar una respuesta que [haría llorar a Doug Hull] (http: //blogs.mathworks .com/videos/2010/03/08/top-10-matlab-code-practices-that-make-me-cry /) – Richante

+0

Vi eso. ;) –

0

Los métodos anteriores están bien, pero un hábito fácil y bueno de tomar es usar un "on/off parameter".Así que, básicamente, al comienzo de su código, se puede añadir algo como:

DisplayFigure = 1; %1 = display, 0 = no display 

Después de eso, añadir "if DisplayFigure == 1 ... end" para todos sus comandos relacionados con el trazado, donde los comandos deben estar dentro de la instrucción if (por encima de la ...) Por lo tanto, ni siquiera calculará las tramas, lo que le ahorrará mucho tiempo y memoria. Solo tiene que cambiar el valor de la variable "DisplayFigure" para trazar o no las figuras.

Cuestiones relacionadas