/** * Returns the complex conjugate of this complex number. * @return the complex conjugate. */ public Cdouble conj() { return new Cdouble(r,-i); }
/** * Returns the negative of x. * @param x a complex number. * @return the negative. */ public static Cdouble neg(Cdouble x) { return new Cdouble(-x.r,-x.i); }
public static Cdouble csum(double[] cx) { int n1 = cx.length/2; double sr = 0.0; double si = 0.0; for (int i1=0,ir=0,ii=1; i1<n1; ++i1,ir+=2,ii+=2) { sr += cx[ir]; si += cx[ii]; } return new Cdouble(sr,si); } public static Cdouble csum(double[][] cx) {
void apply(double[] cx, double[] cy) { Cdouble ct = new Cdouble(); int n1 = cx.length/2; for (int ir=0,ii=1,nn=2*n1; ir<nn; ir+=2,ii+=2) { ct.r = cx[ir]; ct.i = cx[ii]; Cdouble ce = Cdouble.log10(ct); cy[ir] = ce.r; cy[ii] = ce.i; } } };
void apply(double[] cx, double[] ry) { Cdouble ct = new Cdouble(); int n1 = cx.length/2; for (int i1=0,ir=0,ii=1; i1<n1; ++i1,ir+=2,ii+=2) { ct.r = cx[ir]; ct.i = cx[ii]; ry[i1] = Cdouble.abs(ct); } } };
/** * Returns the quotent z / x, where z is this complex number. * @param x a real number. * @return z / x. */ public Cdouble over(double x) { return new Cdouble(this).overEquals(x); }
/** * Returns the difference z - x, where z is this complex number. * @param x a real number. * @return z - x. */ public Cdouble minus(double x) { return new Cdouble(this).minusEquals(x); }
/** * Returns the inverse of x. * @param x a complex number. * @return the complex inverse. */ public static Cdouble inv(Cdouble x) { double d = x.norm(); return new Cdouble(x.r/d,-x.i/d); }
void apply(double[] cx, double[] cy) { Cdouble ct = new Cdouble(); int n1 = cx.length/2; for (int ir=0,ii=1,nn=2*n1; ir<nn; ir+=2,ii+=2) { ct.r = cx[ir]; ct.i = cx[ii]; Cdouble ce = Cdouble.log(ct); cy[ir] = ce.r; cy[ii] = ce.i; } } };
void apply(double[] cx, double[] ry) { Cdouble ct = new Cdouble(); int n1 = cx.length/2; for (int i1=0,ir=0,ii=1; i1<n1; ++i1,ir+=2,ii+=2) { ct.r = cx[ir]; ct.i = cx[ii]; ry[i1] = Cdouble.arg(ct); } } };
/** * Returns the sum z + x, where z is this complex number. * @param x a real number. * @return z + x. */ public Cdouble plus(double x) { return new Cdouble(this).plusEquals(x); }
/** * Returns the product z * x, where z is this complex number. * @param x a real number. * @return z * x. */ public Cdouble times(double x) { return new Cdouble(this).timesEquals(x); }
/** * Returns the complex number (r*cos(a),r*sin(a)). * @param r the polar radius. * @param a the polar angle. * @return the complex number. */ public static Cdouble polar(double r, double a) { return new Cdouble(r*cos(a),r*sin(a)); }
public static Cdouble csum(double[][] cx) { int n2 = cx.length; Cdouble s = new Cdouble(); for (int i2=0; i2<n2; ++i2) s.plusEquals(csum(cx[i2])); return s; } public static Cdouble csum(double[][][] cx) {
private Cdouble roundToReal(Cdouble c) { Cdouble cr = new Cdouble(c.r,0.0); Point pr = complexToPoint(cr); Point p = complexToPoint(c); return (abs(p.y-pr.y)<6)?cr:c; }
/** * Returns x to the y'th power. * @param x a complex number. * @param y a complex number. * @return x to the y'th power. */ public static Cdouble pow(Cdouble x, Cdouble y) { if (x.r==0.0 && x.i==0.0) return new Cdouble(); return exp(y.times(log(x))); }
/** * Returns the natural logarithm of a complex number. * @param x a complex number. * @return the natural logarithm. */ public static Cdouble log(Cdouble x) { return new Cdouble(log(abs(x)),arg(x)); }
/** * Returns the hyperbolic cosine of a complex number. * @param x a complex number. * @return the hyperbolic cosine. */ public static Cdouble cosh(Cdouble x) { return new Cdouble(cosh(x.r)*cos(x.i),sinh(x.r)*sin(x.i)); }
/** * Returns the cosine of a complex number. * @param x a complex number. * @return the cosine. */ public static Cdouble cos(Cdouble x) { return new Cdouble(cos(x.r)*cosh(x.i),-sin(x.r)*sinh(x.i)); }
/** * Returns the sine of a complex number. * @param x a complex number. * @return the sine. */ public static Cdouble sin(Cdouble x) { return new Cdouble(sin(x.r)*cosh(x.i),cos(x.r)*sinh(x.i)); }