Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний yніверситет „Львівська Політехніка”
Звіт до лабораторної роботи №1
на тему:
„ЧИСЕЛЬНЕ РОЗВ’ЯЗУВАННЯ
СИСТЕМ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ”
Лабораторна робота №1
Мета: навчитись розв`язувати систему лiнiйних алгебраїчних рівнянь за допомогою iтераційного методу Зейделя.
Варіант №3.
А= f=
Розв’язати СЛАР, використовуючи стандартну програму з пакету Maple. Використовуючи одну з мов програмування, розв`язати дану СЛАР методу Зейделя з точнiстю ε=. Задана точнiсть ε ˃ 0 вважають досягнутою , . Вивести розв`язок та вектор нев`язки .
Теоритичнi вiдомостi
Розглянемо СЛАР:
, (1)
де – матриця розміру , – невідомий вектор, – заданий вектор.
Для побудови ітераційного методу розв’язування системи (1) попередньо перетворимо –те рівняння системи (1) до вигляду
Цю систему будемо розв’язувати методом Зейделя:
Компоненти вектора знаходяться з рівняння
послідовно, починаючи з .
Розв`язок СЛАР у Maple матиме вигляд:
Текст програми:
#include <stdio.h>
#include <math.h>
#include <conio.h>
float A[10][10],F[10],X1[10],X2[10];
int n;
void main()
{
g:
printf("\vvedit rozirnist matrusi: N=");
scanf("%i",&n);
int k=0;
float max,mod;
printf("Put the matrix:\n");
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
scanf("%f", &A[i][j]);
}
}
printf("Put the F-vektor:\n");
for (i=1;i<=n;i++)
{
X1[i]=1;X2[i]=0;
scanf("%f", &F[i]);
}
do
{
for (i=0;i<=n;i++)
{
X2[i]=0;
}
k++;
for (int j=2;j<=n;j++)
{
X2[1]=X2[1]+(A[1][j]/A[1][1]*X1[j]);
}
X2[1]=-X2[1]+F[1]/A[1][1];
for (i=2;i<=n;i++)
{
if (i==n)
{
for (j=1;j<=i-1;j++)
{
X2[i]=X2[i]-(A[i][j]/A[i][i]*X2[j]);
}
X2[i]=X2[i]+F[i]/A[i][i];
}
else
{
for (j=1;j<=i-1;j++)
{
X2[i]=X2[i]-(A[i][j]/A[i][i]*X2[j]);
}
for (j=i+1;j<=n;j++)
{
X2[i]=X2[i]-(A[i][j]/A[i][i]*X1[j]);
}
X2[i]=X2[i]+F[i]/A[i][i];
}
}
max=fabs(X2[1]-X1[1]);
for (i=2;i<=n;i++)
{
mod=fabs(X2[i]-X1[i]);
if (max<mod) max=mod;
}
for (i=1;i<=n;i++)
{
X1[i]=X2[i];
}
/*printf("\nk=%i, max=%f",k,max);
for (i=1;i<=n;i++){
printf(" x=%f",X2[i]);}*/
}
while ((max>0.001)&&(k<10000));
printf("\nIteracii: %i\nRozvjazok:",k);
for (i=1;i<=n;i++)
{
X1[i]=0;
printf("\nX[%i]=%f",i,X2[i]);
}
for (i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
X1[i]+=A[i][j]*X2[j];
}
}
printf("\nVektor nevjazku:");
for (i=1;i<=n;i++)
{
X1[i]=X1[i]-F[i];
printf("\n%f",X1[i]);
}
printf("\nDo you want put another data? y/n: ");
char y;
scanf("%s",&y);
if ((y=='y')||(y=='Y'))
{
printf("\n---------------\n");
goto g;
}
}
Результати
Висновок: На данiй лабораторнiй роботi я навчилася розв`язувати СЛАР двома способами: программно та в Maple, результати виконання зiйшлись.Освоiла iтерацiйний метод Зейделя розв`язування СЛАР.