【问题标题】:Passing matrices from function to function in MATLAB在 MATLAB 中将矩阵从函数传递到函数
【发布时间】:2011-02-06 16:42:12
【问题描述】:

我对 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(3) 调用函数test,我希望它报告ans = 5,但它仍然报告ans = 3

谢谢!

【问题讨论】:

  • 我应该提一下:每个函数都在自己的.m文件中

标签: matlab


【解决方案1】:

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 的工作区中,一个在test1 的工作区中,一个在test2 的工作区。仅仅因为它们被命名相同并不意味着它们都具有相同的值。

例如,当您从test 调用test1 时,存储在test 中的变量A 中的值将复制到test1 中的变量A。当test1 修改其本地的A 副本时,testA 的值不变。要更新testA 的值,必须将test1 的返回值复制到其中。

【讨论】:

  • 谢谢,我之前就知道了。这是一个更完整的答案,值得检查。再次感谢!
【解决方案2】:

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

【讨论】:

  • 我明白这是我需要做的。但是我该怎么做呢?在 C 语言中,我只会return A;。但是在 MATLAB 中呢?
  • 将要返回的值赋给函数名,例如test1 = A*2;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2015-06-12
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多