Main Content

optimexpr

Create empty optimization expression array

Description

Use optimexpr to initialize a set of optimization expressions.

expr = optimexpr(n) creates an empty n-by-1 OptimizationExpression array. Use expr as the initial value in a loop that creates optimization expressions.

example

expr = optimexpr(cstr) creates an empty OptimizationExpression array that can use the vector cstr for indexing. The number of elements of expr is the same as the length of cstr. When cstr is a row vector, then expr is a row vector. When cstr is a column vector, then expr is a column vector.

example

expr = optimexpr(cstr1,n2,...,cstrk) or expr = optimexpr([n1,n2,...,nk])or expr = optimexpr({cstr1,cstr2,...,cstrk}), for any combination of positive integers nj and names cstrj, creates an empty array of optimization expressions with dimensions equal to the integers nj or the lengths of the entries of cstrj.

example

Examples

collapse all

Create an empty array of three optimization expressions.

expr = optimexpr(3)
expr = 
  3×1 OptimizationExpression array with properties:

    IndexNames: {{}  {}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

Create a string array of color names, and an optimization expression that is indexed by the color names.

strexp = ["red","green","blue","yellow"];
expr = optimexpr(strexp)
expr = 
  1×4 OptimizationExpression array with properties:

    IndexNames: {{}  {1×4 cell}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

You can use a cell array of character vectors instead of strings to get the same effect.

strexp = {'red','green','blue','yellow'};
expr = optimexpr(strexp)
expr = 
  1×4 OptimizationExpression array with properties:

    IndexNames: {{}  {1×4 cell}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

If strexp is 4-by-1 instead of 1-by-4, then expr is also 4-by-1:

strexp = ["red";"green";"blue";"yellow"];
expr = optimexpr(strexp)
expr = 
  4×1 OptimizationExpression array with properties:

    IndexNames: {{1×4 cell}  {}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

Create an empty 3-by-4-by-2 array of optimization expressions.

expr = optimexpr(3,4,2)
expr = 
  3×4×2 OptimizationExpression array with properties:

    IndexNames: {{}  {}  {}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

Create a 3-by-4 array of optimization expressions, where the first dimension is indexed by the strings "brass", "stainless", and "galvanized", and the second dimension is numerically indexed.

bnames = ["brass","stainless","galvanized"];
expr = optimexpr(bnames,4)
expr = 
  3×4 OptimizationExpression array with properties:

    IndexNames: {{1×3 cell}  {}}
     Variables: [1×1 struct] containing 0 OptimizationVariables

  See expression formulation with show.

Create an expression using a named index indicating that each stainless expression is 1.5 times the corresponding x(galvanized) value.

x = optimvar('x',bnames,4);
expr('stainless',:) = x('galvanized',:)*1.5;
show(expr('stainless',:))
('stainless', 1)

  1.5*x('galvanized', 1)

('stainless', 2)

  1.5*x('galvanized', 2)

('stainless', 3)

  1.5*x('galvanized', 3)

('stainless', 4)

  1.5*x('galvanized', 4)

Input Arguments

collapse all

Variable dimension, specified as a positive integer.

Example: 4

Data Types: double

Index names, specified as a string array or as a cell array of character vectors.

Example: expr = optimexpr(["Warehouse","Truck","City"])

Example: expr = optimexpr({'Warehouse','Truck','City'})

Data Types: string | cell

Output Arguments

collapse all

Optimization expression, returned as an OptimizationExpression object.

Tips

  • You can use optimexpr to create empty expressions that you fill programmatically, such as in a for loop.

    x = optimvar('x',8);
    expr = optimexpr(4)
    for k = 1:4
        expr(k) = 5*k*(x(2*k) - x(2*k-1));
    end
  • It is generally more efficient to create expressions by vectorized statements rather than loops. See Create Efficient Optimization Problems.

Version History

Introduced in R2017b