Розв’язок системи лінійних рівнянь
За допомогою методу Зейделя
Застосування методу Гауса для розв’язування системи лінійних рівнянь з великою кількістю невідомих досить громіздке. Крім того, кількість невідомих може бути така велика, що коефіцієнти системи не завжди можна розмістити у оперативній пам’яті ПЕОМ. Тоді застосовувати для її розв’язування метод Гауса взагалі не можна. У цих випадках розв’язують систему ітераційними методами. Метод Зейделя належить саме до ітераційних методів.
Представлена програма на мові С здійснює реалізацію методу Зейделя.
Текст програми
#include <stdio.h>
#include <math.h>
main()
{
FILE *stream;
float e=0.001,a[11][11],x[11],y[11],s,r[11],t[11][11];
int i,j,n,m;
stream=fopen("zej.txt","w");
puts("введiть к-сть рiвнянь");
scanf("%d",&m);
m--;
for (i=0;i<=m;i++)
for (j=0;j<=m+1;j++)
{printf("a %d %d=",i,j);
scanf("%f",&a[i][j]);
t[i][j]=a[i][j];};
fprintf(stream," Розв'язок системи\n");
fprintf(stream," методом Зейделя\n");
fprintf(stream," матриця системи\n");
for (i=0;i<=m;i++)
{
for (j=0;j<=m+1;j++)
fprintf(stream," %5.2f",a[i][j]);
fprintf(stream,"\n");
};
/*присвоення початкових значень*/
for(i=0;i<=m;i++)
x[i]=a[i][m+1];
/*цикл iтерацiй*/
do {
s=0;
for(n=0;n<=m;n++)
{
y[n]=a[n][m+1];
for(j=0;j<=m;j++)
{if (j==n) continue;
y[n]-=a[n][j]*x[j];};
y[n]/=a[n][n];
s+=fabs(x[n]-y[n]);
x[n]=y[n];
};}
while (s>=e);
fprintf(stream," Розв'язок\n");
for (i=0;i<=m;i++)
fprintf(stream,"x %d=%5.4f\n",i,x[i]);
fprintf(stream,"невязки\n");
for(i=0;i<=m;i++)
{s=0;
for(j=0;j<=m;j++)
{
s+=t[i][j]*x[j]; };
r[i]=s-t[i][m+1];
fprintf(stream,"r[%d]=%5.3f\n",i,r[i]);
};
fclose(stream);
}
Результат роботи програми
Розв'язок системи