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)。他用函数句柄调用,这样我就不能给函数输入其他参数了。我就崩溃了,所以就用了全局变量,并行的时候我再次崩溃了。 展开
??? 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)。他用函数句柄调用,这样我就不能给函数输入其他参数了。我就崩溃了,所以就用了全局变量,并行的时候我再次崩溃了。 展开
3个回答
展开全部
你可以看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也一样
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帮助文档
展开全部
dimension表示 维数,能用全局变量,a(0)无效 表示没有保存好数据,耐心点,再看看?……
追问
有一个前提是,我把代码从for 直接改成parfor。for 语句,使用serial 计算就没问题。
我现在倒是找到解决方法了,直接保存成文件,然后再子函数里读文件,就不用全局变量了,倒是可以,运行效率下降的比较多。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
7。04就有这个包
追问
我用的2011a,貌似是7.12要么是7.14 ……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询