public static ComplexNumber one () { return new ComplexNumber(1, 0); } public static ComplexNumber imgOne () { return new ComplexNumber(0, 1); } public static ComplexNumber zero () { return mew ComplexNumber(0, 0); }
public static ComplexNumber pow(ComplexNumber z, double x) { double mod = mod(z); double arg = arg(z); double mult = Math.pow(mod, x); return new ComplexNumber(mult * Math.cos(x * arg), mult * Math.sin(x * arg)); }
public static ComplexNumber inverse(ComplexNumber z) { ArgChecker.notNull(z, "z"); double c = z.getReal(); double d = z.getImaginary(); if (Math.abs(c) > Math.abs(d)) { double dOverC = d / c; double denom = c + d * dOverC; return new ComplexNumber(1 / denom, -dOverC / denom); } double cOverD = c / d; double denom = c * cOverD + d; return new ComplexNumber(cOverD / denom, -1 / denom); }
public ComplexNumber add(ComplexNumber otherNumber){ ComplexNumber newComplex; float newA = a + otherNumber.getA(); float newB = b + otherNumber.getB(); newComplex = new ComplexNumber(newA, newB); return newComplex; }//end add
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())); }
/** * 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 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 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 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 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 subtract(double x, ComplexNumber z) { ArgChecker.notNull(z, "z"); return new ComplexNumber(x - z.getReal(), -z.getImaginary()); }
public static ComplexNumber sinh(ComplexNumber z) { ArgChecker.notNull(z, "z"); return new ComplexNumber( Math.sinh(z.getReal()) * Math.cos(z.getImaginary()), Math.cosh(z.getReal()) * Math.sin(z.getImaginary())); }
public static ComplexNumber cosh(ComplexNumber z) { ArgChecker.notNull(z, "z"); return new ComplexNumber( Math.cosh(z.getReal()) * Math.cos(z.getImaginary()), Math.sinh(z.getReal()) * Math.sin(z.getImaginary())); }
public static ComplexNumber add(ComplexNumber z1, ComplexNumber z2) { ArgChecker.notNull(z1, "z1"); ArgChecker.notNull(z2, "z2"); return new ComplexNumber(z1.getReal() + z2.getReal(), z1.getImaginary() + z2.getImaginary()); }
public static ComplexNumber subtract(ComplexNumber z1, ComplexNumber z2) { ArgChecker.notNull(z1, "z1"); ArgChecker.notNull(z2, "z2"); return new ComplexNumber(z1.getReal() - z2.getReal(), z1.getImaginary() - z2.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); }
@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); }
public static ComplexNumber atan(ComplexNumber z) { ArgChecker.notNull(z, "z"); ComplexNumber iZ = ComplexMathUtils.multiply(z, I); ComplexNumber half = new ComplexNumber(0, 0.5); return ComplexMathUtils.multiply( half, ComplexMathUtils.log(ComplexMathUtils.divide(ComplexMathUtils.subtract(1, iZ), ComplexMathUtils.add(1, iZ)))); }
@Test public void testPower() { assertComplexEquals(ComplexMathUtils.pow(Z1, 0), new ComplexNumber(1, 0)); assertComplexEquals(ComplexMathUtils.pow(X, new ComplexNumber(0, 0)), new ComplexNumber(1, 0)); assertComplexEquals(ComplexMathUtils.sqrt(ComplexMathUtils.pow(Z1, 2)), Z1); assertComplexEquals(ComplexMathUtils.sqrt(ComplexMathUtils.pow(Z2, 2)), Z2); assertComplexEquals(ComplexMathUtils.pow(ComplexMathUtils.pow(Z1, 1. / 3), 3), Z1); assertComplexEquals(ComplexMathUtils.pow(ComplexMathUtils.pow(X, ComplexMathUtils.inverse(Z2)), Z2), new ComplexNumber(X, 0)); assertComplexEquals(ComplexMathUtils.pow(ComplexMathUtils.pow(Z1, ComplexMathUtils.inverse(Z2)), Z2), Z1); }