使用MATLAB fmincon内点法求解凸优化时报错如何解决?
报错原因
fmincon的interior-point(内点法)算法迭代过程中,optimValues结构体不包含searchdirection字段,你的输出函数outfun中强制读取该字段,就会触发底层barrier函数的运行错误。而sqp、active-set等算法的optimValues内置了搜索方向字段,所以可以正常运行。
解决方法
- 方法1:给搜索方向记录逻辑加字段存在性判断,修改
outfun中对应代码即可适配所有算法:
% 替换原有的搜索方向记录代码 if isfield(optimValues, 'searchdirection') searchdir = [searchdir; optimValues.searchdirection']; end
- 方法2:如果你需要完整记录搜索方向,直接使用你测试正常的sqp、active-set算法即可,只需修改
optimoptions中Algorithm参数的取值。 - 额外优化建议:删除函数开头的
clear;clc;语句,函数工作区和全局工作区天然隔离,此处的clear会无意义清空当前函数内已定义的变量,容易引发隐藏问题。
内容的提问来源于stack exchange,提问作者马时杰
相关产品推荐
相关产品推荐

