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

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

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

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

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

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

МІНІСТЕРСТВО ОСТВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" ІКТА кафедра БІТ  ЗВІТ Про виконання лабораторної роботи № 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:29

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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