⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s04538.c

📁 本课程设计是基于C语言的
💻 C
字号:
# include <stdio.h>
# include <math.h>


#define MAX_LEN 20 

/* define variables */
int K,M ;
double Z[MAX_LEN] ;
double V[MAX_LEN] ;
double r1 , r2, e, v ;
double h ;
int  M1, M2 ;
int N[MAX_LEN] ;
int NST, INS ;
double EV[MAX_LEN] ;

double c1[51][101],c2[51][101],c3[51][101],c4[51][101] ;
double HR[MAX_LEN] ;
double HZ[MAX_LEN] ;
int Left[MAX_LEN] ;
double w,w1;
int g,q,f1,f2;
double mk;
double mc;
double mb;
double me1,me2;
double mm;
double y;

double a[51][101];/*dian de dian wei*/
double b[51][101][6];/*0:z 1:r 2:h1 3:h2 4:h3 5:h4 */
int MAXR ;
int MAX_Z;

int loadData();
int calC();
int putIn();
int showData(); /* for test */
int print();

void main()
{	int i,j;
	w=1;
	mm=0;


	
	loadData();
    showData();

	calC();
	for(g=0;g<1;g++){
	putIn();
	}

	w=1.375;
	for(g=0;g<12;g++){
		putIn();
		if(g==10){
			me1=mc;
		}
		if(g==11){
			me2=mc;
		}
		}
	y=me2/me1;
	w=2/(1+sqrt(1-(y+w-1)*(y+w-1)/(y*w*w)));
	w=1.25*w-0.5;

	for(q=0;q<1000;q++){
		w1=w;
		for(g=0;g<12;g++){
			putIn();
			if(g==10){
				me1=mc;
			}
			if(g==11){
				me2=mc;
			}
		}
		y=me2/me1;
		w=2/(1+sqrt(1-(y+w-1)*(y+w-1)/(y*w*w)));
		w=1.25*w-0.5;
		if(fabs((w-w1)/(2-w1))<0.05){
			break;
		}
	}
		/*
	for(i=0;i<MAXR;i++){
		for(j=1;j<=MAX_Z;j++){
	
			printf("%lf  ",a[i][j]);
		}
		printf("          %d \n",i);
	}*/
	w=w;
	q=q;


	g=0;
	q=1;
	while(mm>e){	
		g++;
		putIn();
		while(g==12){
			q++;
			g=0;
		}
	}
/*	
for(q=0;q<1000;q++){
		for(g=0;g<12;g++){
			putIn();
			if(mm<e){
				break;
			}
		}
	}*/




	/* fprintf */				
print();
	/* draw */

return ;
}


int loadData()
{
	FILE * fp=NULL;
    int k=0;

    if( (fp=fopen("D:\\S04538\\S04538.txt","r")) == NULL)
	{
		printf("can not open file.\n");
		return -1 ;
	}

    fscanf(fp,"K=%d;M=%d;\n",&K,&M);

    fscanf(fp, "Z=");
    for(k=0;k<K-1;k++)
      fscanf(fp,"%lf,",&Z[k]);
    fscanf(fp,"%lf;\n",&Z[K-1]);


    fscanf(fp,"V=");
    for(k=0;k<K-1;k++)
		fscanf(fp,"%lf,",&V[k]);
    fscanf(fp,"%lf;\n",&V[K-1]);
    

	fscanf(fp,"r1=%lf;r2=%lf;e=%lf;v=%lf;\n",&r1,&r2,&e,&v);
    

	fscanf(fp,"h=%lf;\n",&h);

	fscanf(fp,"M1=%d;M2=%d;\n",&M1,&M2);
    
	fscanf(fp,"n=");
    for(k=0;k<K-1;k++)
		fscanf(fp,"%d,",&N[k]);
    fscanf(fp,"%d;\n",&N[K-1]);


    fscanf(fp,"NST=%d;INS=%d;\n",&NST,&INS);

	fscanf(fp, "EV=");
    for(k=0;k<M-1;k++)
        fscanf(fp,"%lf,",&EV[k]);
    fscanf(fp,"%lf;\n",&EV[M-1]);
    
	fclose(fp);

	return 0 ;
}

int showData()
{
	int i=0;
	printf("K=%d;M=%d;\n",K,M);
	for( i=0; i<K; i++ )
		printf(" %.1lf ",Z[i]);
	printf("\n");

	for( i=0; i<K; i++ )
		printf(" %.1lf ",V[i]);
	printf("\n");
    printf(" r1=%.1lf,r2=%.1lf,e=%lf,v=%.1lf \n",r1,r2,e,v);
    printf(" h=%.1lf \n",h);
	printf(" M1=%d,M2=%d\n",M1,M2);

	for( i=0; i<K; i++ )
		printf(" %d ",N[i]);
	printf("\n");
    
	printf(" NST=%d,INS=%d\n",NST,INS);

	for( i=0; i<M; i++ )
		printf(" %.1lf",EV[i]);
	printf("\n");

	return 0;
}

int calC()
{
/*qiu dian de zuo biao*/
/*a[r][z]    b[r][z]*/

int i,j,l,m,k;
k=0;
MAXR=M1+M2;
MAX_Z=0;
for(i=0;i<K;i++){
	MAX_Z=N[i]+MAX_Z;
}
MAX_Z=MAX_Z+K-1;
	/*xian qiu r*/
for(i=0;i<=MAX_Z;i++){
	b[0][i][1]=0;
}

for(j=1;j<=MAXR;j++){
	for(i=0;i<=MAX_Z;i++){
		if(j<=M1){
			b[j][i][1]=j*r1/M1;
		}
		else{
			b[j][i][1]=r1+(j-M1)*r2/M2;
		}
	}
}
	/*ran hou qiu z*/

    i=0;
	j=1;
	m=N[0];
	for(l=0;l<=MAXR;l++){	
		for(i=0,m=N[0];i<K;i++,m=m+N[i]+1){
			for(;j<=m;j++){
				b[l][j][0]=b[l][j-1][0]+Z[i]/N[i];
			}
			if(i!=K-1){
				b[l][j][0]=b[l][j-1][0]+h;
				j++;
			}
		}	
		j=1;
	}

/*chu shi hua ge dian dian wei*/
	for(i=0;i<=MAXR;i++){
		for(j=0;j<=MAX_Z;j++){
			a[i][j]=0;
		}
	}
/*z zhou shang de dian de dian wei*/
	for(l=1;l<=MAX_Z;l++){
		a[0][l]=100*b[0][l][0]/b[0][MAX_Z][0];
	}
/*yang ji shang dian wei*/
	for(i=0;i<=MAXR;i++)
	{
		a[i][MAX_Z]=100;
	}
/*qi yu ge dian ji shang de dian de dian wei*/
	for(i=0,j=0;j<K-1;j++)
	{
		i=i+N[j];
		for(l=M1;l<=MAXR;l++){
		a[l][i]=V[j];
		a[l][i+1]=V[j];	
		}	
		i++;
	}
/*dian ji jian feng bi bian jie shang de dian wei*/
	
	j=1;
	
	for(i=0;i<K;i++){
		k=k+N[i];
		for(;j<k;j++){
			if(i==0){
			a[MAXR][j]=V[i]*j/N[i];
			a[MAXR][j]=a[MAXR][j];
			}
			else{
			a[MAXR][j]=(V[i]-V[i-1])/N[i]+a[MAXR][j-1];
			a[MAXR][j]=a[MAXR][j];
			}
		}
		k++;
		j++;
		j++;
	}

/*ji suan bu chang*//*0:z 1:r 2:h1 3:h2 4:h3 5:h4 */

	for(i=0;i<MAXR;i++){
		for(j=1;j<MAX_Z;j++){
			b[i][j][2]=b[i][j][0]-b[i][j-1][0];
			b[i][j][3]=b[i][j+1][0]-b[i][j][0];
			if(i==0){
				b[i][j][4]=0;
			}
			else{
				b[i][j][4]=b[i][j][1]-b[i-1][j][1];
			}
			b[i][j][5]=b[i+1][j][1]-b[i][j][1];
		}
	}



/*qiu c1 c2 c3 c4*/
	for(i=0;i<MAXR;i++){
		for(j=1;j<MAX_Z;j++){
			if(i==0){
				c3[0][j]=0;
				c4[0][j]=4/(b[0][j][5]*b[0][j][5]);
			}
			else{
				c3[i][j]=(2*b[i][j][1]-b[i][j][5])/(b[i][j][1]*b[i][j][4]*(b[i][j][4]+b[i][j][5]));
				c4[i][j]=(2*b[i][j][1]+b[i][j][4])/(b[i][j][1]*b[i][j][5]*(b[i][j][4]+b[i][j][5]));
			}
			c1[i][j]=2/(b[i][j][2]*(b[i][j][2]+b[i][j][3]));
			c2[i][j]=2/(b[i][j][3]*(b[i][j][2]+b[i][j][3]));
			c1[i][j]=c1[i][j];
			c2[i][j]=c2[i][j];
			c3[i][j]=c3[i][j];
			c4[i][j]=c4[i][j];
		}
	}

	
return 0;
}



int putIn(){
	int i,j,l,k;
	mc=0;
	mb=0;
	mm=0;
	f1=0;
	f2=0;

	for(i=0;i<MAXR;i++){
		for(j=1;j<MAX_Z;j++){
			mk=a[i][j];
			k=0;
			if(i==0){
				a[i][j]=(1-w)*a[i][j]+w*(c1[i][j]*a[i][j-1]+c2[i][j]*a[i][j+1]+c4[i][j]*a[i+1][j])/(c1[i][j]+c2[i][j]+c4[i][j]);
			}
			else{
				if(i<M1){
					a[i][j]=(1-w)*a[i][j]+w*(c1[i][j]*a[i][j-1]+c2[i][j]*a[i][j+1]+c3[i][j]*a[i-1][j]+c4[i][j]*a[i+1][j])/(c1[i][j]+c2[i][j]+c3[i][j]+c4[i][j]);
				}
				else{		
					k=j;
					for(l=0;l<K-1;l++){
						k=k-N[l];
						switch(k){
						case 0:a[i][j]=V[l];break;
						case 1:a[i][j]=V[l];break;
						default:k--;break;
						}
						if(a[i][j]==V[l]){
						break;
						}
					}
					if(l==K-1){a[i][j]=(1-w)*a[i][j]+w*(c1[i][j]*a[i][j-1]+c2[i][j]*a[i][j+1]+c3[i][j]*a[i-1][j]+c4[i][j]*a[i+1][j])/(c1[i][j]+c2[i][j]+c3[i][j]+c4[i][j]);}
				}
			}
			
			mc=mc+fabs(mk-a[i][j]);
			mb=fabs(mk-a[i][j]);
			if(mb>mm){
				mm=mb;
				f1=i;
				f2=j;
			}
		}
	}




return 0;
}

int print()
{
int i,j;
FILE * fp;
if((fp=fopen("D:\\s04538\\s04538.res","w"))==NULL){
	printf("can not open file.\n");
}
fprintf(fp,"            NUMERICAL SOLUTIONS OF ELECTROSTATIC POTENTIAL DISTRIBUTION\n");
fprintf(fp,"                        IN AN IMAGING TUBE USING*SOR*METHOD\n");
fprintf(fp,"\n");
fprintf(fp,"                          THE TUBE BOUNDARY AND DATATABLE\n");
fprintf(fp,"\n");
fprintf(fp,"                    CATHODE       ELECTRODS              SCREEN\n");
fprintf(fp,"                        |------|------|-----.....-----|-----|\n");
fprintf(fp,"                        |      |      |               |     |\n");
fprintf(fp,"                        |  N1  |  N2  |               | N%d  |\n",K-1);
fprintf(fp,"                        |      |      |               |     |\n");
fprintf(fp,"                        |      V1     V2                    | V%d\n",K-1);
fprintf(fp,"                        |                                   |\n");
fprintf(fp,"                   %d STEPS                               %.2lfV\n",M1+M2,V[K-1]);
fprintf(fp,"                        |                                   |\n");
fprintf(fp,"                        |                                   |\n");
fprintf(fp,"\n");
fprintf(fp,"\n");




fprintf(fp,"K=%d;M=%d;\n",K,M);
	for( i=0; i<K; i++ )
		fprintf(fp," %.1lf ",Z[i]);
	fprintf(fp,"\n");

	for( i=0; i<K; i++ )
		fprintf(fp,"%.1lf ",V[i]);
	fprintf(fp,"\n");
    fprintf(fp," r1=%.1lf,r2=%.1lf,e=%6lf,v=%.1lf \n",r1,r2,e,v);
    fprintf(fp," h=%.1lf \n",h);
	fprintf(fp," M1=%d,M2=%d\n",M1,M2);

	for( i=0; i<K; i++ )
		fprintf(fp," %d ",N[i]);
	fprintf(fp,"\n");
    
	fprintf(fp," NST=%d,INS=%d\n",NST,INS);

	for( i=0; i<M; i++ )
		fprintf(fp," %.1lf",EV[i]);
	fprintf(fp,"\n");
fprintf(fp,"i=%d,j=%d\n",f1,f2);
fprintf(fp,"q=%d,g=%d\n",q,g);

for(i=MAXR;i>=0;i--){
	for(j=0;j<=MAX_Z;j++){
		fprintf(fp,"(%lf,%lf),%f  ",b[i][j][0],b[i][j][1],a[i][j]);
	}
	fprintf(fp,"    第%d行\n",i);
}




return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -