matlab 并行计算中使用全局变量就会报错,总是一些很奇怪的错误,比如某一个变量取不到值之类。怎么回事?

如题,这东西怎么回事????Errorusing==>parallel_functionat598Errorin==>fcnvectorizer>(parforbody)... 如题,这东西怎么回事?
??? Error using ==> parallel_function at 598
Error in ==> fcnvectorizer>(parfor body) at 18
Subscripted assignment dimension mismatch.
总是诸如这样的错误,比如矩阵dimension不相同啊什么的。
比如 a(0)这种东西无效啊之类的。
是不是在使用并行计算的时候不能使用全局变量?
如果不使用全局变量,matlab里又没有变量指针,应该怎么调用外部的变量?

补充一下,我这个问题出在使用ga优化一个非线性系统的时候出现。
里面需要调用fitnessFunction,ga的方法是 ga(@fitnessFcn, # variables)。他用函数句柄调用,这样我就不能给函数输入其他参数了。我就崩溃了,所以就用了全局变量,并行的时候我再次崩溃了。
展开
 我来答
decoyu
推荐于2017-11-24
知道答主
回答量:8
采纳率:0%
帮助的人:8.6万
展开全部
你可以看matlab的帮助文档里面的Passing Extra Parameters这一节,讲了有三种方法给优化的目标函数传递独立变量,要用并行的话不能使用全局变量的方法,可以采用匿名函数的方法。
Write an M-file containing the following code:function y = parameterfun(x,a,b,c)
y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + ...
(-c + c*x(2)^2)*x(2)^2;
Assign values to the parameters and define a function
handle f to an anonymous function by entering the
following commands at the MATLAB prompt:
a = 4; b = 2.1; c = 4; % Assign parameter values
x0 = [0.5,0.5];
f = @(x)parameterfun(x,a,b,c)
Call the solver fminunc withthe anonymous function:[x,fval] = fminunc(f,x0)
f就是已经传递了独立变量的目标函数的函数句柄
上面的例子是用 fminunc求解的,用ga也一样

参考资料: matlab帮助文档

百度网友56b56c1
2011-05-14 · 超过18用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:51.7万
展开全部
dimension表示 维数,能用全局变量,a(0)无效 表示没有保存好数据,耐心点,再看看?……
追问
有一个前提是,我把代码从for 直接改成parfor。for 语句,使用serial 计算就没问题。
我现在倒是找到解决方法了,直接保存成文件,然后再子函数里读文件,就不用全局变量了,倒是可以,运行效率下降的比较多。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户99893
2011-05-11 · TA获得超过251个赞
知道小有建树答主
回答量:742
采纳率:0%
帮助的人:537万
展开全部
7。04就有这个包
追问
我用的2011a,貌似是7.12要么是7.14 ……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式