2016-08-08 24 views
2

Ich habe in der Basisworkspace Variable einVerdoppelt der Arbeitsbereich einer Funktion eine variable Eingabe?

a = ones(10);

definiert Und ich würde Funktion erstellen möchten, die einen Vektor Eingänge vec1 und vec2 gibt zurück:

function vec2 = myfun(vec1) 

Operations with vec1 

end 

Lets

b = myfun(a); 
machen

Im Arbeitsbereich von myfun Wir werden eine Variable namens vec1 haben, die dieselben Werte wie a hat, aber nicht im Basisarbeitsbereich.

Wenn im Debugging-Modus und mehr

dbup; 

ich mit zwei verschiedenen Variablen a und vec1 in der Basis und myfun Workspaces jeweils sehen.

Ist myfun Duplizieren der Variable a in zwei verschiedenen Workspaces (und damit mehr Speicher verwendet wird)?

Ist dies nicht der Fall ist, wie funktioniert es? Ist es ein Zeiger, der der gleichen Information zwei verschiedene Namen zuweist?

Vielen Dank im Voraus.

Antwort

3

MATLAB verwendet ein System allgemein als „copy-on-write“ genannt innerhalb der Funktion Arbeitsbereich Erstellen einer Kopie des Eingangs Argument zu vermeiden, bis oder wenn Sie das Eingabeargument ändern. Wenn Sie das Eingabeargument nicht ändern, vermeidet MATLAB das Erstellen einer Kopie. Zum Beispiel in diesem Code:

function y = functionOfLargeMatrix(x) 
    y = x(1); 

MATLAB wird keine Kopie des Eingangs im Arbeitsbereich von functionOfLargeMatrix machen, wie x wird in dieser Funktion nicht geändert werden. Wenn auf der anderen Seite, können Sie diese Funktion aufgerufen:

function y = functionOfLargeMatrix2(x) 
     x(2) = 2; 
     y = x(1); 

dann x wird im Arbeitsbereich von functionOfLargeMatrix2 geändert, und so muss eine Kopie gemacht werden.

+0

@Ander Biguri, Danke für die Bearbeitung. – Fartab

+1

Keine Sorge. Dies ist eine großartige, einfache und genaue Antwort. Gut gemacht –