// Test Chebyshev (eval)
System.out.println("Testing Chebyshev (eval)");
bjn bjn = new bjn();
Chebyshev cheb = new Chebyshev(bjn,aa,bb,NN);
m=cheb.setm(thresh);
for (i=0;i<MM;i++) {
x=-5.0+i;
y[i]=cheb.eval(x,m);
yy[i]=bjn.funk(x);
}
System.out.printf("Chebyshev (eval): Maximum discrepancy = %f\n", maxel(vecsub(y,yy)));
localflag = maxel(vecsub(y,yy)) > sbeps;
globalflag = globalflag || localflag;
if (localflag) {
fail("*** Chebyshev (eval): Chebyshev approximation does not evaluate to accurate function values");
}
// Test Chebyshev (polycofs)
System.out.println("Testing Chebyshev (polycofs)");
double[] d=cheb.polycofs(m);
for (i=0;i<MM;i++) {
x=-5.0+(double)(i);
y[i]=cheb.eval(x,m);
xx=(x-0.5*(aa+bb))/(0.5*(bb-aa));
val=d[m-1];
for (j=m-2;j>=0;j--) val=val*xx+d[j];
yy[i]=val;
// System.out.printf(y[i] << " %f\n", yy[i] << endl;
}
System.out.printf("Chebyshev (polycofs): Maximum discrepancy = %f\n", maxel(vecsub(y,yy)));
localflag = maxel(vecsub(y,yy)) > sbeps;
globalflag = globalflag || localflag;
if (localflag) {
fail("*** Chebyshev (polycofs): Polynomial coefficients do not yield correct function values");
}
// Test Chebyshev (derivative)
System.out.println("Testing Chebyshev (derivative)");
Chebyshev cder=cheb.derivative();
for (i=0;i<MM;i++) {
x=-5.0+i;
y[i]=cder.eval(x,m);
yy[i]=0.5*(b.jn(N-1,x)-b.jn(N+1,x));
// System.out.printf(y[i] << " %f\n", yy[i] << endl;
}
System.out.printf("Chebyshev (derivative): Maximum discrepancy = %f\n", maxel(vecsub(y,yy)));
localflag = maxel(vecsub(y,yy)) > sbeps;
globalflag = globalflag || localflag;
if (localflag) {
fail("*** Chebyshev (derivative): Chebyshev derivative has incorrect values");
}
// Test Chebyshev (integral)
System.out.println("Testing Chebyshev (integral)");
bj1 bj1 = new bj1();
Chebyshev cheb1 = new Chebyshev(bj1,aa,bb,NN);
Chebyshev cint=cheb1.integral();
for (i=0;i<MM;i++) {
x=-5.0+i;
y[i]=cint.eval(x,m);
yy[i]=b.j0(aa)-b.j0(x);
// System.out.printf(y[i] << " %f\n", yy[i] << endl;
}
System.out.printf("Chebyshev (integral): Maximum discrepancy = %f\n", maxel(vecsub(y,yy)));
sbeps=2.0e-6;
localflag = maxel(vecsub(y,yy)) > sbeps;
globalflag = globalflag || localflag;
if (localflag) {
fail("*** Chebyshev (integral): Chebyshev integral has incorrect values");
}
// Test Chebyshev (construct from polynomial)
System.out.println("Testing Chebyshev (construct from polynomial)");
Chebyshev chebnew = new Chebyshev(d);
double[] z = new double[m],zz = new double[m];
for (i=0;i<m;i++) {
z[i]=cheb.getc()[i];
zz[i]=chebnew.getc()[i];
// System.out.printf(z[i] << " %f\n", zz[i] << endl;
}
System.out.printf("Chebyshev (construct from polynomial): Maximum discrepancy = %f\n", maxel(vecsub(z,zz)));
sbeps=1.e-15;
localflag = maxel(vecsub(z,zz)) > sbeps;