n = 10; % 广告数 m = 6; % 广告位数 s = rand(n,m)*10; % 打分值 k = floor(rand(1,m)*3)+1; % 每个广告位需要选取的广告数 % 构造约束矩阵和目标函数系数矩阵 Aeq = zeros(m,n*m); beq = k'; f = -reshape(s',[1 n*m]); for i = 1:n idx = (i-1)*m+1:i*m; Aeq(:,idx) = ones(m,1)*[zeros(1,(i-1)*m) 1 zeros(1,n*m-i*m)]; end % 设置不等式约束 lb = zeros(n*m,1); ub = ones(n*m,1); % 调用线性规划函数求解 [x,fval] = linprog(f,[],[],Aeq,beq,lb,ub); % 显示结果 x_mat = reshape(x,[m,n])'; disp(x_mat) disp(['Total score: ',num2str(-fval)]) Subscripted assignment dimension mismatch.
时间: 2024-03-13 15:44:47 浏览: 141
N!的位数
这个错误提示出现的原因是在进行矩阵转置时,维度不一致导致无法进行赋值操作。具体来说,出现这个错误的原因是在显示结果时,使用了一个大小为 (n\*m,m) 的矩阵进行矩阵转置,转置后得到的矩阵大小为 (m,n\*m),然后尝试将其赋值给一个大小为 (n,m) 的矩阵,导致维度不一致,无法进行赋值操作。
要解决这个问题,你需要将矩阵转置的位置进行调整,使其转置后的大小为 (n,m)。修改后的代码如下:
```matlab
n = 10; % 广告数
m = 6; % 广告位数
s = rand(n,m)*10; % 打分值
k = floor(rand(1,m)*3)+1; % 每个广告位需要选取的广告数
% 构造约束矩阵和目标函数系数矩阵
Aeq = zeros(m,n*m);
beq = k';
f = -reshape(s',[1 n*m]);
for i = 1:n
idx = (i-1)*m+1:i*m;
Aeq(:,idx) = ones(m,1)*[zeros(1,(i-1)*m) 1 zeros(1,n*m-i*m)];
end
% 设置不等式约束
lb = zeros(n*m,1);
ub = ones(n*m,1);
% 调用线性规划函数求解
[x,fval] = linprog(f,[],[],Aeq,beq,lb,ub);
% 显示结果
x_mat = reshape(x,[m,n]);
x_mat = x_mat'; % 转置
disp(x_mat)
disp(['Total score: ',num2str(-fval)])
```
这样就可以避免这个错误了。
阅读全文