You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:37:50