2013-09-05 9 views
5

Nell'area di lavoro creo una matrice.crea variabile matlab nell'area di lavoro come globale

enter image description here

Ora posso accedere alla variabile nello script. Come fare variabile (2) restituirà 4.

Ma all'interno di una funzione come

function y= getvariable(x) 

y=Variable(x) 
end 

ottengo l'errore

y=getvariable(2) 
    ??? Undefined function or method 'Variable' for input 
    arguments of type 'double'. 

    Error in ==> getvariable at 3 
    y=Variable(x) 

Così come rendere la matrice Variable globale in modo che io possa accedere attraverso qualsiasi funzione?

risposta

6

Anche se si potrebbe utilizzare globali

>> global Variable = rand(50,12); 

...

function y = getvariable(x) 

    % Always needed 
    global Variable; 

    % Here ya go 
    y = Variable; 

end 

il MOLTO migliore alternativa è quella di utilizzare

function x = getvariable(x) 
    % no body needed  
end 

che si chiama come

>> y = getvariable(Variable); 

(Naturalmente, per questo esempio forzato, questo sarebbe solo pari a

>> y = Variable; 

)

Anche se ci sono alcuni casi di utilizzo legittime per le variabili globali, in generale tendono a spaghettificare il codice e renderlo molto più soggetto a bug e molto più difficile da eseguire il debug. Have a read sull'argomento.

+1

Ho un foglio excel che contiene circa 500 valori diversi di variabile. Quindi faccio una variabile matrix da essa. E poi lo uso in una funzione. E non c'è modo in cui penso di poter inserire questi valori excel all'interno di una funzione. C'è un modo per evitare di usare global qui? _ – Moz

+3

@Moz: ... basta passare la variabile matrix alla funzione come argomento? –

+3

Perché non usi una funzione per leggere il tuo file excel ('xlsread', o simili) e iniziare da lì? – Nick

3
  1. chiamata global Variable prima di definire nel vostro spazio di lavoro
  2. chiamata global Variable prima di utilizzarlo nella funzione

Tuttavia vi consiglio di pensare ad altri modi per passare le variabili per la funzione, come globali potrebbe causare difficoltà durante il debug.

+4

Per ulteriori dettagli, vedere http://www.mathworks.co.uk/he lp/matlab/matlab_prog/share-data-between-workspaces.html – am304

5

Come @rody suggerito, passare la matrice e la x all'interno della funzione

sto solo dando un esempio di fare chiarezza.

come si vuole accedere all'elemento 10 di matrice variabile, in modo da rendere la funzione come

function y= getvariable(matrixname,no) 
y=matrixname(no) 
end 

Se si desidera accedere terzo elemento del Variable, quindi si digita

y = GetVariable (Variable, 3)

otterrete 3 ° elemento