public static double max(Matrix u) {
   double max = -Double.MAX_VALUE;
   for (MatrixEntry matrixEntry : u) {
     max = Math.max(max, matrixEntry.getValue());
   }
   return max;
 }
 public static double min(Matrix u) {
   double min = Double.MAX_VALUE;
   for (MatrixEntry matrixEntry : u) {
     min = Math.min(min, matrixEntry.getValue());
   }
   return min;
 }
 public void scaleEquals(double scaleFactor) {
   // Iterators loop over all values, or all nonzero, values in "this".
   // The resulting matrix doesn't need to element-wise multiply the
   // zero values, since the result would be zero anyway.
   for (MatrixEntry e : this) {
     e.setValue(e.getValue() * scaleFactor);
   }
 }
  /**
   * Inline element-wise multiplication of the elements in <code>this</code> and <code>matrix</code>
   * , modifies the elements of <code>this</code>
   *
   * @param matrix Must have same dimensions <code>this</code>
   */
  public void dotTimesEquals(final AbstractMTJMatrix matrix) {
    // make sure the matrices are the same dimension
    this.assertSameDimensions(matrix);

    // Iterators loop over all values, or all nonzero, values in "this".
    // The resulting matrix doesn't need to element-wise multiply the
    // zero values, since the result would be zero anyway.
    for (MatrixEntry e : this) {
      double otherValue = matrix.getElement(e.getRowIndex(), e.getColumnIndex());

      e.setValue(e.getValue() * otherValue);
    }
  }