@Test public void testOuterProduct() { final ArrayFieldVector<Fraction> u = new ArrayFieldVector<Fraction>( FractionField.getInstance(), new Fraction[] {new Fraction(1), new Fraction(2), new Fraction(-3)}); final ArrayFieldVector<Fraction> v = new ArrayFieldVector<Fraction>( FractionField.getInstance(), new Fraction[] {new Fraction(4), new Fraction(-2)}); final FieldMatrix<Fraction> uv = u.outerProduct(v); final double tol = Math.ulp(1d); Assert.assertEquals(new Fraction(4).doubleValue(), uv.getEntry(0, 0).doubleValue(), tol); Assert.assertEquals(new Fraction(-2).doubleValue(), uv.getEntry(0, 1).doubleValue(), tol); Assert.assertEquals(new Fraction(8).doubleValue(), uv.getEntry(1, 0).doubleValue(), tol); Assert.assertEquals(new Fraction(-4).doubleValue(), uv.getEntry(1, 1).doubleValue(), tol); Assert.assertEquals(new Fraction(-12).doubleValue(), uv.getEntry(2, 0).doubleValue(), tol); Assert.assertEquals(new Fraction(6).doubleValue(), uv.getEntry(2, 1).doubleValue(), tol); }
@Test public void testBasicFunctions() { ArrayFieldVector<Fraction> v1 = new ArrayFieldVector<Fraction>(vec1); ArrayFieldVector<Fraction> v2 = new ArrayFieldVector<Fraction>(vec2); new ArrayFieldVector<Fraction>(vec_null); FieldVectorTestImpl<Fraction> v2_t = new FieldVectorTestImpl<Fraction>(vec2); // octave = v1 + v2 ArrayFieldVector<Fraction> v_add = v1.add(v2); Fraction[] result_add = {new Fraction(5), new Fraction(7), new Fraction(9)}; checkArray("compare vect", v_add.getData(), result_add); FieldVectorTestImpl<Fraction> vt2 = new FieldVectorTestImpl<Fraction>(vec2); FieldVector<Fraction> v_add_i = v1.add(vt2); Fraction[] result_add_i = {new Fraction(5), new Fraction(7), new Fraction(9)}; checkArray("compare vect", v_add_i.getData(), result_add_i); // octave = v1 - v2 ArrayFieldVector<Fraction> v_subtract = v1.subtract(v2); Fraction[] result_subtract = {new Fraction(-3), new Fraction(-3), new Fraction(-3)}; checkArray("compare vect", v_subtract.getData(), result_subtract); FieldVector<Fraction> v_subtract_i = v1.subtract(vt2); Fraction[] result_subtract_i = {new Fraction(-3), new Fraction(-3), new Fraction(-3)}; checkArray("compare vect", v_subtract_i.getData(), result_subtract_i); // octave v1 .* v2 ArrayFieldVector<Fraction> v_ebeMultiply = v1.ebeMultiply(v2); Fraction[] result_ebeMultiply = {new Fraction(4), new Fraction(10), new Fraction(18)}; checkArray("compare vect", v_ebeMultiply.getData(), result_ebeMultiply); FieldVector<Fraction> v_ebeMultiply_2 = v1.ebeMultiply(v2_t); Fraction[] result_ebeMultiply_2 = {new Fraction(4), new Fraction(10), new Fraction(18)}; checkArray("compare vect", v_ebeMultiply_2.getData(), result_ebeMultiply_2); // octave v1 ./ v2 ArrayFieldVector<Fraction> v_ebeDivide = v1.ebeDivide(v2); Fraction[] result_ebeDivide = {new Fraction(1, 4), new Fraction(2, 5), new Fraction(1, 2)}; checkArray("compare vect", v_ebeDivide.getData(), result_ebeDivide); FieldVector<Fraction> v_ebeDivide_2 = v1.ebeDivide(v2_t); Fraction[] result_ebeDivide_2 = {new Fraction(1, 4), new Fraction(2, 5), new Fraction(1, 2)}; checkArray("compare vect", v_ebeDivide_2.getData(), result_ebeDivide_2); // octave dot(v1,v2) Fraction dot = v1.dotProduct(v2); Assert.assertEquals("compare val ", new Fraction(32), dot); // octave dot(v1,v2_t) Fraction dot_2 = v1.dotProduct(v2_t); Assert.assertEquals("compare val ", new Fraction(32), dot_2); FieldMatrix<Fraction> m_outerProduct = v1.outerProduct(v2); Assert.assertEquals("compare val ", new Fraction(4), m_outerProduct.getEntry(0, 0)); FieldMatrix<Fraction> m_outerProduct_2 = v1.outerProduct(v2_t); Assert.assertEquals("compare val ", new Fraction(4), m_outerProduct_2.getEntry(0, 0)); ArrayFieldVector<Fraction> v_projection = v1.projection(v2); Fraction[] result_projection = { new Fraction(128, 77), new Fraction(160, 77), new Fraction(192, 77) }; checkArray("compare vect", v_projection.getData(), result_projection); FieldVector<Fraction> v_projection_2 = v1.projection(v2_t); Fraction[] result_projection_2 = { new Fraction(128, 77), new Fraction(160, 77), new Fraction(192, 77) }; checkArray("compare vect", v_projection_2.getData(), result_projection_2); }