Передача матриц от функции к функции в MATLAB - PullRequest
3 голосов
/ 06 февраля 2011

Я довольно новичок в MATLAB и у меня простой вопрос.Что если у меня есть следующие структурированные функции:

function[A] = test(A)
test1(A);
test2(A);
end

function test1(A)
#% do something with A
end

function test2(A)
#% do something else with the newly modified A
end

Как передать A от функции к функции, сохраняя ее измененный характер?(Предположим, что матрица A)

РЕДАКТИРОВАТЬ: давайте немного упростим ситуацию.Предположим, что моя основная функция:

function[a]=test(a)
test1(a);
#%test2(a);
end

, а test1() определяется как:

function[a] = test1(a)
a=5;
end

Затем я вызываю функцию test с помощью test(3) и хочусообщить ans = 5, но он все еще сообщает ans = 3.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 06 февраля 2011

Переменные в MATLAB передаются с использованием «вызова по значению» ( с некоторыми исключениями ), поэтому любое значение, которое вы передаете в функцию и модифицируете, должно быть возвращено из функции и помещено в новыйПеременная или старая переменная перезаписана.Возврат значения переменной из функции прост: вы просто помещаете имя переменной в список выходных аргументов для функции.

Для вашего примера вы должны сделать это:

function A = test(A)
  A = test1(A);  %# Overwrite A with value returned from test1
  A = test2(A);  %# Overwrite A with value returned from test2
end

function A = test1(A)  %# Pass in A and return a modified A
  #% Modify A
end

function A = test2(A)  %# Pass in A and return a modified A
  #% Modify A
end

Следует помнить одну вещь: переменная область действия .Каждая функция имеет свое собственное рабочее пространство для хранения своих локальных переменных, поэтому в приведенном выше примере фактически есть 3 уникальные A переменные: одна в рабочей области test, одна в рабочей области test1 и одна врабочее пространство test2.То, что они названы одинаково, не означает, что все они имеют одинаковое значение.

Например, когда вы вызываете test1 из test, значение сохраняется в переменной A в test копируется в переменную A в test1.Когда test1 изменяет свою локальную копию A, значение A в test не изменяется.Чтобы обновить значение A в test, в него должно быть скопировано возвращаемое значение из test1.

3 голосов
/ 06 февраля 2011

Вернуть объект из функции и затем передать его следующей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...