## APMonitor Summation with Vectors

## Main.Arrays History

Show minor edits - Show changes to markup

- summation

z = m.Var() m.Equation(z==sum([sum([x[i][j] for i in range(ni)]) for j in range(nj)]))

print('z') print(z.value)

#### Arrays in Python GEKKO

Multi-dimensional arrays are defined in Python GEKKO with the m.Array() function or with list comprehensions.

(:source lang=python:) from gekko import GEKKO

m = GEKKO()

ni = 3 # number of rows nj = 2 # number of columns

- best method: use m.Array function

x = m.Array(m.Var,(ni,nj)) m.Equations([x[i][j]==i*j+1 for i in range(ni) for j in range(nj)])

- another way: list comprehensions

y = [[m.Var() for j in range(nj)] for i in range(ni)] for i in range(ni):

for j in range(nj): m.Equation(x[i][j]**2==y[i][j])

m.solve()

print('x:') print(x) print('y=x**2:') print(y) (:sourceend:)

An additional example is a matrix summation where there are two indices of the parameter matrix *p*.

### Example

### Examples

! Summation with arrays

! Method #1: Summation with arrays

! Summation without arrays Model array

! Method #2: Summation with the sum object Objects z = sum(5) End Objects Connections p[1:n] = z.x[1:n] y = z.y End Connections Model Constants n = 5 End Constants

p[1] = 1 p[2] = 1 p[3] = 1 p[4] = 1 p[5] = 1

p[1:n] = 1

y

Intermediates z[1] = p[1] z[2] = z[1] + p[2] z[3] = z[2] + p[3] z[4] = z[3] + p[4] z[5] = z[4] + p[5] End Intermediates

sum = z[5]

sum = y

(:cellnr:)

! Method #3: Summation without arrays Model array Parameters p[1] = 1 p[2] = 1 p[3] = 1 p[4] = 1 p[5] = 1 End Parameters Variables sum End Variables Intermediates z[1] = p[1] z[2] = z[1] + p[2] z[3] = z[2] + p[3] z[4] = z[3] + p[4] z[5] = z[4] + p[5] End Intermediates Equations sum = z[5] End Equations End Model

(:tableend:)

(:table border=1 width=100% align=left bgcolor=#EEEEEE cellspacing=0:)

Arrays with more than one dimension are allowed. The array indices are separated by commas as in *var[i,j,k...]* or *var[i][j][k]*. For operations on matrices, the precedence of operations is determined by the number of colons separating the vector indices. Matrix elements with fewer colon separators are executed first. For example, a set of 24 intermediate variables posed as:

Arrays with more than one dimension are allowed. The array indices are separated by brackets as *var[i][j][k]*. For operations on matrices, the precedence of operations is determined by the number of colons separating the vector indices. Matrix elements with fewer colon separators are executed first. For example, a set of 24 intermediate variables posed as:

(:summation, array, vector, sum, matrix, algebraic, modeling language:) (:description Summation of vectors and matrices in APMonitor:)

(:keywords summation, array, vector, sum, matrix, algebraic, modeling language:) (:description Summation of vectors and matrices in APMonitor :)

(:title APMonitor Summation with Vectors:) (:summation, array, vector, sum, matrix, algebraic, modeling language:) (:description Summation of vectors and matrices in APMonitor:)

## Arrays

(:table border=1 width=50% align=left bgcolor=#EEEEEE cellspacing=0:)

(:table border=1 width=100% align=left bgcolor=#EEEEEE cellspacing=0:)

Arrays with more than one dimension are allowed. The array indices are separated by commas as in *var[i,j,k...]*.

Arrays with more than one dimension are allowed. The array indices are separated by commas as in *var[i,j,k...]* or *var[i][j][k]*. For operations on matrices, the precedence of operations is determined by the number of colons separating the vector indices. Matrix elements with fewer colon separators are executed first. For example, a set of 24 intermediate variables posed as:

- x[1:2][1::3][1:::4] = 1

results in the following set of equations:

- x[1][1][1] = 1
- x[2][1][1] = 1
- x[1][2][1] = 1
- x[2][2][1] = 1
- x[1][3][1] = 1
- x[2][3][1] = 1
- x[1][1][2] = 1
- etc...

End Equations End Model

(:cellnr:)

! Matrix Summation Model Parameters p[1:10][1::5] = 1 End Parameters Variables x End Variables Intermediates ! sum the rows n[0][1:5] = 0 n[1:10][1::5] = n[0:9][1::5] + p[1:10][1::5] ! sum the columns that are summation of rows m[0] = 0 m[1:5] = m[0:4] + n[10][1:5] End Intermediates Equations ! solution = 50 x = m[5]

Constants n = 5 End Constants

p[1:5] = 1

p[1:n] = 1

z[2:5] = z[1:4] + p[2:5]

z[2:n] = z[1:n-1] + p[2:n]

sum = z[5]

sum = z[n]

### Higher dimensional arrays

Arrays with more than one dimension are allowed. The array indices are separated by commas as in *var[i,j,k...]*.

Variable or object arrays are defined by square brackets with a range of integers and separated by a colon. Arrays may be used to define multiple equations or operations on one line. Any line with an array is processed sequentially from the lowest to the highest index.

Variable or object arrays are defined by square brackets with a range of integers and separated by a colon as *variable[index 1:index 2]*. Arrays may be used to define multiple equations or connections on one line. Any line with an array is processed sequentially from the lowest to the highest index. The model parser creates and processes the arrays as if they were written sequential in non-array form as shown in the example.

### Array Index Consistency

When processing the arrays, the parser checks for array size consistency. An error with an appropriate message is returned if the vector indeces are of different dimension.

(:table border=1 width=50% align=left bgcolor=#EEEEEE cellspacing=0:) (:cellnr:)

! Summation with arrays Model array Parameters p[1:5] = 1 End Parameters Variables sum End Variables Intermediates z[1] = p[1] z[2:5] = z[1:4] + p[2:5] End Intermediates Equations sum = z[5] End Equations End Model

(:cellnr:)

! Summation without arrays Model array Parameters p[1] = 1 p[2] = 1 p[3] = 1 p[4] = 1 p[5] = 1 End Parameters Variables sum End Variables Intermediates z[1] = p[1] z[2] = z[1] + p[2] z[3] = z[2] + p[3] z[4] = z[3] + p[4] z[5] = z[4] + p[5] End Intermediates Equations sum = z[5] End Equations End Model

(:tableend:)

## Arrays

Variable or object arrays are defined by square brackets with a range of integers and separated by a colon. Arrays may be used to define multiple equations or operations on one line. Any line with an array is processed sequentially from the lowest to the highest index.