public class Complex { public double x,y; public Complex() { x = 0.0; y = 0.0; } public Complex(double x) { this.x = x; this.y = 0.0; } public Complex(double x, double y) { this.x = x; this.y = y; } public String toString() { return x+"+"+y+"i"; } // find the inner product when the numbers are treated as vectors public double innerProduct (Complex w) { return x*w.x + y*w.y; } public static double innerProduct (Complex z, Complex w) { return z.x*w.x + z.y*w.y; } public double normSquared() { return x*x + y*y; } public double norm() { return Math.sqrt(x*x + y*y); } public Complex conjugate() { return new Complex (x, -y); } public Complex negation () { return new Complex (- x, y); } public Complex minus (Complex w) { return new Complex (x - w.x, y - w.y); } public Complex minus (double t) { return new Complex (x - t, y); } public static Complex subtract (Complex z, Complex w) { return new Complex (z.x - w.x, z.y - w.y); } public static Complex subtract (double t, Complex w) { return new Complex (t - w.x, -w.y); } public static Complex subtract (Complex z, double t) { return new Complex (z.x - t, z.y); } public Complex plus (Complex w) { return new Complex (x + w.x, y + w.y); } public Complex plus (double t) { return new Complex (x + t, y); } public static Complex add (Complex z, Complex w) { return new Complex (z.x + w.x, z.y + w.y); } public static Complex add (double t, Complex w) { return new Complex (t + w.x, w.y); } public static Complex add (Complex z, double t) { return new Complex (z.x + t, z.y); } public Complex times (Complex w) { return new Complex (x*w.x - y*w.y, y*w.x + x*w.y); } public Complex times (double t) { return new Complex (t*x, t*y); } public static Complex multiply (Complex z, Complex w) { return new Complex (z.x*w.x - z.y*w.y, z.y*w.x + z.x*w.y); } public static Complex multiply (double t, Complex w) { return new Complex (t*w.x, t*w.y); } public static Complex multiply (Complex z, double t) { return new Complex (t*z.x, t*z.y); } public Complex reciprocal() { double den = normSquared(); return new Complex (x/den, -y/den); } public Complex over (Complex w) { double den = w.normSquared(); return new Complex ((x*w.x + y*w.y)/den, (y*w.x - x*w.y)/den); } public Complex over (double t) { return new Complex (x/t, y/t); } public static Complex divide (Complex z, Complex w) { double den = w.normSquared(); return new Complex ((z.x*w.x + z.y*w.y)/den, (z.y*w.x - z.x*w.y)/den); } public static Complex divide (double t, Complex w) { double den = w.normSquared(); return new Complex (t*w.x/den, -t*w.y/den); } public static Complex divide (Complex z, double t) { return new Complex (z.x/t, z.y/t); } } // Complex