Вы находитесь на странице: 1из 15

Method – 3 USING GAUSS SEIDEL

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main()
{
float dx,dy,ra,g;
int l,m,i,j,k,sum;
float tb,tu,tl,tr,z=1.0,x;

printf(" enter the no of horizontal lines & vertical lines ");


scanf("%d%d",&l,&m);
float a[l][m];
printf("enter distance between 2 horizontal lines");
scanf("%f",&dy);
printf("enter distance between 2 veritcal lines");
scanf("%f",&dx);

ra=dy/dx;

printf("the boundray condition for all four side");


printf("enter the boundray condition of base");
scanf("%f",&tb);
printf("enter the boundray condition of upper");
scanf("%f",&tu);
printf("enter the boundray condition of left");
scanf("%f",&tl);
printf("enter the bounday condition of right");
scanf("%f",&tr);

for(i=0;i<m;i++)
{
a[0][i]=tu;
}

for(i=1;i<l;i++)
{
a[i][0]=tl;
}

for(i=1;i<l;i++)
{
a[i][m-1]=tr;
}

for(i=0;i<m;i++)
{
a[l-1][i]=tb;
}
for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
a[i][j]=0.00;
}

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}
sum=0;
g=0;
while(z>0.01)
{
z=0;
for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
{
g=a[i][j];
a[i][j]=(a[i+1][j]+a[i-1][j]+((ra*ra)*(a[i][j+1]+a[i][j-1])))/(2*(1+(ra*ra)));
z+=fabs(g-a[i][j]);
}

}
sum+=1;
}
printf("\n\n");
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}
printf("sum =%d",sum);
FILE *fp;
fp=fopen("out1.doc","w");
fprintf(fp,"\t gauss seidel\n");
for(i=0;i<41;i++)
{
fprintf(fp,"t%d%d \t %f\n",i,11,a[i][11]);
}

fclose(fp);
return 0;
}
Method – 2 USING TIME MARCHING

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

int main()
{
float a1,dx,dy,ra,g,alpha,deltime,rx,ry;
int l,m,i,j,k,sum,c;
float tb,tu,tl,tr,z=1.0,x;

printf(" enter the no of horizontal lines & vertical lines ");


scanf("%d%d",&l,&m);
float a[l][m],tw1[l][m];
printf("enter discatnce between 2 horizontal lines");
scanf("%f",&dy);
printf("enter distance between 2 veritcal lines");
scanf("%f",&dx);
printf("enter the value of alpha");
scanf("%f",&alpha);
printf("enter the delta time ");
scanf("%f",&deltime);

rx=(alpha*deltime)/(dx*dx);
ry=(alpha*deltime)/(dy*dy);

ra=dy/dx;

printf("the bounday condition for all four side");


printf("enter the bounday condition of base");
scanf("%f",&tb);
printf("enter the bounday condition of upper");
scanf("%f",&tu);
printf("enter the bounday condition of left");
scanf("%f",&tl);
printf("enter the bounday condition of right");
scanf("%f",&tr);

for(i=0;i<m;i++)
{
a[0][i]=tu;
}

for(i=1;i<l;i++)
{
a[i][0]=tl;
}

for(i=1;i<l;i++)
{
a[i][m-1]=tr;
}

for(i=0;i<m;i++)
{
t[l-1][i]=tb;
}

for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
a[i][j]=0.00;
}

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}
sum=0;
g=0;
c=0;

while(z>0.01)
{
z=0;
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
tw1[i][j]=a[i][j];
}

}
for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
{
g=tw1[i][j];
a[i][j]=tw1[i][j]+rx*(tw1[i+1][j]-2*tw1[i][j]+tw1[i-1][j])+ry*(tw1[i][j+1]-
2*tw1[i][j]+tw1[i][j-1]);
z+=fabs(g-a[i][j]);
}

}
sum+=1;

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}

printf("count = %d",sum);
FILE *fp;
fp=fopen("out2.doc","w");
fprintf(fp,"\t time marching\n");
for(i=0;i<41;i++)
{
fprintf(fp,"t%d%d \t %f\n",i,11,a[i][11]);
}

fclose(fp);
return 0;
}
Method – 1 USING PSOR
#include<stdlib.h>
#include<stdio.h>
#include<math.h>

int main()
{
float a1,dx,dy,ra,g,w,pi;
int l,m,i,j,k,sum,c;
float tb,tu,tl,tr,z=1.0,x;

printf(" enter the no of horizontal lines & vertical lines ");


scanf("%d%d",&l,&m);
float a[l][m],tw1[l][m];
printf("enter distance between 2 horizontal lines");
scanf("%f",&dy);
printf("enter distance between 2 veritcal lines");
scanf("%f",&dx);

ra=dy/dx;

printf("the bounday condition for all four side");


printf("enter the bounday condition of base");
scanf("%f",&tb);
printf("enter the bounday condition of upper");
scanf("%f",&tu);
printf("enter the bounday condition of left");
scanf("%f",&tl);
printf("enter the bounday condition of right");
scanf("%f",&tr);

for(i=0;i<m;i++)
{
a[0][i]=tu;
}

for(i=1;i<l;i++)
{
a[i][0]=tl;
}

for(i=1;i<l;i++)
{
a[i][m-1]=tr;
}
for(i=0;i<m;i++)
{
a[l-1][i]=tb;
}

for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
a[i][j]=0.00;
}

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}
sum=0;
g=0;
c=0;

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
tw1[i][j]=a[i][j];
}

}
pi=22.00/7.00;
sum=0;
z=1;
a1=(cos((pi)/(l-1))+(ra*ra)*cos((pi)/(m-1)))/(1+(ra*ra));
printf("%f\n",a1);
printf("%f\n",pow(fabs(1-a1),0.5));
w=(2-(2*pow(fabs(1-a1),1.00/2.00)))/a1;
printf("w=%f",w);
while(z>0.01)
{
z=0;
for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
{
g=tw1[i][j];
tw1[i][j]=((1-w)*tw1[i][j])+(w*((tw1[i+1][j]+tw1[i-1][j]+((ra*ra)*(tw1[i]
[j+1]+tw1[i][j-1]))))/(2*(1+(ra*ra))));
z+=fabs(g-tw1[i][j]);
}

}
sum+=1;

printf("\n\n");
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",tw1[i][j]);
}
printf("\n");
}
printf(" for w=%f count = %d",w,sum);

FILE *fp;
fp=fopen("out1.doc","w");
fprintf(fp,"\t psow\n");
for(i=0;i<41;i++)
{
fprintf(fp,"t%d%d \t %f\n",i,11,tw1[i][11]);
}

fclose(fp);
return 0;
}
Method – 4 W VS NO OF ITERATIONS

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main()
{
float dx,dy,ra,g,w;
int l,m,i,j,k,sum,c;
float tb,tu,tl,tr,z=1.0,x;

printf(" enter the no of horizontal lines & vertical lines ");


scanf("%d%d",&l,&m);
float a[l][m],tw1[l][m],m[100];
printf("enter discatnce between 2 horizontal lines");
scanf("%f",&dy);
printf("enter distance between 2 veritcal lines");
scanf("%f",&dx);

ra=dy/dx;

printf("the bounday condition for all four side");


printf("enter the bounday condition of base");
scanf("%f",&tb);
printf("enter the bounday condition of upper");
scanf("%f",&tu);
printf("enter the bounday condition of left");
scanf("%f",&tl);
printf("enter the bounday condition of right");
scanf("%f",&tr);

for(i=0;i<m;i++)
{
a[0][i]=tu;
}

for(i=1;i<l;i++)
{
a[i][0]=tl;
}

for(i=1;i<l;i++)
{
a[i][m-1]=tr;
}

for(i=0;i<m;i++)
{
a[l-1][i]=tb;
}

for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
a[i][j]=0.00;
}

sum=0;
g=0;
c=0;

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
tw1[i][j]=a[i][j];
}

}
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",tw1[i][j]);
}
printf("\n");
}
c=0;
for(w=0.8;w<=2.0;w+=0.1)
{
for(i=0;i<l;i++)

{
for(j=0;j<m;j++)
{
tw1[i][j]=a[i][j];
}

}
sum=0;
z=1;

while(z>0.01)
{
z=0;
for(i=1;i<l-1;i++)
{
for(j=1;j<m-1;j++)
{
g=tw1[i][j];
tw1[i][j]=((1-w)*tw1[i][j])+(w*((tw1[i+1][j]+tw1[i-1][j]+((ra*ra)*(tw1[i]
[j+1]+tw1[i][j-1]))))/(2*(1+(ra*ra))));
z+=fabs(g-tw1[i][j]);
}

}
sum+=1;

}
printf("count = %d",sum);
m[c]=sum;
c+=1;
}
printf("\n");
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",tw1[i][j]);
}
printf("\n");
}
c=0;
for(w=0.8;w<=2.0;w+=0.1)
{
printf(" for w=%f count = %f",w,m[c]);
c+=1;
}
FILE *fp;
fp=fopen("count4.doc","w");
c=0;
fprintf(fp,"w \t count\n");
for(w=0.8;w<=2.0;w+=0.1)
{

fprintf(fp," %f \t %f\n",w,m[c]);
c+=1;
}
fclose(fp);

return 0;
}
Method – 5 ANALYTICAL SOLUTION

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

int main()
{
int l,m,i,j,k,sum,c,n;

double a1,dx,dy,ra,g,alpha,deltime,rx,ry,tem;
printf(" enter the no of horizontal lines & vertical lines ");
scanf("%d%d",&l,&m);
double a[l][m],tw1[l][m];
printf("enter discatnce between 2 horizontal lines");
scanf("%f",&dy);
printf("enter distance between 2 veritcal lines");
scanf("%f",&dx);
double s=acos(-1.0);
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
tem=0;
for(n=1;n<112;n++)
{
tem=tem + ((1-pow(-1,n))*(sinh(n*s*i*0.05))*(sin(n*s*j*0.05)))/
(n*s*sinh(n*s*2));
}
a[i][j]=100*2*tem;
}
}
for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
printf("%0.2f ",a[i][j]);
}
printf("\n");
}

FILE *fp;
fp=fopen("out5.doc","w");
fprintf(fp,"\t analytical \n");
for(i=0;i<41;i++)
{
fprintf(fp,"t%d%d \t %f\n",i,11,a[i][11]);
}

fclose(fp);
return 0;
}

Вам также может понравиться