// TestComplexSeries.java series approximations vs ComplexFunctions public class TestComplexSeries { public TestComplexSeries() { double err, sumerrsin=0.0, numerr=0.0, maxx=0.0; double sumerrhsin=0.0, sumerrhcos=0.0, sumerrhatan=0.0; double sumerrasin=0.0, sumerracos=0.0; double maxerrasin=0.0, maxerracos=0.0; Complex a; System.out.println("TestComplexSeries running"); for(double x=1.0e-3; x<=0.6; x=x*2.0) { for(double y=1.0e-3; y<=0.6; y=y*2.0) { a = new Complex(x,y); err=(a.sin().subtract(sinser(a))).abs(); sumerrsin = sumerrsin+err; err=(a.sin().subtract(sinhor(a))).abs(); sumerrhsin = sumerrhsin+err; err=(a.cos().subtract(coshor(a))).abs(); sumerrhcos = sumerrhcos+err; err=(a.atan().subtract(atanhor(a))).abs(); sumerrhatan = sumerrhatan+err; err=(a.asin().subtract(asinser(a))).abs(); sumerrasin = sumerrasin+err; maxerrasin = Math.max(maxerrasin, err); err=(a.acos().subtract(acosser(a))).abs(); sumerracos = sumerracos+err; maxerracos = Math.max(maxerracos, err); numerr = numerr+1.0; } maxx = Math.max(maxx, x); } System.out.println("sin vs series count="+numerr+", avg err="+sumerrsin/numerr); System.out.println("sin vs horner count="+numerr+", avg err="+sumerrhsin/numerr); System.out.println("cos vs horner count="+numerr+", avg err="+sumerrhcos/numerr); System.out.println("atan vs horner count="+numerr+", avg err="+sumerrhatan/numerr); System.out.println("asin vs series count="+numerr+", avg err="+sumerrasin/numerr); System.out.println("asin vs series count="+numerr+", max err="+maxerrasin); System.out.println("acos vs series count="+numerr+", avg err="+sumerracos/numerr); System.out.println("acos vs series count="+numerr+", max err="+maxerracos); System.out.println("max x and y ="+maxx); } static Complex sinser(Complex z) { Complex z2 = z.multiply(z); Complex z3 = z.multiply(z2).divide(-6.0); Complex z5 = z3.multiply(z2).divide(120.0); Complex z7 = z5.multiply(z2).divide(-5040.0); Complex z9 = z7.multiply(z2).divide(362880.0); return z.add(z3.add(z5.add(z7.add(z9)))); } static Complex sinhor(Complex z) { double d[] = {362880.0, -5040.0, 120.0, -6.0, 1.0}; Complex z2 = z.multiply(z); Complex result = new Complex(0.0); for(int i=0; i