コード例 #1
0
ファイル: xpade.c プロジェクト: bamford/astrobamf
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;
}
コード例 #2
0
ファイル: txlsetup.c プロジェクト: ambikeshwar1991/ngspice-1
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);
}