/** * Returns the principal value of log, with z the principal argument of z defined to lie in the interval (-pi, pi]. * @param z ComplexNumber * @return The log */ public static ComplexNumber log(ComplexNumber z) { ArgChecker.notNull(z, "z"); return new ComplexNumber(Math.log(Math.hypot(z.getReal(), z.getImaginary())), Math.atan2(z.getImaginary(), z.getReal())); }
public static ComplexNumber pow(ComplexNumber z1, ComplexNumber z2) { ArgChecker.notNull(z1, "z1"); ArgChecker.notNull(z2, "z2"); double mod = mod(z1); double arg = arg(z1); double mult = Math.pow(mod, z2.getReal()) * Math.exp(-z2.getImaginary() * arg); double theta = z2.getReal() * arg + z2.getImaginary() * Math.log(mod); return new ComplexNumber(mult * Math.cos(theta), mult * Math.sin(theta)); }
public static ComplexNumber exp(ComplexNumber z) { ArgChecker.notNull(z, "z"); double mult = Math.exp(z.getReal()); return new ComplexNumber(mult * Math.cos(z.getImaginary()), mult * Math.sin(z.getImaginary())); }
public static ComplexNumber multiply(ComplexNumber z1, ComplexNumber z2) { ArgChecker.notNull(z1, "z1"); ArgChecker.notNull(z2, "z2"); double a = z1.getReal(); double b = z1.getImaginary(); double c = z2.getReal(); double d = z2.getImaginary(); return new ComplexNumber(a * c - b * d, a * d + b * c); }
public static ComplexNumber square(ComplexNumber z) { ArgChecker.notNull(z, "z"); double a = z.getReal(); double b = z.getImaginary(); return new ComplexNumber(a * a - b * b, 2 * a * b); }
public static ComplexNumber sin(ComplexNumber z) { ArgChecker.notNull(z, "z"); double x = z.getReal(); double y = z.getImaginary(); return new ComplexNumber(Math.sin(x) * Math.cosh(y), Math.cos(x) * Math.sinh(y)); }
public static ComplexNumber add(ComplexNumber... z) { ArgChecker.notNull(z, "z"); double res = 0.0; double img = 0.0; for (ComplexNumber aZ : z) { res += aZ.getReal(); img += aZ.getImaginary(); } return new ComplexNumber(res, img); }
public static ComplexNumber cos(ComplexNumber z) { ArgChecker.notNull(z, "z"); double x = z.getReal(); double y = z.getImaginary(); return new ComplexNumber(Math.cos(x) * Math.cosh(y), -Math.sin(x) * Math.sinh(y)); }
public static ComplexNumber conjugate(ComplexNumber z) { ArgChecker.notNull(z, "z"); return new ComplexNumber(z.getReal(), -z.getImaginary()); }
public static ComplexNumber multiply(ComplexNumber z, double x) { ArgChecker.notNull(z, "z"); return new ComplexNumber(z.getReal() * x, z.getImaginary() * x); }
public static ComplexNumber subtract(ComplexNumber z, double x) { ArgChecker.notNull(z, "z"); return new ComplexNumber(z.getReal() - x, z.getImaginary()); }
public static ComplexNumber add(ComplexNumber z, double x) { ArgChecker.notNull(z, "z"); return new ComplexNumber(z.getReal() + x, z.getImaginary()); }
@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); }
private void assertComplexEquals(final ComplexNumber z, final double x) { assertEquals(z.getImaginary(), 0, EPS); assertEquals(z.getReal(), x, EPS); } }