2013-09-05 16 views
5

W obszarze roboczym tworzę macierz.utwórz zmienną matlab w obszarze roboczym jako globalną

enter image description here

Teraz mogę uzyskać dostęp do zmiennej w skrypcie. Jak robi zmienna (2) zwróci 4.

Ale wewnątrz funkcji jak

function y= getvariable(x) 

y=Variable(x) 
end 

otrzymuję błąd

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

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

Więc jak zrobić macierz Variable globalny tak, że mogę do niego dostęp przez jakąkolwiek funkcję?

Odpowiedz

6

Chociaż mógłby używać globalnych

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

...

function y = getvariable(x) 

    % Always needed 
    global Variable; 

    % Here ya go 
    y = Variable; 

end 

DUŻO lepszym rozwiązaniem jest użycie

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

którą nazywamy jako

>> y = getvariable(Variable); 

(Oczywiście, w tym contrived przykład, byłoby to po prostu być równa

>> y = Variable; 

)

Chociaż istnieją pewne uzasadnione przypadki użycia dla zmiennych globalnych, na ogół mają tendencję do spaghettify swój kod i uczynić go o wiele bardziej podatne na błędy i znacznie trudniejsze do debugowania. Have a read na ten temat.

+1

Mam arkusz excel, który zawiera około 500 różnych wartości zmiennej. Tak więc tworzę z niej zmienną macierzy. A potem używam go w funkcji. I nie ma możliwości, bym mógł wprowadzić te wartości excela do funkcji. Czy jest jakiś sposób na uniknięcie używania tu globalnego? _ – Moz

+3

@Moz: ... po prostu przekazać tę macierzową zmienną do funkcji jako argument? –

+3

Dlaczego nie używasz funkcji odczytu pliku excela ('xlsread' lub podobne) i zaczynasz od tego? – Nick

3
  1. wezwanie global Variable przed zdefiniować go w przestrzeni roboczej
  2. połączeń global Variable przed użyciem go w funkcji

Jednak proponuję pomyśleć o innych sposobach przekazywania zmiennych do funkcji, jak globalnych może powodować problemy podczas debugowania.

+4

Aby uzyskać więcej informacji, zobacz http://www.mathworks.co.uk/he lp/matlab/matlab_prog/share-data-between-workspaces.html – am304

5

Jak @rody zasugerował, przekaż matryca i X wewnątrz funkcji

jestem tylko dawać przykład Żeby było jasne.

Jak chcesz mieć dostęp do 10-element zmiennej matrycy, dlatego funkcję jako

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

Jeśli chcesz uzyskać dostęp do 3rd elementem Variable, więc wpiszesz

y = getvariable (Zmienna, 3)

otrzymasz trzeci element

Powiązane problemy