matlab 报错无法从 logical 转换为 OptimizationExpression。

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的问题。