Ітераційні методи розв’язування систем лінійних алгебраїчних рівнянь

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Алгоритмічні основи криптології
Група:
ІБ – 42

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НУ ”Львівська політехніка” Звіт про виконання лабораторної роботи №2 з курсу: ”Алгоритмічні основи криптології” на тему: ”Ітераційні методи розв’язування систем лінійних алгебраїчних рівнянь ” Львів-2007 Теоретичні відомості Методи чисельного розв‘язування систем лінійних рівнянь поділяються на дві групи: 1) „точні” (прямі) методи, які дозволяють одержати розв‘язок, якщо він існує, як скінченну кількість арифметичних операцій (наприклад: метод Крамера, метод Жордана-Гауса та ін.); 2) наближені (ітераційні) методи, які дозволяють одержати розв‘язки системи лінійних рівнянь лише з заданою точністю з припущенням, що обчислення проводиться без округлень. Точний розв‘язок в даному випадку можна одержати я к результат нескінченно збіжного процесу. До таких методів відносять метод простої ітерації, метод Зейделя та ін. „Точні” методи використовуються при розв‘язуванні на ЕОМ систем невисокого порядку (n<103 де n - число лінійних алгебраїчних рівнянь системи). Наближені методи використовуються для систем високого порядку (n=103ч106). Переваги наближених методів (метод простих ітерацій) над точними (метод Гауса) є такими: 1. Час обчислень пропорційний n2 на ітерацію, тоді як для методу виключення час обчислень пропорційний n3. Якщо для розв‘язку потрібно менше ніж n ітерацій, то затрати машинного часу будуть менші. 2. Як правило, похибки округлення при ітераційному методі впливають на остаточні результати значно менше, ніж при розв‘язуванні методом Гауса, оскільки при його використанні похибки не нагромаджуються. 3. Метод ітерацій стає особливо зручним при розв‘язку систем, переважна кількість коефіцієнтів яких дорівнює 0. Недоліком методу ітерацій є те, що рішення не завжди збігаються. Метод простої ітерації. Нехай задана система лінійних алгебраїчних рівнянь: , (1) де , , . Будемо вважати, що діагональні коефіцієнти матриці А , . Розв‘яжемо перше рівняння системи (1) відносно , друге - відносно  і т.д. Тоді отримаємо еквівалентну систему: , (2) де  при ;  при , . Введемо позначення: ,. Тоді систему (2) можна записати: . (3) Задамося вектором початкового наближення , де - довільні числа. Тоді послідовно знаходимо перше наближення: , друге наближення: , і т.д. довільне (K+1) наближення обчислюється за формулою: , , (4) або в розгорнутому вигляді: , . Ітераційний процес закінчують тоді, коли: , , де Е - гранична абсолютна похибка. Методом простої ітерації можна визначити розв‘язок системи рівнянь лише у випадку, коли цей метод є збіжним. Доведено, що якщо елементи матриці  задовольняють одну з умов: , , (5) , , (6) то процес ітерації збігається до точного розв‘язку при будь-якому векторі нульового наближення. Як правило, за вектор нульового наближення приймають стовпчик вільних членів . Вихідна система лінійних алгебраїчних рівнянь A= 24,21+s 2,42 3,85 2,31 31,49 1,52 3,49 4,84 28,72+s 30,24 40,95-r 42,81 де s = 0.2*k , r = 0.2*p, k=6, p=0. Блок-схема алгоритму    /*Текст програми розв’язку системи лінійних алгебраїчних рівнянь методом простої ітерації */ #include <stdio.h> #include <math.h> const int m=3; void main(void) /* оголошення змінних */ { typedef double matrix[3][3]; typedef double vector[3]; matrix a, alpha; vector b, beta, x, x0; int i, j, k; int rez=0; double E; /* вводимо значення матриці коефіцієнтів системи і вектора вільних членів */ for(i=0;i<m;i++) { for(j=0;j<m;j++) { printf("a[%d,%d]?:", i+1, j+1); scanf("%lf", &a[i][j]); } printf("b[%d]?:", i+1); scanf("%lf", &b[i]); } /* присвоєння значень ά і β*/ for(i=0;i<m;i++) { for(j=0;j<m;j++) { if (i!=j) alpha[i][j]=-a[i][j]/a[i][i]; else alpha[i][i]=0; } beta[i]=b[i]/a[i][i]; } /* вводимо значення похибки Е */ { printf("E="); scanf("%lf", &E); /* присвоюємо початкові наближення */ for(i=0;i<m;i++) x0[i]=beta[i]; /* перевірка виконання умови */ while (!rez) { rez=1; for(i=0;i<m;i++) { x[i]=beta[i]; for(j=0;j<m;j++) x[i]+=x0[j]*alpha[i][j]; rez*=(fabs(x[i]-x0[i])<E); } for(i=0;i<m;i++) x0[i]=x[i]; } /* виводимо результати виконання програми */ for(i=0;i<m;i++) printf("x[%d]=%lf\n", i+1, x[i]); /* здійснюємо перевірку перавильності виконаних обчислень */ for (i=0; i<n; i++) { q=0; for (j=0;j<(m-1);j++) q+=d[i][j]*x[j]; printf ("q%d=%lf\n",i,q); } } Результат виконання програми  Висновок: під час виконання даної лабораторної роботи ми вивчили найбільш поширені методи розв’язку системи лінійних алгебраїчних рівнянь. Похибки округлень при ітераційному методі впливають на остаточні результати значно менше, ніж при розв’язку за методом Гауса, оскільки при його використані похибки не нагромаджуються. Метод ітерації стає особливо зручним при розв’язку систем переважна кількість коефіцієнтів яких дорівнює 0. Недоліком методу ітерації є те, що рішення не завжди збігаються.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!