Main Content

OptimizationEquality

等式和等式约束

自 R2019b 起

说明

OptimizationEquality 对象包含关于 OptimizationVariable 对象或 OptimizationExpression 对象的等式和等式约束。每个等式都使用比较运算符 ==

一条语句可以表示一个等式数组。例如,您可以在以下单条语句中表示矩阵变量 x 的每行总和等于 1 的等式:

constrsum = sum(x,2) == 1

OptimizationEquality 对象用作 OptimizationProblem 中的约束,或用作 EquationProblem 中的方程。

提示

有关完整的工作流,请参阅基于问题的优化工作流基于问题的方程求解工作流

创建对象

使用具有比较运算符 == 的优化表达式创建等式。

通过使用圆点表示法,在优化问题的 Constraints 属性或方程问题的 Equations 属性中包含等式。

prob = optimproblem;
x = optimvar('x',4,6);
SumToOne = sum(x,2) == 1;
prob.Constraints.SumToOne = SumToOne;
% Or for an equation problem:
eqprob = eqnproblem;
eqprob.Equations.SumToOne = SumToOne;

您也可以使用 optimeqoptimconstr 创建空的优化等式。通常,您可以继续使用循环方式设置等式。有关示例,请参阅使用循环方式创建等式。但是,为了最高效地进行问题表示,请避免使用循环方式设置等式。请参阅Create Efficient Optimization Problems

属性

全部展开

索引名称,指定为字符串元胞数组或字符向量。有关使用索引名称的信息,请参阅Named Index for Optimization Variables

数据类型: cell

此 属性 为只读。

对象中的优化变量,指定为 OptimizationVariable 对象的结构体。

数据类型: struct

对象函数

infeasibility一个点处的约束违反值
show显示有关优化对象的信息
write保存优化对象描述

示例

全部折叠

创建一个名为 x 的 4×6 优化变量矩阵。

x = optimvar('x',4,6);

创建 x 的每行总和为 1 的等式。

constrsum = sum(x,2) == 1
constrsum = 
  4x1 Linear OptimizationEquality array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 1 OptimizationVariable

  See equality formulation with show.

查看等式。

show(constrsum)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) + x(1, 6) == 1

(2, 1)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) + x(2, 6) == 1

(3, 1)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) + x(3, 6) == 1

(4, 1)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) + x(4, 6) == 1

要在优化问题中包含等式,请使用圆点表示法将 Constraints 属性设置为 constrsum

prob = optimproblem;
prob.Constraints.constrsum = constrsum
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [1x1 struct] containing 1 OptimizationVariable
         Objective: [0x0 OptimizationExpression]
       Constraints: [1x1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

同样,要在方程问题中包含等式,请使用圆点表示法将 Constraints 属性设置为 constrsum

eqnprob = eqnproblem;
eqnprob.Equations.constrsum = constrsum
eqnprob = 
  EquationProblem with properties:

    Description: ''
      Variables: [1x1 struct] containing 1 OptimizationVariable
      Equations: [1x1 struct] containing 1 OptimizationEquality

  See problem formulation with show.

创建一个空的 OptimizationEquality 对象。

eq1 = optimeq;

创建一个名为 x 的 5×5 优化变量数组。

x = optimvar('x',5,5);

创建 x 的第 i 行总和为 i2 的等式。

for i = 1:size(x,1)
    eq1(i) = sum(x(i,:)) == i^2;
end

查看生成的等式。

show(eq1)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) == 1

(1, 2)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) == 4

(1, 3)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) == 9

(1, 4)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) == 16

(1, 5)

  x(5, 1) + x(5, 2) + x(5, 3) + x(5, 4) + x(5, 5) == 25

要在优化问题中使用 eq1 作为约束,请使用圆点表示法将 eq1 设置为 Constraints 属性。

prob = optimproblem;
prob.Constraints.eq1 = eq1;

同样,要将 eq1 用作方程问题中的一组方程,请使用圆点表示法将 eq1 设置为 Equations 属性。

eqprob = eqnproblem;
eqprob.Equations.eq1 = eq1;

版本历史记录

在 R2019b 中推出