2013-02-10 17 views
10

To był bardzo trudny w użyciu Google, dokumentacji MATLAB, spędziłem kilka godzin, a ja nie mogę nauczyć sięMatlab: link do zmiennej, a nie zmiennej

x = 1 
y = x 
x = 10 
y 

ans = 10 

co się dzieje, a nie jest:

x = 1 
y = x 
x = 10 
y 

ans = 1 

Wartość x jest zapisywana jako y. Ale chcę dynamicznie aktualizować wartość y do równego x.

Jakiej operacji używam w tym celu?

Dzięki.M

+1

Chcesz spojrzeć na wskaźniki w programie MATLAB . Moje szybkie wyszukiwanie niczego nie zmieniło, ale to może ci pomóc w Googlach. – Dan

+1

Chciałbym myśleć, że podchodzisz do problemu w niewłaściwy sposób, jeśli potrzebujesz czegoś, co zachowuje się jak wskaźnik ... Odpowiednie [komentarz] (http://www.edaboard.com/thread46260.html#post210526) , cytuję: "* dlaczego? dlaczego potrzebujesz wskaźników w programie Matlab? Kod MATLAB to skrypt, który zostanie skompilowany do pseudokodu w przypadku funkcji. Nie sądzę, że warto o tym pomyśleć Zrobiłem to w C++. Myślę, że powinieneś zobaczyć argument przekazujący jako odniesienie jeśli chcesz zmniejszyć liczbę argumentów, umieść je w jednym wektorze lub w strukturze. * " – plesiv

+0

Nie potrzebujesz tylko wskaźnika/odniesienie zachowanie podczas przekazywania argumentów do funkcji. Możesz go po prostu unikać powtarzania x (2) .y (4) .z (7) .w (i) w kodzie. I często nie chcesz po prostu odczytu-dostępu do zmiennej/pola.W tym przypadku używane są tylko jednoliterowe nazwy zmiennych/pól, ale w dobrym kodzie nazwy zmiennych/pól mają charakter opisowy, a więc dłuższy. – user36800

Odpowiedz

5

możesz wypróbować coś z następujących;

x=10; 
y='x' 
y 

y = 
    x 

eval(y) 
x = 
    10 
+0

Tak, to się bardzo zbliża. –

1

W programie MATLAB nie jest to możliwe. Istnieje jednak wiele sposobów na uzyskanie podobnego zachowania. Na przykład możesz mieć tablicę a = [1, 5, 3, 1], a następnie indeksować ją przez x i y. W przypadku x = 2 można przypisać a(x) = 7, y = x i po zmianie a(x) = 4, a(y) == 4.

Indeksowanie może być najszybszym sposobem na emulację odniesień, ale jeśli chcesz jakiegoś eleganckiego rozwiązania, możesz przejść przez zmienne symboliczne, jak wskazuje @natan. Ważne jest, aby w programie MATLAB było żadnych wskaźników.

13

Matlab jest w 99% środowiskiem typu "przekaż wartość", co właśnie zademonstrowałeś. Ten 1%, który jest przekazywany przez referencję, jest obsługiwany, albo grafika obsługi (nie dotyczy tutaj), albo obsługuje klasy, które są bardzo zbliżone do tego, co chcesz.

Aby użyć klasy uchwytu, aby wykonać to, co opisujesz, umieść poniższe w wywołaniu pliku RefValue.

classdef RefValue < handle 
    properties 
     data = []; 
    end 
end 

Spowoduje to utworzenie klasy "uchwyt" z pojedynczą właściwością o nazwie "dane".

Teraz można spróbować:

x = RefValue; 
x.data = 1; 
y = x; 
x.data = 10; 
disp(y.data) %Displays 10. 
1

Można również zdefiniować niejawny uchwyt x definiując funkcję y i odnoszące się do niego:

x = 1; 
y = @(x) x; 
y(x) % displays 1 
x = 10; 
y(x) % displays 10 
Powiązane problemy