我想将“a”作为全局变量传递给函数“tsfn”,比如说
function [ out ] = tsfn( )
global a;
out=a+1;
end
当我运行以下内容时,我得到了预期的结果:
>> global a;
a=1
out=[];
for i=1:4
out =[out tsfn()];
end
out
a =
1
out =
2 2 2 2
但是,如果我用parfor运行它而不是我最终得到一个空白向量。这让我相信“a”没有被传递到函数中。我想知道是否有办法将变量作为全局变量传递给所有工人。
由于
答案 0 :(得分:1)
在我的平台上正常运行。尝试重新启动计算机或Matlab。通常,“parfor”循环完成与“for”循环相同的任务 - 每个循环是并行计算的。在一个或多个函数和/或基础工作区中声明“全局”允许它们中的每一个访问全局变量的内容,因此您的使用是正确的。
这是我的代码:
function[ out ] = tsfn()
global a;
out = a + 1;
end
EDU>> global a;
EDU>> a = 1;
EDU>> out = [];
EDU>> parfor i = 1 : 4
out = [ out tsfn() ];
end
EDU>> a
a =
1
EDU>> out
out =
2 2 2 2
除此之外,测试函数内变量内容的一种简单方法是删除分号,分号将其打印到编辑器中。