2012-04-12 22 views
11

ho alcuni programmi scritti in Matlab che ho bisogno di eseguire più volte per alcuni motivi (debug, test con ingresso differente, ecc ...)trame Disattiva in Matlab

Ma, ci sono un sacco di grafici che di sono tracciati dai programmi e dalle sue varie funzioni in modo tale che ogni volta che eseguo il programma, devo aspettare che tutti i grafici vengano visualizzati, il che è molto fastidioso e richiede molto tempo (specialmente quando si lavora con un laptop piccolo). Dopo l'esecuzione del programma, li chiudo con un close all.

Quindi la mia domanda è:

C'è un modo per disattivare tutti i grafici/figure/grafici in Matlab? nelle opzioni o eseguendo un determinato codice come disable plot e enable plot per garantire che non vengano visualizzate cifre.

So che posso solo sfogliare il codice e commentare la parte di stampa, ma non voglio dimenticare per rimuovere il commento.

risposta

13

Provare una combinazione dei due comandi:

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

Il secondo, se lo metti vicino all'inizio del programma, potrebbe fare il trucco per voi. Naturalmente, sta ancora creando i grafici, che potrebbero non essere desiderabili per il tempo di calcolo e/o problemi di RAM.

Questo è un motivo classico per evitare Matlab quando è possibile. Promuove un cattivo design di programmazione. Per risolvere correttamente questo problema, dovresti creare qualcosa che ti permetta di "capovolgere un interruttore" al più alto livello del tuo programma e controllare se i grafici mostrano o non mostrano. Forse ha anche le gradazioni dell'opzione mostra/non mostra in modo da poter selezionare diversi tipi di grafici che non vengono visualizzati a seconda della diagnostica in esecuzione.

Idealmente, si vorrebbe che questa creazione "flip a switch" fosse una classe che ha accesso alla visibilità e alle funzioni di stampa di altri oggetti. Ma poiché l'orientamento interattivo degli oggetti è così ingombrante in Matlab, spesso non vale la pena di sviluppare una soluzione del genere e la maggior parte delle persone non pensa a questo aspetto del design fin dall'inizio del proprio progetto.

Matlab consiglia a qualcuno di risolvere questo problema impostando variabili di flag come "isPlotVisible" o qualcosa del genere e creando funzioni che accettano sempre tali flag. Sono d'accordo che questo è un cattivo progetto.

+0

ah, bello. Non sapevo di quelli. – Richante

+0

La stessa cosa funzionerà anche in Octave, il che è notevole dal momento che la stampa è uno dei modi in cui Octave di solito differisce dalla semplice funzionalità di Matlab. – ely

+2

'set (0, 'DefaultFigureVisible', 'off');' è semplicemente perfetto! Ha notevolmente migliorato le prestazioni del programma. È come se passasse più tempo a creare finestre per le figure che a fare calcoli reali. – Mesop

3

È possibile eseguire MATLAB dalla riga di comando con:

matlab -nojvm 

, ma poi non si ottiene la GUI a tutti. In alternativa, si potrebbe scrivere un file 'plot.m':

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

che non fa nulla. Se questo è nella directory di lavoro (o da qualche altra parte vicino alla parte superiore del percorso), allora la trama chiamerà la tua funzione invece della trama 'reale'. Dovresti fare lo stesso con qualsiasi altra funzione grafica che chiami.

Il modo più vicino che conosco di "disattivazione della stampa" sarebbe una cartella di tali funzioni che è possibile aggiungere al percorso per disabilitare la stampa e rimuovere per abilitare.

+1

+1 soluzione creativa, anche se è orribile (INTENZIONALMENTE ombreggiamento dei compilatori MATLAB?) –

+0

sì, e ancora peggio da quando recentemente ho rimproverato qualcuno per aver dato una risposta che avrebbe [fatto gridare Doug Hull] (http: //blogs.mathworks .com/videos/2010/03/08/top-10-matlab-code-practice-that-make-me-cry /) – Richante

+0

L'ho visto. ;) –

0

I metodi precedenti vanno bene, ma una facile e buona abitudine da fare è usare uno "on/off parameter".Quindi, in pratica, all'inizio del vostro codice, è possibile aggiungere qualcosa di simile:

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

Dopo di che, aggiungere "if DisplayFigure == 1 ... end" per tutti i comandi relativi plottaggio, dove i comandi devono essere all'interno del if (la ... sopra). Quindi non calcolerai nemmeno i grafici, il che ti farà risparmiare un sacco di tempo e memoria. Devi solo modificare il valore della variabile "DisplayFigure" per tracciare o meno le figure.