Matlab调用MOSEK求解LP时提示‘prob.a not specified’的解决方法
解决MOSEK调用时的Error(1200): prob.a not specified问题
这个错误的原因很直接:MOSEK的Matlab接口要求prob结构体必须包含a字段,哪怕你的线性规划问题只有变量上下界约束,没有额外的线性等式/不等式约束,也得显式声明这个字段为空矩阵,否则MOSEK会判定问题描述不完整。
你的问题是最大化A'b,约束仅为-1 ≤ b ≤ 1——这类变量上下界约束是通过prob.blx和prob.ulx处理的,但MOSEK依然需要你明确告诉它“没有其他线性约束”,也就是把prob.a设为空矩阵。
修改后的完整代码
clear rng default L=5; A= 1.0e-03 *[0;0;0.8217;0;0]'; prob.blx = -ones(L,1); % 变量b的下界 prob.ulx = ones(L,1); % 变量b的上界 prob.c = A; % 目标函数系数(最大化c'x,这里x就是b) prob.a = sparse([]); % 显式声明没有额外线性约束(0行L列的稀疏矩阵,效率更高) param_MOSEK.MSK_IPAR_LOG = 0; [~,res] = mosekopt('maximize echo(0)',prob, param_MOSEK); % 可选:查看求解结果 disp('最优解b:'); disp(res.sol.itr.xx); disp('最优目标值:'); disp(res.sol.itr.pobj);
补充说明
prob.a对应LP问题中线性约束的系数矩阵(形如Ax ≤ b或Ax = b的约束),当没有这类约束时,用sparse([])创建一个空的稀疏矩阵是MOSEK推荐的方式(比普通空矩阵更节省内存)。- 如果你不想用稀疏矩阵,也可以写成
prob.a = [];,效果是一样的,只是稀疏矩阵在大规模问题上更高效。
内容的提问来源于stack exchange,提问作者Star
相关产品推荐
相关产品推荐

