在MATLAB中将矩阵从函数传递到函数

Ami*_*mit 3 matlab

我是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
Run Code Online (Sandbox Code Playgroud)

如何将A从函数传递到函数以保持其修改的性质?(假设A是矩阵)

编辑:让我们的情况变得更简单一些.假设我的主要功能是:

function[a]=test(a)
test1(a);
#%test2(a);
end
Run Code Online (Sandbox Code Playgroud)

test1()定义为:

function[a] = test1(a)
a=5;
end
Run Code Online (Sandbox Code Playgroud)

然后,我调用该函数testtest(3),我想提出报告ans = 5,但它仍然报告ans = 3.

谢谢!

gno*_*ice 6

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
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是变量范围.每个函数都有自己的工作空间来存储自己的局部变量,因此A在上面的例子中实际上有3个唯一变量:一个在工作区中test,一个在工作区中test1,一个在工作区中test2.仅仅因为它们被命名相同并不意味着它们都具有相同的价值.

例如,当您调用test1from时test,存储在变量Ain中的值将test被复制到变量Atest1.当test1修改本地副本A,价值Atest不变.要更新Ain test的值,test1必须将返回值复制到它.