同一脚本中运行particleswarm粒子群优化函数报错,如何修复?
修复粒子群优化脚本的报错问题
你的报错根源在于Matlab脚本中函数定义的位置和解析顺序问题,以及脚本与函数的组织规则,下面给你两种可行的修复方案:
方案一:将函数独立为单独文件
把fun函数单独保存成一个名为fun.m的文件,文件内容如下:
function val = fun(x) val=x(1)*exp(x(2)); end
然后你的原脚本文件(比如命名为pso_script.m)内容保持原样即可:
rng default % For reproducibility nvars = 2; x = particleswarm(fun,nvars)
这种方法适用于所有Matlab版本,完全没有兼容性问题。
方案二:在同一脚本中调整代码顺序
如果你想把函数和脚本逻辑放在同一个文件里,需要将函数定义放在脚本所有执行代码的最后部分,并且调用particleswarm时明确使用函数句柄@fun,调整后的代码如下:
rng default % For reproducibility nvars = 2; x = particleswarm(@fun,nvars) % 使用@fun传递函数句柄,明确指向自定义函数 % 函数定义必须放在脚本执行代码的末尾 function val = fun(x) val=x(1)*exp(x(2)); end
注意:这种写法要求你的Matlab版本是R2016b及以后,因为从这个版本开始才支持在脚本文件中定义局部函数。
原代码报错的原因
Matlab脚本是从上到下逐行执行的,当运行到x = particleswarm(fun,nvars)时,后面的fun函数还没被解析定义,所以会触发“未定义函数或变量 'fun'”的报错;另外,旧版本Matlab不允许在脚本中嵌套函数,这也会引发兼容性报错。
内容的提问来源于stack exchange,提问作者JuanMuñoz
相关产品推荐
相关产品推荐

