Подтвердить что ты не робот

Matlab: ссылка на переменную, а не переменную величину

Было очень сложно использовать документацию google, MATLAB, я потратил несколько часов, и я не могу научиться

x = 1
y = x
x = 10
y

ans = 10

что происходит вместо этого:

x = 1
y = x
x = 10
y

ans = 1

Значение x сохраняется в y. Но я хочу динамически обновлять значение y равным x.

Какую операцию я использую для этого?

Thanks.M

4b9b3361

Ответ 1

Matlab на 99% представляет собой среду с пересылкой, что вы только что продемонстрировали. 1%, который является передачей по ссылке, обрабатывает либо обрабатывает графику (не применимо здесь), либо обрабатывает классы, которые довольно близки к тому, что вы хотите.

Чтобы использовать класс дескриптора для выполнения того, что вы описали, поместите следующее в вызов файла RefValue.

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

Это создает класс "handle" с одним свойством "данные".

Теперь вы можете попробовать:

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

Ответ 2

вы можете попробовать что-то из следующего:

x=10;
y='x'
y

y = 
    x

eval(y)
x =
    10

Ответ 3

В MATLAB это невозможно. Однако есть много способов получить подобное поведение. Например, вы можете иметь массив a = [1, 5, 3, 1], а затем индексировать его x и y. Для x = 2 вы можете назначить a(x) = 7, y = x и после изменения a(x) = 4, a(y) == 4.

Таким образом, индексирование может быть самым быстрым способом эмулировать ссылки, но если вы хотите получить изящное решение, вы можете пройти через символические переменные, как указывает @natan. Важно то, что в MATLAB нет указателей.

Ответ 4

Вы также можете определить неявный дескриптор на x, указав функцию на y и ссылаясь на нее:

x = 1;
y = @(x) x;
y(x) % displays 1
x = 10;
y(x) % displays 10