@Override public Vector viewPart(int offset, int length) { return delegate.viewPart(offset, length); }
@Override public Vector viewPart(int offset, int length) { return delegate.viewPart(offset, length); }
@Test(expected = IndexException.class) public void testViewPartUnder() { test.viewPart(-1, CARDINALITY); }
@Test(expected = IndexException.class) public void testViewPartOver() { test.viewPart(2, CARDINALITY); }
@Test(expected = IndexException.class) public void testViewPartCardinality() { test.viewPart(1, 8); }
@Test(expected = IndexException.class) public void testViewPartCardinality() { test.viewPart(1, values.length + 1); }
@Test(expected = IndexException.class) public void testViewPartOver() { test.viewPart(2, 7); }
@Test(expected = IndexException.class) public void testViewPartUnder() { test.viewPart(-1, values.length); }
private void decompose(Matrix a) { int n = a.rowSize(); L.assign(a); // column-wise submatrix cholesky with simple pivoting for (int k = 0; k < n; k++) { double akk = L.get(k, k); // set upper part of column to 0. L.viewColumn(k).viewPart(0, k).assign(0); double epsilon = 1.0e-10 * L.viewColumn(k).aggregate(Functions.MAX, Functions.ABS); if (akk <= epsilon) { // degenerate column case. Set diagonal to 1, all others to zero L.viewColumn(k).viewPart(k, n - k).assign(0); isPositiveDefinite = false; // no need to subtract from remaining sub-matrix } else { // normalize column by diagonal element akk = Math.sqrt(Math.max(0, akk)); L.set(k, k, akk); L.viewColumn(k).viewPart(k + 1, n - k - 1).assign(Functions.div(akk)); // now subtract scaled version of column for (int j = k + 1; j < n; j++) { Vector columnJ = L.viewColumn(j).viewPart(j, n - j); Vector columnK = L.viewColumn(k).viewPart(j, n - j); columnJ.assign(columnK, Functions.minusMult(L.get(j, k))); } } } }
@Override public Matrix assignColumn(int column, Vector other) { if (columnSize() != other.size()) { throw new IndexException(columnSize(), other.size()); } if (other.viewPart(column + 1, other.size() - column - 1).norm(1) > 1.0e-14) { throw new IllegalArgumentException("Cannot set lower portion of triangular matrix to non-zero"); } for (Vector.Element element : other.viewPart(0, column).all()) { setQuick(element.index(), column, element.get()); } return this; }
@Override public Vector viewColumn(int column) { if (column < 0 || column >= columnSize()) { throw new IndexException(column, columnSize()); } return matrix.viewColumn(column + offset[COL]).viewPart(offset[ROW], rowSize()); }
Vector hColumn = hessenBerg.viewColumn(m - 1).viewPart(m, high - m + 1); double scale = hColumn.norm(1); ort.viewPart(m, high - m + 1).assign(hColumn, Functions.plusMult(1 / scale)); double h = ort.viewPart(m, high - m + 1).getLengthSquared(); Vector ortPiece = ort.viewPart(m, high - m + 1); for (int j = m; j < n; j++) { double f = ortPiece.dot(hessenBerg.viewColumn(j).viewPart(m, high - m + 1)) / h; hessenBerg.viewColumn(j).viewPart(m, high - m + 1).assign(ortPiece, Functions.plusMult(-f)); double f = ortPiece.dot(hessenBerg.viewRow(i).viewPart(m, high - m + 1)) / h; hessenBerg.viewRow(i).viewPart(m, high - m + 1).assign(ortPiece, Functions.plusMult(-f)); ort.viewPart(m + 1, high - m).assign(hessenBerg.viewColumn(m - 1).viewPart(m + 1, high - m)); for (int j = m; j <= high; j++) { double g = ort.viewPart(m, high - m + 1).dot(v.viewColumn(j).viewPart(m, high - m + 1)); v.viewColumn(j).viewPart(m, high - m + 1).assign(ort.viewPart(m, high - m + 1), Functions.plusMult(g));
@Override public Vector viewRow(int row) { if (row < 0 || row >= rowSize()) { throw new IndexException(row, rowSize()); } return matrix.viewRow(row + offset[ROW]).viewPart(offset[COL], columnSize()); }
/** * Generates and returns the (economy-sized) orthogonal factor <tt>Q</tt>. * * @return <tt>Q</tt> */ @Override public Matrix getQ() { int columns = Math.min(originalColumns, originalRows); Matrix q = qr.like(originalRows, columns); for (int k = columns - 1; k >= 0; k--) { Vector QRcolk = qr.viewColumn(k).viewPart(k, originalRows - k); q.set(k, k, 1); for (int j = k; j < columns; j++) { if (qr.get(k, k) != 0) { Vector Qcolj = q.viewColumn(j).viewPart(k, originalRows - k); double s = -QRcolk.dot(Qcolj) / qr.get(k, k); Qcolj.assign(QRcolk, Functions.plusMult(s)); } } } return q; }
@Test public void testViewPart() throws Exception { Vector part = test.viewPart(1, 2); assertEquals("part size", 2, part.getNumNondefaultElements()); for (int i = 0; i < part.size(); i++) { assertEquals("part[" + i + ']', values[OFFSET + i + 1], part.get(i), EPSILON); } }
@Test public void testViewPart() { Vector part = test.viewPart(1, 2); assertEquals("part size", 2, part.getNumNondefaultElements()); for (int i = 0; i < part.size(); i++) { assertEquals("part[" + i + ']', test.get(i+1), part.get(i), EPSILON); } }