/** Constructs a function that returns <tt>a - b</tt>. <tt>a</tt> is a variable, <tt>b</tt> is fixed. */ public static DoubleFunction minus(double b) { return plus(-b); }
@Override public Vector plus(double x) { Vector result = createOptimizedCopy(); if (x == 0.0) { return result; } return result.assign(Functions.plus(x)); }
@Test public void testAssignBinaryFunction2() { test.assign(Functions.plus(4)); for (int i = 0; i < values.length; i++) { if (i % 2 == 0) { assertEquals("get [" + i + ']', 4.0, test.get(i), EPSILON); } else { assertEquals("value[" + i + ']', values[i - 1] + 4, test.getQuick(i), EPSILON); } } }
private static void decompositionSpeedCheck(Decomposer qrf, OnlineSummarizer s1, Matrix a, String label) { int n = 0; List<Integer> counts = Lists.newArrayList(10, 20, 50, 100, 200, 500); for (int k : counts) { double warmup = 0; double other = 0; n += k; for (int i = 0; i < k; i++) { QR qr = qrf.decompose(a); warmup = Math.max(warmup, qr.getQ().transpose().times(qr.getQ()).viewDiagonal().assign(Functions.plus(-1)).norm(1)); Matrix z = qr.getQ().times(qr.getR()).minus(a); other = Math.max(other, z.aggregate(Functions.MIN, Functions.ABS)); } double maxIdent = 0; double maxError = 0; long t0 = System.nanoTime(); for (int i = 0; i < n; i++) { QR qr = qrf.decompose(a); maxIdent = Math.max(maxIdent, qr.getQ().transpose().times(qr.getQ()).viewDiagonal().assign(Functions.plus(-1)).norm(1)); Matrix z = qr.getQ().times(qr.getR()).minus(a); maxError = Math.max(maxError, z.aggregate(Functions.MIN, Functions.ABS)); } long t1 = System.nanoTime(); if (k > 100) { s1.add(t1 - t0); } System.out.printf("%s %d\t%.1f\t%g\t%g\t%g\n", label, n, (t1 - t0) / 1.0e3 / n, maxIdent, maxError, warmup); } }
@Test public void randomMatrix() { Matrix a = new DenseMatrix(60, 60).assign(Functions.random()); QRDecomposition qr = new QRDecomposition(a); // how close is Q to actually being orthornormal? double maxIdent = qr.getQ().transpose().times(qr.getQ()).viewDiagonal().assign(Functions.plus(-1)).norm(1); assertEquals(0, maxIdent, 1.0e-13); // how close is Q R to the original value of A? Matrix z = qr.getQ().times(qr.getR()).minus(a); double maxError = z.aggregate(Functions.MIN, Functions.ABS); assertEquals(0, maxError, 1.0e-13); }
/** Constructs a function that returns <tt>a - b</tt>. <tt>a</tt> is a variable, <tt>b</tt> is fixed. */ public static DoubleFunction minus(double b) { return plus(-b); }
/** Constructs a function that returns <tt>a - b</tt>. <tt>a</tt> is a variable, <tt>b</tt> is fixed. */ public static DoubleFunction minus(double b) { return plus(-b); }
@Override public Vector plus(double x) { Vector result = createOptimizedCopy(); if (x == 0.0) { return result; } return result.assign(Functions.plus(x)); }
@Test public void testAssignBinaryFunction2() { test.assign(Functions.plus(4)); for (int i = 0; i < values.length; i++) { if (i % 2 == 0) { assertEquals("get [" + i + ']', 4.0, test.get(i), EPSILON); } else { assertEquals("value[" + i + ']', values[i - 1] + 4, test.getQuick(i), EPSILON); } } }