Working with Array Equations in Version 10
STELLA/iThink version 10 introduces several new array features, including simplified and more powerful Apply-To-All equations that are designed to reduce the need to specify equations for every individual element.
Dimension names are optional
When an equation is written using other array names, the dimension names are not normally needed. For example, given arrays A, B, and C, each with the dimensions Dim1 and Dim2, A can be set to the sum of B and C with this equation:
B + C
Dimension names are still needed when the dimensions do not match. For example, to also add in the first 2-dimensional slice of the 3-dimensional array D[Dim1, Dim2, Dim3], the equation becomes:
B + C + D[Dim1, Dim2, 1]
The wildcard * is optional
When an array builtin is used, the * is normally not needed. For example, to find the sum of the elements of a 2-dimensional array A[Dim1, Dim2] requires this equation:
SUM(A)
If, however, the sum of only the first column of A is desired, the * is still needed:
SUM(A[*, 1])
Simplified array builtins
There are five array builtins: SIZE, SUM, MEAN, STDDEV, and RANK. In addition, the MIN and MAX functions have been extended to take either one or two array arguments. All but RANK can also be applied to queues and conveyors.
SUM, MEAN, and STDDEV all work in a similar way (see examples of SUM above).
Using the MAX function, it is possible to find the maximum value in array A,
MAX(A)
the maximum value in array A, or zero if everything is negative,
MAX(A, 0)
or the maximum across two arrays A and B,
MAX(A, B)
MIN works the same way, but finds the minimum.
The SIZE function requires an array parameter, but within an array, the special name SELF can be used to refer to the array whose equation is being set. In addition, wildcards can be used to determine the size of any array slice. In the equation for array A[Dim1, Dim2],
SIZE(SELF)
gives the total number of elements in array A while
SIZE(SELF[*, 1])
gives the size of the first dimension of A, i.e., the number of elements – or rows – in the first column. Likewise,
SIZE(SELF[1, *])
gives the size of the second dimension of A, i.e., the number of elements – or columns – in the first row.