За допомогою пакету MathCad

За допомогою пакету MathCad - student2.ru

Розв’язок системи лінійних рівнянь

За допомогою методу Зейделя

Застосування методу Гауса для розв’язування системи лінійних рівнянь з великою кількістю невідомих досить громіздке. Крім того, кількість невідомих може бути така велика, що коефіцієнти системи не завжди можна розмістити у оперативній пам’яті ПЕОМ. Тоді застосовувати для її розв’язування метод Гауса взагалі не можна. У цих випадках розв’язують систему ітераційними методами. Метод Зейделя належить саме до ітераційних методів.

Представлена програма на мові С здійснює реалізацію методу Зейделя.

Текст програми

#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);

}

Результат роботи програми

Розв'язок системи

Наши рекомендации