Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在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 。

谢谢!



回答:

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不变。要更新test的A值,必须将test1的返回值复制到该值。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:16


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