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

时间:2011-02-06 16:42:13

标签: 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

如何将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 个答案:

答案 0 :(得分:6)

MATLAB中的变量使用“按值调用”(with some exceptions)传递,因此传递给函数和修改的任何值都必须从函数返回并放在新变量或旧变量中变量被覆盖。从函数返回变量的值很简单:只需将变量名放在函数的output argument list中。

对于您的示例,您可以这样做:

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

要注意的一件事是variable scope。每个函数都有自己的工作空间来存储自己的局部变量,所以在上面的例子中实际上有3个唯一的A变量:一个在test的工作空间中,一个在{{1}的工作空间中在test1的工作空间中有一个。仅仅因为它们被命名相同并不意味着它们都具有相同的价值。

例如,当您从test2致电test1时,test中变量A中存储的值将被复制到test中的变量A {1}}。当test1修改其test1的本地副本时,AA的值不会更改。要更新testA的值,必须将test的返回值复制到其中。

答案 1 :(得分:3)

从函数返回对象,然后将其传递给下一个函数。