Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний 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йний метод Зейделя розв`язування СЛАР.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!