MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中将矩阵从函数传递到函数 (https://www.labfans.com/bbs/showthread.php?t=26291)

poster 2019-12-14 20: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(3)调用函数test ,我希望它报告ans = 5 ,但仍然报告ans = 3 。

谢谢!



[B]回答:[/B]

MATLAB中的变量是使用“按值调用”传递的( [URL="http://www.mathworks.com/support/solutions/en/data/1-15SO4/?solution=1-15SO4"]有些例外[/URL] ),因此,传递给函数并进行修改的任何值都必须从函数中返回,并放置在新变量中或覆盖旧变量。从函数返回变量的值很简单:只需将变量名放在函数的[URL="http://www.mathworks.com/help/techdoc/matlab_prog/bresuxt-1.html#br67dei-1"]输出参数列表[/URL]中。

对于您的示例,您将执行以下操作:

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 要注意的一件事是[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f0-38052.html#f0-38068"]可变范围[/URL] 。每个函数都有其自己的工作空间来存储自己的局部变量,因此在上面的示例中实际上有3个唯一的A变量:一个在test的工作空间中,一个在test1的工作空间中,一个在test2的工作空间中。仅仅因为它们被命名相同并不意味着它们都具有相同的价值。

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



[url=https://stackoverflow.com/questions/4914641]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 04:56

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.