struct Chebyshev { Int n,m; VecDoub c; Doub a,b; Chebyshev(Doub func(Doub), Doub aa, Doub bb, Int nn); Chebyshev(VecDoub &cc, Doub aa, Doub bb) : n(cc.size()), m(n), c(cc), a(aa), b(bb) {} Int setm(Doub thresh) {while (m>1 && abs(c[m-1]) 0.0) throw("x not in range in Chebyshev::eval"); y2=2.0*(y=(2.0*x-a-b)/(b-a)); for (j=m-1;j>0;j--) { sv=d; d=y2*d-dd+c[j]; dd=sv; } return y*d-dd+0.5*c[0]; } Chebyshev Chebyshev::derivative() { Int j; Doub con; VecDoub cder(n); cder[n-1]=0.0; cder[n-2]=2*(n-1)*c[n-1]; for (j=n-2;j>0;j--) cder[j-1]=cder[j+1]+2*j*c[j]; con=2.0/(b-a); for (j=0;j=0;j--) { c[j]=2.0*d[j]+c[j+2]; for (Int i=j+1;i0;j--) { for (k=m-j;k>0;k--) { sv=d[k]; d[k]=2.0*d[k-1]-dd[k]; dd[k]=sv; } sv=d[0]; d[0] = -dd[0]+c[j]; dd[0]=sv; } for (j=m-1;j>0;j--) d[j]=d[j-1]-dd[j]; d[0] = -dd[0]+0.5*c[0]; return d; }