{
for (k = 1; k <= l; k++)
{
- // double v = Math.abs(value[i - 1][k - 1]);
double v = Math.abs(getValue(i - 1, k - 1));
scale += v;
}
for (k = 1; k <= n; k++)
{
- // f = value[k - 1][i];
- // value[k - 1][i] = (s * value[k - 1][i - 1]) + (c * f);
- // value[k - 1][i - 1] = (c * value[k - 1][i - 1]) - (s * f);
f = getValue(k - 1, i);
setValue(k - 1, i, (s * getValue(k - 1, i - 1)) + (c * f));
setValue(k - 1, i - 1, (c * getValue(k - 1, i - 1)) - (s * f));
return value[i][j];
}
+ @Override
public void setValue(int i, int j, double val)
{
value[i][j] = val;
System.arraycopy(value[i], 0, row, 0, cols);
return row;
}
+
+ /**
+ * Returns a length 2 array of {minValue, maxValue} of all values in the
+ * matrix. Returns null if the matrix is null or empty.
+ *
+ * @return
+ */
+ double[] findMinMax()
+ {
+ if (value == null)
+ {
+ return null;
+ }
+ double min = Double.MAX_VALUE;
+ double max = -Double.MAX_VALUE;
+ boolean empty = true;
+ for (double[] row : value)
+ {
+ if (row != null)
+ {
+ for (double x : row)
+ {
+ empty = false;
+ if (x > max)
+ {
+ max = x;
+ }
+ if (x < min)
+ {
+ min = x;
+ }
+ }
+ }
+ }
+ return empty ? null : new double[] { min, max };
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void reverseRange(boolean maxToZero)
+ {
+ if (value == null)
+ {
+ return;
+ }
+ double[] minMax = findMinMax();
+ if (minMax == null)
+ {
+ return; // empty matrix
+ }
+ double subtractFrom = maxToZero ? minMax[1] : minMax[0] + minMax[1];
+
+ for (double[] row : value)
+ {
+ if (row != null)
+ {
+ int j = 0;
+ for (double x : row)
+ {
+ row[j] = subtractFrom - x;
+ j++;
+ }
+ }
+ }
+ }
+
+ /**
+ * Multiply every entry in the matrix by the given value. This method is not
+ * thread-safe.
+ */
+ @Override
+ public void multiply(double d)
+ {
+ for (double[] row : value)
+ {
+ if (row != null)
+ {
+ for (int i = 0; i < row.length; i++)
+ {
+ row[i] *= d;
+ }
+ }
+ }
+ }
}