int main(void) { int j,k,n; float resid; double b,d,fac,x,*c,*cc; c=dvector(0,NMAX); cc=dvector(0,NMAX); for (;;) { printf("Enter n for PADE routine:\n"); if (scanf("%d",&n) == EOF) break; fac=1; for (j=1;j<=2*n+1;j++) { c[j-1]=fac/((double) j); cc[j-1]=c[j-1]; fac = -fac; } pade(c,n,&resid); printf("Norm of residual vector= %16.8e\n",resid); printf("point, func. value, pade series, power series\n"); for (j=1;j<=21;j++) { x=(j-1)*0.25; for (b=0.0,k=2*n+1;k>=1;k--) { b *= x; b += cc[k-1]; } d=ratval(x,c,n,n); printf("%16.8f %16.8f %16.8f %16.8f\n",x,fn(x),d,b); } } free_dvector(cc,0,NMAX); free_dvector(c,0,NMAX); return 0; }
static int exp_pade(double R, double L, double G, double C, double l, TXLine *h) { double RdL, GdC; tau = sqrt(L*C); RdL = R / L; GdC = G / C; RG = R * G; RC = R * C; GL = G * L; { double a, b, t; double y1, y2, y3, y4, y5, y6; a = RdL; b = GdC; t = tau; /* y1 = 0.5 * (a + b); y2 = a * b - y1 * y1; y3 = - a * b * y1 - 2.0 * y1 * y2 + y1 * y1 * y1; y4 = 2.0 * a * b * y1 * y1 - a * b * y2 - 2.0 * y2 * y2 - 2.0 * y1 * y3 + 5.0 * y1 * y1 * y2 - 2.0 * y1 * y1 * y1 * y1; y5 = 6.0 * a * b * (y1 * y2 - y1 * y1 * y1) - a * b * y3 - 2.0 * y1 * y4 - 6.0 * y2 * y3 + 12.0 * y2 * y2 * y1 + 7.0 * y1 * y1 * y3 -10.0 * y1 * y1 * y1 * y2 - 8.0 * y1 * y1 * y1 * y2 + 6.0 * y1 * y1 * y1 * y1 * y1; y6 = 24.0 * a * b * y1 * y1 * y1 * y1 - 36.0 * a * b * y1 * y1 * y2 + 6.0 * a * b * y2 * y2 + 8.0 * a * b * y1 * y3 - 2.0 * y2 * y4 - 2.0 * y1 * y5 + 2.0 * y1 * y1 * y4 - a * b * y4 -6.0 * y3 * y3 + 44.0 * y1 * y2 * y3 + 60.0 * y1 * y1 * y1 * y1 * y2 -24.0 * y1 * y1 * y1 * y1 * y1 * y1 + 12.0 * y2 * y2 * y2 -54.0 * y1 * y1 * y2 * y2 + 7.0 * y1 * y1 * y4 -24.0 * y1 * y1 * y1 * y3 - 24.0 * y1 * y1 * y2 * y2 -8.0 * y1 * y1 * y1 * y3 + 24.0 * y1 * y1 * y1 * y1 * y2 - 6.0 * y2 * y4; */ y1 = 0.5 * (a + b); y2 = a * b - y1 * y1; y3 = -3.0 * y1 * y2; y4 = -3.0 * y2 * y2 - 4.0 * y1 * y3; y5 = - 5.0 * y1 * y4 -10.0 * y2 * y3; y6 = -10.0 * y3 * y3 - 15.0 * y2 * y4 - 6.0 * y1 * y5; a0 = y1 * t; a1 = y2 * t * t / 2.0; a2 = y3 * t * t * t / 6.0; a3 = y4 * t * t * t * t / 24.0; a4 = y5 * t * t * t * t * t / 120.0; a5 = y6 * t * t * t * t * t * t / 720.0; } a0 *= l; a1 *= l; a2 *= l; a3 *= l; a4 *= l; a5 *= l; pade(l); h->taul = tau * l; h->h2_aten = exp(- a0); h->h2_term[0].c = ec1; h->h2_term[1].c = ec2; h->h2_term[2].c = ec3; h->h2_term[0].x = ex1; h->h2_term[1].x = ex2; h->h2_term[2].x = ex3; return(ifImg); }