/** * {@inheritDoc} * @throws IllegalArgumentException If $x > b$ or $x < a$ */ @Override public double transform(double x) { ArgChecker.isTrue(x <= _upper && x >= _lower, "parameter out of range"); if (x == _upper) { return TANH_MAX; } else if (x == _lower) { return -TANH_MAX; } return TrigonometricFunctionUtils.atanh((x - _mid) / _scale); }
/** * If $y > 25$, this returns $b$. If $y < -25$ returns $a$. * {@inheritDoc} */ @Override public double inverseTransform(double y) { if (y > TANH_MAX) { return _upper; } else if (y < -TANH_MAX) { return _lower; } return _mid + _scale * TrigonometricFunctionUtils.tanh(y); }
@Test public void test() { assertEquals(TrigonometricFunctionUtils.acos(TrigonometricFunctionUtils.cos(X)), X, EPS); assertEquals(TrigonometricFunctionUtils.asin(TrigonometricFunctionUtils.sin(X)), X, EPS); assertEquals(TrigonometricFunctionUtils.atan(TrigonometricFunctionUtils.tan(X)), X, EPS); assertComplexEquals(TrigonometricFunctionUtils.cos(Y), Math.cos(X)); assertComplexEquals(TrigonometricFunctionUtils.sin(Y), Math.sin(X)); assertComplexEquals(TrigonometricFunctionUtils.tan(Y), Math.tan(X)); assertComplexEquals(TrigonometricFunctionUtils.acos(Y), Math.acos(X)); assertComplexEquals(TrigonometricFunctionUtils.asin(Y), Math.asin(X)); assertComplexEquals(TrigonometricFunctionUtils.atan(Y), Math.atan(X)); assertComplexEquals(TrigonometricFunctionUtils.acos(TrigonometricFunctionUtils.cos(Z)), Z); assertComplexEquals(TrigonometricFunctionUtils.asin(TrigonometricFunctionUtils.sin(Z)), Z); assertComplexEquals(TrigonometricFunctionUtils.atan(TrigonometricFunctionUtils.tan(Z)), Z); assertEquals(TrigonometricFunctionUtils.acosh(TrigonometricFunctionUtils.cosh(X)), X, EPS); assertEquals(TrigonometricFunctionUtils.asinh(TrigonometricFunctionUtils.sinh(X)), X, EPS); assertEquals(TrigonometricFunctionUtils.atanh(TrigonometricFunctionUtils.tanh(X)), X, EPS); assertComplexEquals(TrigonometricFunctionUtils.acosh(TrigonometricFunctionUtils.cosh(Z)), Z); assertComplexEquals(TrigonometricFunctionUtils.asinh(TrigonometricFunctionUtils.sinh(Z)), Z); assertComplexEquals(TrigonometricFunctionUtils.atanh(TrigonometricFunctionUtils.tanh(Z)), Z); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull4() { TrigonometricFunctionUtils.asinh(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull5() { TrigonometricFunctionUtils.atan(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull7() { TrigonometricFunctionUtils.cos(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull3() { TrigonometricFunctionUtils.asin(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull9() { TrigonometricFunctionUtils.sin(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull1() { TrigonometricFunctionUtils.acos(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull2() { TrigonometricFunctionUtils.acosh(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull8() { TrigonometricFunctionUtils.cosh(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull6() { TrigonometricFunctionUtils.atanh(null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNull12() { TrigonometricFunctionUtils.tanh(null); }
@Test public void testAtanh() { double x = 0.76; ComplexNumber z = new ComplexNumber(x); double real = 0.5 * Math.log((1 + x) / (1 - x)); ComplexNumber res = TrigonometricFunctionUtils.atanh(z); assertEquals(real, res.getReal(), 1e-15); assertEquals(0.0, res.getImaginary(), 0); }