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



我想把"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而不是for运行它,我最终会得到一个空向量。这让我相信"a"并没有被传递到函数中。我想知道是否有一种方法可以将变量作为全局变量传递给所有员工。

感谢

在我的平台上运行良好。试着重新启动你的计算机或Matlab。通常,"parfor"循环完成与"for"循环相同的任务——每个循环都是并行计算的。在一个或多个函数和/或基本工作区中声明"global"允许每个函数访问全局变量的内容,因此您的用法是正确的。

这是我的代码:

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

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

最新更新