Exemplo n.º 1
0
int main(void)
{
	char txt[MAXSTR];
	int i,j,m,n,nval;
	float fac,val,x;
	FILE *fp;

	if ((fp = fopen("fncval.dat","r")) == NULL)
		nrerror("Data file fncval.dat not found\n");
	fgets(txt,MAXSTR,fp);
	while (strncmp(txt,"Legendre Polynomials",20)) {
		fgets(txt,MAXSTR,fp);
		if (feof(fp)) nrerror("Data not found in fncval.dat\n");
	}
	fscanf(fp,"%d %*s",&nval);
	printf("\n%s\n",txt);
	printf("%4s %4s %10s %17s %24s\n","n",
		"m","x","actual","plgndr(n,m,x)");
	for (i=1;i<=nval;i++) {
		fscanf(fp,"%d %d %f %f",&n,&m,&x,&val);
		fac=1.0;
		if (m > 0)
			for (j=n-m+1;j<=n+m;j++) fac *= j;
		fac *= 2.0/(2.0*n+1.0);
		val *= sqrt(fac);
		printf("%4d %4d %13.6f %19.6e %19.6e\n",
			n,m,x,val,plgndr(n,m,x));
	}
	fclose(fp);
	return 0;
}
Exemplo n.º 2
0
void ylm(int l, int m, double theta, double phi,
	 double *re, double *im)
{
    int i;
    double coeff = 1.0;
    double plm, ylm;
    int sign = 1;

    if (m < 0.0)
    {
	sign *= -1;
    }
    m = abs(m);

    for (i = l-m; i > 1; i--)
    {
	coeff *= i;
    }
    for (i = l+m; i > 1; i--)
    {
	coeff /= i;
    }
    coeff *= (2.0*l+1.0)/4.0/M_PI;
    coeff = sqrt(coeff);
/*
    printf("coeff: %e\n", coeff);
    */

    plm = plgndr(l, m , cos(theta));
    ylm = coeff * plm;
    *re = ylm * cos(m*phi);
    *im = ylm * sin(m*phi);

    if (sign < 0)
    {
	*im *= -1;
	if (m % 2 == 1)
	{
	    *re *= -1;
	    *im *= -1;
	}
    }
}
Exemplo n.º 3
0
int main(void)  /* Program sfroid */
{
	float plgndr(int l, int m, float x);
	void solvde(int itmax, float conv, float slowc, float scalv[],
		int indexv[], int ne, int nb, int m, float **y, float ***c, float **s);
	int i,itmax,k,indexv[NE+1];
	float conv,deriv,fac1,fac2,q1,slowc,scalv[NE+1];
	float **y,**s,***c;

	y=matrix(1,NYJ,1,NYK);
	s=matrix(1,NSI,1,NSJ);
	c=f3tensor(1,NCI,1,NCJ,1,NCK);
	itmax=100;
	conv=5.0e-6;
	slowc=1.0;
	h=1.0/(M-1);
	printf("\nenter m n\n");
	scanf("%d %d",&mm,&n);
	if (n+mm & 1) {
		indexv[1]=1;
		indexv[2]=2;
		indexv[3]=3;
	} else {
		indexv[1]=2;
		indexv[2]=1;
		indexv[3]=3;
	}
	anorm=1.0;
	if (mm) {
		q1=n;
		for (i=1;i<=mm;i++) anorm = -0.5*anorm*(n+i)*(q1--/i);
	}
	for (k=1;k<=(M-1);k++) {
		x[k]=(k-1)*h;
		fac1=1.0-x[k]*x[k];
		fac2=exp((-mm/2.0)*log(fac1));
		y[1][k]=plgndr(n,mm,x[k])*fac2;
		deriv = -((n-mm+1)*plgndr(n+1,mm,x[k])-
			(n+1)*x[k]*plgndr(n,mm,x[k]))/fac1;
		y[2][k]=mm*x[k]*y[1][k]/fac1+deriv*fac2;
		y[3][k]=n*(n+1)-mm*(mm+1);
	}
	x[M]=1.0;
	y[1][M]=anorm;
	y[3][M]=n*(n+1)-mm*(mm+1);
	y[2][M]=(y[3][M]-c2)*y[1][M]/(2.0*(mm+1.0));
	scalv[1]=fabs(anorm);
	scalv[2]=(y[2][M] > scalv[1] ? y[2][M] : scalv[1]);
	scalv[3]=(y[3][M] > 1.0 ? y[3][M] : 1.0);
	for (;;) {
		printf("\nEnter c**2 or 999 to end.\n");
		scanf("%f",&c2);
		if (c2 == 999) {
			free_f3tensor(c,1,NCI,1,NCJ,1,NCK);
			free_matrix(s,1,NSI,1,NSJ);
			free_matrix(y,1,NYJ,1,NYK);
			return 0;
		}
		solvde(itmax,conv,slowc,scalv,indexv,NE,NB,M,y,c,s);
		printf("\n %s %2d %s %2d %s %7.3f %s %10.6f\n",
			"m =",mm,"  n =",n,"  c**2 =",c2,
			" lamda =",y[3][1]+mm*(mm+1));
	}
}