You are on page 1of 2

#include <stdio.

h>
#include <math.h>
#define MAXROW 10
#define MAXITER 100
#define EPS
1.E-5
void main()
{
int
i, j, iter, numrow;
double old, rms;
double a[MAXROW][MAXROW], b[MAXROW], x[MAXROW];
/*..Initialize..*/
for (i = 0; i < MAXROW; i++)
{
for (j = 0; j < MAXROW; j++)
a[i][j] = 0.;
b[i] = 0.;
//..initial value
x[i] = 0.;
}
/*..Input numrow..*/
printf("numrow is ");
scanf("%d", &numrow);
if (numrow <= 0 || numrow > MAXROW)
{
printf("Change MAXROW in Source code\n");
return;
}
/*..Input Matrix Component..*/
for (i = 0; i < numrow; i++)
{
for (j = 0; j < numrow; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%lf", &(a[i][j]));
}
printf("b[%d]=", i);
scanf("%lf", &(b[i]));
}
/*..Gauss - Seidel..*/
printf("\niter ");
for (i = 0; i < numrow; i++)
printf("x[%d]
", i);
printf(" rms error\n");
for (iter = 0; iter < MAXITER; iter++)
{
rms = 0.;
for (i = 0; i < numrow; i++)
{
old = x[i];
x[i] = b[i];
for (j = 0; j < numrow; j++)
{
if (i == j)
continue;

x[i] -= a[i][j]*x[j];
}/*..for.j..*/
x[i] /= a[i][i];
rms +=(x[i] - old)*(x[i] - old);
}/*..for.i..*/
rms /=(double)numrow;
rms = sqrt(rms);
printf(" %d ", iter + 1);
for (i = 0; i < numrow; i++)
printf("%5.5f ", x[i]);
printf("%e\n", rms);
if (rms < EPS)
break;
}/*..for.k..*/
/*..Output Result..*/
if (iter < MAXITER)
printf("** Complete **\n");
else
printf("** Not Converged **\n");
}

You might also like