mtlab 报错无法从 logical 转换为 OptimizationExpression。
prob = optimproblem;
x = optimvar('x',1,2,'LowerBound',0);
prob.Objective = sum(x.^2)-4*x(1)+4;
con = [-x(1) + x(2) - 2 <= 0
x(1)^2-x(2) +1 <= 0];
错误使用 optim.problemdef.OptimizationExpression/horzcat
无法从 logical 转换为 OptimizationExpression。
根据给出的参考资料和错误信息,我们可以推断出问题出现在以下代码行:
con = [-x(1) + x(2) - 2 <= 0
x(1)^2-x(2) + 1 <= 0];
错误提示表明无法将逻辑值(logical)转换为OptimizationExpression,这可能是由于约束条件的格式不正确导致的。
根据MATLAB文档中对optimproblem和optimvar的说明,我们可以将约束条件重新定义为逻辑表达式的形式:
con = [
-x(1) + x(2) - 2 <= 0,
x(1)^2 - x(2) + 1 <= 0
];
将逻辑表达式定义为一个逗号分隔的向量,这样可以保持约束条件的逻辑形式,而不会直接将其转换为OptimizationExpression。
完整的修复代码如下:
prob = optimproblem;
x = optimvar('x',1,2,'LowerBound',0);
prob.Objective = sum(x.^2)-4*x(1)+4;
con = [
-x(1) + x(2) - 2 <= 0,
x(1)^2 - x(2) + 1 <= 0
];
prob.Constraints.cons1 = con(1);
prob.Constraints.cons2 = con(2);
这样,我们将约束条件重新定义为一个逻辑表达式的向量,并将其分别赋给prob.Constraints结构中的不同字段。这样,就解决了无法从logical转换为OptimizationExpression的问题。