code: function Matrix(opt_rows, opt_cols, opt_setInitial) {
    this.rows = opt_rows || 0;
    this.cols = opt_cols || this.rows;
    this.length = this.rows * this.cols;
    this._cache = null;
  
    var setInitial = opt_setInitial === undefined ? true : opt_setInitial;
  
    if (setInitial) {
      if (this.rows === this.cols) {
        this.setIdentityData();
      } else {
        this.setEmptyData();
      }
    }
  }
docs: @classdesc A class for representing and working with a mathematical matrix.
  
  @property {number} rows Number of rows.
  @property {number} cols Number of cols.
  @property {number} length Number of values.
  
  @constructor
  
  @param {number=} opt_rows The number of rows for the matrix. Default is 0.
  @param {number=} opt_cols The number of columns for the matrix. Default is same
  amount of columns as rows.
  @param {boolean=} opt_setInitial Whether to set the initial data when created.
  The initial data will be set to the identity matrix if it specifies the same
  amount of rows as columns. Default is true.
  
  @example
  // Create a 3x3 matrix with data
  var matrix = new Matrix(3, 3);
  matrix.setData(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
  );
  
  // Create a matrix filled with zeros
  // The matrix will be 3 rows and 2 columns
  var matrix = new Matrix(3, 2);
  
  // Create an identity matrix
  // The matrix will be 3 rows and 3 columns
  var matrix = new Matrix(3);
  
  // Create a matrix with no data set
  // The matrix will be 3 rows and 3 columns
  var matrix = new Matrix(3, 3, false);