GE Pivoting

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <stdio.

h>
#include <math.h>
int i, j, k=1, n, r, l, m;
double a[50][50], b[50], c[50], d, x, s, u[50];
void max()
{
double mac;
mac=fabs(a[k][k]);
r=k;
for(i=k+1;i<=n;i++)
{
if(mac<fabs(a[i][k]))
{
mac=a[i][k];
r=i;
}
}
}
void intch()
{
for(j=1;j<=n;j++)
{
c[j]=a[r][j];
a[r][j]=a[k][j];
a[k][j]=c[j];
}
d=b[r];
b[r]=b[k];
b[k]=d;
}
void elim()
{
for(i=k+1;i<=n;i++)
{
if(a[i][k]!=0)
{
x=a[i][k];
b[i]=b[i]-(x/a[k][k])*b[k];
for(j=1;j<=n;j++)
a[i][j]=a[i][j]-(x/a[k][k])*a[k][j];
printf("\nR%d = R%d - (%lf/%lf)*R%d\n", i, i, x, a[k][k], k);
for(l=1;l<=n;l++)
{
for(m=1;m<=n;m++)
printf("%lf\t", a[l][m]);
printf("%lf\n", b[l]);
}
}
}
}
int main()
{
printf("Enter the number of equations: ");
scanf("%d", &n);
printf("Enter the coeffecients and constants\n");
for(i=1;i<=n;i++)
{
printf("\nEquation %d\n", i);
for(j=1;j<=n;j++)
scanf("%lf", &a[i][j]);
printf("Constant term: ");
scanf("%lf", &b[i]);
}
printf("\nMatrix form\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%lf\t", a[i][j]);
printf("%lf\n", b[i]);
}
do
{
max();
intch();
if(r!=k)
printf("\nExchanging rows %d and %d\n", k, r);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%lf\t", a[i][j]);
printf("%lf\n", b[i]);
}
elim();
k++;
}while(k<n);
u[n]=b[n]/a[n][n];
for(i=n-1;i>=1;i--)
{
s=0;
for(j=n;j>=i+1;j--)
s=s+a[i][j]*u[j];
u[i]=(b[i]-s)/a[i][i];
}
printf("\nBack Substituting\n");
for(i=1;i<=n;i++)
printf("x%d = %lf\n", i, u[i]);
}

You might also like