MATLAB:为所有工人复制全局变量

时间:2013-08-13 23:07:08

标签: matlab parallel-processing

我想将“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”没有被传递到函数中。我想知道是否有办法将变量作为全局变量传递给所有工人。

由于

1 个答案:

答案 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

除此之外,测试函数内变量内容的一种简单方法是删除分号,分号将其打印到编辑器中。