Комп’ютерні методи дослідження інформаційних процесів та систем

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

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

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

Рік:
2010
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Інші
Група:
БІ

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

МІНІСТЕРСТВО ОСТВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" ІКТА кафедра БІТ  ЗВІТ Про виконання лабораторної роботи № 2 "Комп’ютерні методи дослідження інформаційних процесів та систем" Мета роботи Ознайомлення з прямими методами розв’язування систем лінійних алгебраїчних рівнянь. Короткі теоретичні відомості Методи розв’язування систем лінійних алгебраїчних рівнянь  Ці методи поділяються на дві групи : прямі та ітераційні. 1) Прямі методи зводяться до скінчених алгоритмів для обчислення коренів рівнянь (тобто розв’язки шукають за певними формулами). Вони дають розв’язки після виконання відомого для даного n (n – порядок) числа арифметичних операцій. Іншими словами, прямим методом розв’язування лінійної системи  називають будь-який метод, котрий дозволяє знайти елементи вектора  з допомогою скінченого числа елементарних математичних операцій: додавання, віднімання, ділення, множення, та, можливо, кореня квадратного. Оцінити ефективність будь-якого методу можна за допомогою двох – трьох важливих характеристик: числа операцій, необхідних для реалізації даного методу; об’єму пам’яті; чутливості до переносу похибок заокруглення (або обчислювальної стійкості). Практично всі прямі методи розв’язування систем базуються на зведені матриці А до матриці більш простішої структури – діагональної (тоді розв’язок очевидний) або трикутної – та методів розв’язування таких систем. До групи прямих методів розв’язування систем лінійних алгебраїчних рівнянь належать: – метод Гаусса та його різновиди: а) класичний метод Гаусса із зведенням матриці А до верхньої трикутної матриці і одержанням розв’язків з допомогою обернених підстановок. Число операцій (вартість методу) – операцій сумування, множення та  операцій ділення (можна ними знехтувати в порівнянні з ). б) метод Гаусса з вибором головного елемента (частковим або повним). Число арифметичних операцій при цьому складає ~  сумувань та ~ множень. Саме цим визначається повна вартість методу, оскільки вартість розв’язку вже самої трикутної системи незначна в порівнянні з вартістю зведення матриці до трикутного вигляду. – LU-розклад (lower-upper –нижній-верхній)    Якщо використовувати алгоритм Краута, то число операцій складе . З точки зору об’єму обчислень методу LU- розкладу еквівалентний методу Гаусса з частковим вибором головного елемента; його переваги – це можливість роботи з різними векторами вільних членів  та з транспонованими матрицями  (рівняння  – розв’язок знаходиться за тим же LU-розкладом). – метод Халецького (схема). При розкладі симетричних матриць можна зменшити число операцій і об’єм пам’яті. Повна вартість складає половині вартості методу Гаусса + n обчислень квадратного кореня. Метод чисельно стійкий. – метод Жордана (роблять діагональну матрицю замість трикутної). Досить рідко використовується на практиці. До прямих методів відносяться також методи для кліткових та розріджених матриць. 2) Ітераційні (або наближені) методи – це методи послідовних наближень. В них необхідно задати деякий наближений розв’язок – так зване початкове наближення. Після цього з допомогою деякого алгоритму проводиться один цикл обчислень, котрий називається ітерацією. В результаті ітерації знаходять нове наближення. Ітерації проводять до тих пір, доки не одержать розв’язок із заданою похибкою. Об’єм обчислень при цьому наперед не відомий. Чому виникла потреба в ітераційних методах? Чим не влаштовують прямі методи? Основний недолік прямих методів – це нагромадження похибок в процесі розв’язування, оскільки обчислення на будь-якому етапі використовують результати (з похибками) попередніх операцій. Це особливо небезпечно для великих систем ( і більше) – наростає число операцій, а також для погано обумовлених систем () (малі похибки обчислень або вхідних даних можуть породити значні похибки в розв’язку). Тому прямі методи використовують для відносно невеликих () систем з густо заповненою матрицею та . Перевагою ітераційних методів над прямими є те, що окремі похибки, що виникають при обчисленнях, не впливають на кінцевий результат (ітерації закінчуються тільки тоді, коли одержано розв’язок із наперед заданою точністю), а ведуть лише до збільшення числа необхідних ітерацій. Крім того, розв’язування систем ітераційними методами спрощується ще й тому, що на кожній ітерації розв’язується система з одними і тими ж матрицями. До ітераційних належить: метод простої ітерації, метод Зейделя, метод верхньої релаксації, та інші. Повний текст завдання Розв’язати систему лінійних алгебраїчних рівнянь методом Гаусса.   Блок-схема алгоритму програми Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі, та їх пояснення void main() – головна функція програми; a,b,e,xs,f – змінні дійсного типу; Std::cout<< – метод який забезпечує введення в програму вхідних величин. Cin>> – метод класу STD., який забезпечує зчитування значення з клавиатури. int Main() – метод класу Program, який забезпечує початок роботи програми. n,m –Змінні котрі визначають розмірність матриці. i,k,l,j-Змінні котрі використовуються в циклі. a[n][m]-Змінна масив котра зберігає матрицю, і проміжні результати обчислень x[n]-змінна масив (одновимірний) котрий зберігає значення коренів рівняння Остаточно відлагоджений текст програми #include<stdio.h> #include<math.h> #include <iostream> void main(void) { int i,k,l,j; double a[4][5],x[4]; int n=4; int m=5; for(i=0;i<n;i++) { for(k=0;k<m;k++) { std::cout<<" a["<<i+1<<"."<<k+1<< "]= "; std::cin>>a[i][k]; } std::cout<<"\n"; } for(l=0;l<(n-1);l++){ for(j=l+1;j<(n+1);j++){ a[l][j]=-a[l][j]/a[l][l]; for(i=l+1;i<n;i++){ a[i][j]+=a[i][l]*a[l][j];}}}; x[n-1]=-(a[n-1][n]/a[n-1][n-1]); for(i=n-2;i>=0;i--) { x[i]=a[i][n]; for(k=i+1;k<n;k++) { x[i]+=a[i][k]*x[k];} } for(i=0;i<n;i++) std::cout<<"x["<<i+1<<"]="<<x[i]; std::cout<<" this is the end..."; std::cin>>a[i][k]; } Результати виконання програми  Висновок На цій лабораторній роботі я ознайомився з прямими методами розв’язування систем лінійних алгебраїчних рівнянь.
Антиботан аватар за замовчуванням

24.01.2013 00:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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