Matrix.range constructor

Matrix.range(
  1. int end, {
  2. int start = 0,
  3. int step = 1,
  4. bool isColumn = false,
})

Creates a Matrix with values in the specified range, incremented or decremented by the specified step size.

end: End value (exclusive). start: Start value. Default is 0. step: Step size. Default is 1. Can be negative for decrementing ranges. isColumn: If true, creates a column matrix. Default is false (creates a row matrix).

Example:

var m = Matrix.range(6,  start: 1, step: 2, isColumn: true);
print(m);
// Output:
// Matrix: 3x1
// ┌ 1 ┐
// | 3 |
// └ 5 ┘

Implementation

factory Matrix.range(int end,
    {int start = 0, int step = 1, bool isColumn = false}) {
  if (step == 0) {
    throw ArgumentError('Step must not be zero');
  }

  if (step > 0 && start >= end) {
    throw ArgumentError(
        'Start must be less than end for positive step sizes');
  }

  if (step < 0 && start <= end) {
    throw ArgumentError(
        'Start must be greater than end for negative step sizes');
  }

  List<dynamic> range = [];
  for (int i = start; step > 0 ? i < end : i > end; i += step) {
    range.add(i);
  }

  if (isColumn) {
    return Matrix(range.map((x) => [x]).toList());
  } else {
    return Matrix([range]);
  }
}