public class Complex { public double re,im; /* Costruttori */ public Complex(){ re=0; im=0; } public Complex(double a,double b){ re=a; im=b; } /* Crea un numero complesso da modulo e fase */ public static Complex fromPolar(double r,double teta){ return new Complex(r*Math.cos(teta),r*Math.sin(teta)); } /* Restituiscono modulo e fase di un numero complesso */ public double abs(){ return Math.sqrt(re*re+im*im); } public double arg(){ return Math.atan2(im,re); } /* Complesso coniugato */ public Complex conjugate(){ return new Complex(re,-im); } /* Operazioni elementari */ public Complex add(Complex b){ return new Complex(re+b.re,im+b.im); } public Complex subtract(Complex b){ return new Complex(re-b.re,im-b.im); } public Complex multiply(Complex b){ return new Complex(re*b.re-im*b.im,im*b.re+re*b.im); } public Complex divide(Complex b){ Complex w=this.multiply(b.conjugate()); double t=b.re*b.re+b.im*b.im; return new Complex(w.re/t, w.im/t); } public Complex pow(int n){ return fromPolar(Math.pow(abs(),n),arg()*n); } /* Radici di un numero complesso */ public Complex[] root(Complex z,int n){ Complex[] roots=new Complex[n]; for(int k=0;k<n;k++) { roots[k]=fromPolar(Math.pow(z.abs(),1/(double)n),(z.arg()+2*k*Math.PI)/n); } return roots; } } |