-1

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

谢谢

4

1 回答 1

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

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

于 2013-08-14T00:02:03.860 回答