ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ

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

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

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

Рік:
2010
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Комп’ютерні методи дослідження систем керування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТА кафедра „КОМП’ЮТЕРИЗОВАНІ СИСТЕМИ, АВТОМАТИКА І УПРАВЛІННЯ” ЗВІТ до лабораторної роботи № 2 З КУРСУ “Комп’ютерні методи дослідження систем керування” на тему: „ ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ ” Варіант № 3 Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць. Вхідні дані:  Система №1  де ; ; порядковому № завдання; № групи (наприклад, для КС-21 )   Метод Гауса з вибором головного елемента У методі Гауса при обчисленні елементів матриці  вимагається ділення на головні елементи , , … , . Якщо ж один з головних елементів рівний нулю, то схему єдиного ділення не можливо реалізувати. І навіть, коли усі головні елементи відмінні від нуля, але серед них є близькі до нуля, то тоді похибки суттєво зростають і не є контрольованими. Метод Гауса з вибором головного елемента по рядку. При пошуку головного елемента по рядку місцями міняються не рівняння системи (1.1), як при пошуку по стовпцю, а невідомі  у всіх рівняннях. Наприклад, на першому кроці методу Гауса серед коефіцієнтів  знайдемо максимальний по абсолютному значенню коефіцієнт. Нехай це буде коефіцієнт . Перепишемо систему, переставивши місцями  та  у всіх рівняннях: . (3.3) Від перестановки місцями доданків у рівняннях розв’язок системи не зміниться. На наступному кроці методу Гауса знаходимо максимальний коефіцієнт серед  та знову здійснюємо заміну, і т.д. Після завершення зворотного ходу методу Гауса необхідно знову виконати перестановку , тобто впорядкувати елементи вектора  у тому порядку, який був на самому початку. Загальний алгоритм методу Гауса з вибором головного елемента по рядку для   для    для  рядкові сортування  для   для  ;    Прямий хід: рядкові сортування ,  для  якщо   {; } ; ;  для  якщо  {; ; } інакше {; ; }    для     Оберне-ний хід: для  якщо    Впорядку-вання  Опис алгоритму Задаємо початкові значення вектора . Цей вектор містить інформацію про переміщення невідомих  під час вибору головних елементів. Прямий хід методу. Резервуємо (копіюємо) базові матриці  та  у відповідні матриці  та . Вхідні матриці  та  нам необхідні для кінцевої перевірки результату. Протягом виконання алгоритму ми працюємо з копіями вхідних матриць. Далі в трьох циклах виконується перетворення початкової матриці  до трикутного вигляду матриці  та відповідне перетворення правих частин системи . Зазначимо, що на кожному кроці першого циклу по змінній  виконуємо процедуру рядкового сортування по головним елементам. Тобто, відшукуємо максимальне значення по модулю головного елемента, а потім міняємо місцями стовпці в матрицях  та  (копії матриць  та ). Змінна  визначає номер рядка головного елемента, змінна  використовується як проміжна змінна при заміні значень у елементах матриць  та , а  як проміжна змінна при заміні значень елементів вектора . Обернений хід. Спершу присвоюємо значення для останнього невідомого , а потім в циклі відшукуємо усі решта невідомі. На останньому етапі впорядковуємо значення вектора  у тому порядку, який був на самому початку. Для перевірки вірності роботи алгоритму підставляємо наші знайдені  в систему (1.1). Обчислені ліві частини рівнянь повинні відповідати правим значенням елементів вектора . Список змінних, які використовуються в коді програми, та їх пояснення: A[n][n] – матриця розмірністю 4*4; P[n], inx[n], V[n][n], X[n], Y[n], C[n][n], max, value, z ,p, k, s, b – змінні типу double; B[n] – стовпець вільних членів; l, f, h, w, i, j – змінні типу int; Блок-схема розробленої програми  Остаточна версія програми #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {} void __fastcall TForm1::Button1Click(TObject *Sender) { int n=4; double A[4][4]={{8.3,2.62+0.2*3,4.1,1.9},{3.92,8.45,7.78-0.2*3,2.46}, {3.77,7.21+0.2*3,8.04,2.28},{2.21,3.65-0.2*3,1.69,6.69}}; double B[4]={-10.65+0.02*21,12.21,15.45-0.02*21,-8.35}; double V[4][4],C[4][4],P[4],X[4],Y[4]; double max,value; int w,z,d; for (int i=0;i<n;i++) { P[i]=B[i]; for (int j=0;j<n;j++) { V[i][j]=A[i][j]; } } for (int k=0;k<n;k++) { max=abs(V[k][k]); w=k; for (int l=k+1;l<n;l++) { if (max<abs(V[k][l])) { max<abs(V[k][l]); w=l; } } z=X[k]; X[k]=X[w]; X[w]=z; for (int d=1;d<n;d++); { if (d<k) { value=C[d][k]; C[d][k]=C[d][w]; C[d][w]=value; } } Y[k]=P[k]/V[k][k]; for (int i=k+1;i<n;i++) {P[i]+=-V[i][k]*Y[k]; for (int j=k+1;j<n;j++) { C[k][j]=V[k][j]/V[k][k]; V[i][j]+=-V[i][k]*C[k][j]; }}} for (int i=0;i<n;i++) X[i]=0; X[n-1]=Y[n-1]; for(int i=n-2;i>=0;i--) {for (int j=i+1;j<n;j++) X[i]+=C[i][j]*X[j]; X[i]=Y[i]-X[i];} Memo1->Lines->Clear(); Memo1->Lines->Add("Rozvyazok systemy X[]"); for (int i=0; i<n; i++) Memo1->Lines->Add(X[i]); Memo1->Lines->Add(""); Memo1->Lines->Add("Perevirka vuvid B[]"); for (int i=0; i<n; i++) Memo1->Lines->Add(B[i]); Memo1->Lines->Add(""); Memo1->Lines->Add("Perevirka vuvid symu A[i][j]*X[j]"); for (int i=0; i<n; i++) Memo1->Lines->Add(A[i][0]*X[0]+A[i][1]*X[1]+A[i][2]*X[2]+A[i][3]*X[3]);} Результати виконання програми  Висновок На цій лабораторні роботі я написав програму для розв’язування систем лінійних алгебричних рівнянь Методом Гауса з вибором головного елемента по рядку.
Антиботан аватар за замовчуванням

28.01.2013 18:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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