Название: Метод Жордана Гаусса
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Добавлен 16:26:45 29 апреля 2010 Похожие работы
Просмотров: 131
Комментариев: 0
Оценило: 0 человек
Средний балл: 0
Оценка: неизвестно Скачать
Зміст
Вступ
1. Теоретична частина
1.1 Постановка задачі
1.2 Методи розв'язування
задачі
1.3 Алгоритм розв'язку
задачі
2. Практична частина
2.1 Архітектура програми
2.2 Опис програми
2.3 Контрольний приклад
та результат машинного експерименту
Висновок
Список використано
літератури
Додатки
Вступ
Центральним
поняттям програмування є, безперечно, поняття алгоритму. З нього починається
робота над програмою і від якості алгоритму залежить її успішне створення. Тому
вміння програмувати в значній мірі означає розробляти хороші алгоритми
застосовувати вже відомі.
На
сьогодні існує велика кількість різноманітних мов програмування, кожна з яких
має свої певні переваги та недоліки. В цьому розмаїтті не завжди легко зробити
свій вибір на користь якоїсь певної мови програмування.
Для
реалізації поставленої задачі вибрано середовище Turbo Pascal. Алгоритмічна
мова Паскаль була створена Н.Віртом на початку 70-х років. Завдяки зусиллям
розробників ця мова програмування стала потужним інструментом професійних
програмістів‚ не втративши простоти і ясності, властивих цій мові від
народження.
Розробник
системи Turbo Pascal - фірма Borland International виникла в 1984 році і за
порівняно короткий час неодноразово дивувала користувачів персональних ЕОМ
своїми Turbo системами. Було випущено кілька версій Turbo Pascal: 3.0‚ 4.0
5.0‚ 5.5‚ 6.0‚ 7.0‚ Pascal for Windows, Borland Pascal.
Головн
особливості середовища Turbo Pascal:
широкий
спектр типів даних‚ можливість обробки рядкових та структурних типів даних;
достатній
набір операторів управління розгалуженнями та циклами;
добре
розвинутий апарат підпрограм та зручні конструкції роботи з
файлами;
велик
можливості управління усіма ресурсами ПЕОМ;
різноманітн
варіанти стикування з мовою Асемблера;
підтримка
дей об'єктно-орієнтованого програмування (ООП).
Саме
з огляду на ці особливості програмна реалізація курсового проекту було
здійснено в середовищі Turbo Pascal.
Курсовий
проект складається зі вступу, двох розділів, висновків, списку використано
літератури, графічної частини та додатків. Текст пояснювальної записки набрано
та роздруковано з використанням текстового редактора Word. Графічна частина
виконана з допомогою графічного редактора Visio.
1. Теоретична частина
1.1
Постановка задачі
Нехай
дано систему п лінійних алгебраїчних рівнянь з п змінними
(I=1.2…..n) (1)
Систему
(1) можна записати у вигляді одного матричного рівняння
AX=B,
(2)
де

матриця
коефіцієнтів (індекс і вказує рівняння, якому
належить коефіцієнт, а індекс j – змінну, при якій він стоїть),
,
відповідно
стовпець вільних членів і стовпець змінних.
Упорядкована
сукупність п чисел , яка, будучи підставленою в
систему (1) замість , перетворює всі рівняння в
правильні числові рівності, називається розв’язком системи (1)
 
Методи
розв’язування систем лінійних рівнянь можна поділити на дві групи: точні й
тераційні.
Точними
називають такі методи, які дають змогу знайти точний розв’язок системи (1) за
допомогою виконання скінченої кількості арифметичних операцій у припущенні, що
всі обчислення виконуються точно (без округлень), а коефіцієнти системи
вільні члени – точні числа. Але на практиці всі обчислення виконуються з
обмеженою кількістю десяткових розрядів, а ірраціональні коефіцієнти і вільн
члени, якщо такі є, замінюються раціональними числами. Тому в процес
обчислення вдаються до округлень, а це означає, що розв’язки, які обчислюються
за точними методами, фактично є наближеними числами з певними похибками
(похибками округлень). До точних належать метод Гаусса, метод квадратних
коренів, правило Крамера, сюди ж належить метод Жордана-Гаусса.
Інтераційними
називають такі методи, які дають змогу знайти наближений розв’язок системи (1)
з заздалегідь вказаною точністю шляхом виконання скінченої кількост
арифметичних операцій, хоч самі обчислення можуть проводитись і без округлень,
а коефіцієнти і вільні члени системи бути точними числами.
У
процесі вивчення різних питань економіки, природознавства, техніки тощо
доводиться розв’язувати системи алгебраїчних рівнянь. Зокрема, до таких систем
зводиться чисельне розв’язування лінійних, диференціальних та інтегральних
рівнянь. У таких системає коефіцієнти і вільні члени рівнянь – числа наближені.
А це веде до появи додаткових (так званих неусуваних) похибок.
Якщо
систему рівнянь у пам’яті машини записати навіть точно, то в процес
розв’язування ЕОМ обов’язково виникнуть похибки округлень, які не можуть не
вплинути на точність розв’язку. Проте, якщо матриця А системи (2) майже
вираджена то можна сподіватися, що малі зміни в коефіцієнтах і (або) вільних
членах також призведуть до значних змін у її розв’язку.
Якщо
малі збурення коефіцієнтів і (або) вільних членів системи (1) дуже збурюють
розв’язок, то таку систему рівнянь називають погано обумовленою. Наприклад,
якщо малі збурення коефіцієнтів і (або) вільних членів системи (1) мало
збурюють її розв’язок, то таку систему називають добре обумовленою. Прикладом
погано обумовленої є, наприклад, система вигляду:
(3)
розв’язком
якої є пара (1;0). Якщо число 6,1 у правій частині першого рівняння системи (3)
змінити на 0,02, то система

матиме
розв’язком пару (5,1;-7,35). Отже, мале збурення (меньше 0,33%) одного з
вільних членів системи (3) зовсім змінило розв’язок системи.
На
щастя, на практиці системи рівнянь, погано обумовлені, зустрічаються дуже рідко.
1.2 Методи розв’язування задачі
Метод
Жордана-Гаусса був розроблений двома вченими Жорданом та Гаусом (ві яких
пішла назва методу). Цей метод вони помітили після довгої практики роботи з
системами рівнянь. Це можна пояснити складністю розв’язку цим методом.
Суть
методу заключається в тому, щоб послідовно вилучати один, за одним стовпц
елементів квадратної матриці, які стоять біля відповідних невідомих. Це
вилучення повинно відбуватися за посередництвом деякого елемента входящого у
вилучаючий стовпець. Цей основний елемент, відповідно зв’язує вилучаючий
стовпець з деяким рядком системи.
При
кожному вилученні стовпців необхідно проводити такі зміни в системі, щоб в
кінцевому рузультаті число, яке опиняється в деякому рядку відповідало
невідомій вилученого стовпця, зв’язаного один раз з даним рядком через основний
елемент.
Проводити
ці зміни в системі вдається за формулою обчислення двомірного визначника

шляхом
вибору із системи певних елементів для обчислення визначника. Кількість
обчислень таких визначників при розв’язуванні певної системи дорівнює:

де n
розмірність квадратної матриці (або кількість невідомих квадратної матриці).
1.3
Алгоритм розв’язку задачі
Розглянемо
систему m лінійних рівнянь з n невідомими. Для методу Жордана-Гауса її зручно
зобразити у вигляді такої таблиці:
|

|

|
… |

|
… |

|

|

|

|

|
… |

|
… |

|

|

|

|

|
… |

|
… |

|

|
… |
… |
… |
… |
… |
… |
… |
… |

|

|

|
… |

|
… |

|

|

|

|

|
… |

|
… |

|

|
Нехай
потрібно виразити змінну з і-го рфвняння системи, а потім
потрібно підставити отриманий вираз в усі інші рівняння системи. Таке
перетворення системи називають кроком Жорданових виключень з основним елементом
.
Так
перетворення зручно виконувати користуючись таблицею (1), яка перейде в іншц
таблицю за слідуючими правилами:
Ус
вільні елементи реально заданої системи лінійних алгебраїчних рівнянь, тобто
стовпець замінюють
на протилежні;
Основний
елемент замінюють
на одиницю. Над основним стовпчиком записують , а біля рядка ;
Інш
елементи основного стовпчика j залишають без змін;
Інш
елементи основного рядка і-го змінюють лише свої знаки;
Елементи,
які не належать розв’язуючому рядку або стовпчику обчислюють наступним чином.
Створюється двовимірний визначник, який складається з таких елементів
попередньої таблиці:
а)
елемента з цими ж індексами, що й в обчислювальному елементі;
б)
основний елемент;
в)
елемент, який є спільним для стовпця з елементом (а) і стовпця з елементом (б);
г)
елемент, який є спільним для стовпця з елементом (б) і рядка з елементом (а).
Шуканий
елемент обчислюється як добуток елементів (а) та (б) мінус добуток залишившихся
елементів визначника.
Цю
дію можна зобразити у вигляді формули:

Вс
елементинової таблиці ділять на елемент . Тим самим створюють ще одну
таблицю, але вже без стовпця з елементом , а рядок з елементом позначають так,
як позначили вилучений стовпець.
Виконавши
всі описані операції новостворена таблиця матиме вигляд:
|

|

|
… |

|

|

|

|

|
… |

|

|

|

|

|
… |

|

|
… |
… |
… |
… |
… |
… |

|

|

|
… |

|

|
… |
… |
… |
… |
… |
… |

|

|

|
… |

|

|
Шукаючи
невідомі системи
лінійних алгебраїчних рівнянь продовжують виконувати операції 2...6, причому
основним елементом вже не можна вибрати елемент jI рядка, в якому вже був при
попередніх Жорданових виключеннях використаний елемент. Операції 2...6
продовжують мати, поки усі позначення рядків не будуть замінені позначеннями
стовпців, тобто поки всі стовпці крім -го не будуть вилучені.
Шуканими
елементами будуть елементи, які залишаться після всіх обчислень в рядках
навпроти нових позначень даних рядків. Оскільки нові позначення рядків
відповідають відповідним невідомим та елементи навпроти, будуть відповідати
розв’язкам заданої системи. З обчислення випливає, що шукані невідом
опиняються в стовпці під позначенням стовпця вільних елементів.
З
даного методу обчислення помітно, що для розв’язку система повинна мати
одинакову кількість рядків і невідомих, бо в протилежному випадку невідомі буде
важко чи навіть неможливо знайти (коли невідових більше чим рядків) даним
методом.
Розв’язуючи
систему вручну методом Жордана-Гауса, основним елементом зручно вибирати число
на яке найменьше ділити і, зрозуміло, що неможливо вибирати 0. для полегшення
розв’язку при обчисленні кожен рядок зокрема можна скорочувати.
Оскільки
комп’ютер не має логічного мислення, то йому важко задати вибирати зручніший
елемент. Тому йому в програмі можна задати, щоб він вибрав перший можливий
елемент для основного елемента.
2. Практична частина
2.1
Архітектура програми
Реалізацію
обчислення систем лінійних рівнянь з однаковою кількістю стовпців і невідомих
методом Жордана-Гауса здійснює програма Kursova.pas.
Запустити
дану програму можна наступними способами:
з
головного меню середовища Turbo Pascal шляхом вибору опції Run/Run (спочатку
програму потрібно завантажити в оперативну пам’ять);
з
середовища Turbo Pascal нажиманням комбінації клавіш Ctrl F9;
з
середовища операційної оболонки Norton Commander шляхом запуску прграми
Kursova.exe (попередньо програма повинна бути відкомпільована з опцією
Destination to memory).
Програма
Kursova.pas є продурноорієнтованою. До неї входять 7 наступних процедур:
ramka;
windo;
wikno;
wind;
vvidn;
obchuslennya.
Зробимо
опис названих процедур:
Процедура
Ramka призначена для виводу рамки в кожному, описаному у наступних процедурах
вікні процедура виводить рамку у вигляді двох ліній. Біля верхнього лівого краю
на верхній грані процедура виводить на екран 3 символи “[<]”. Процедура
виконується для кращого оформлення вікна. Виклик цієї процедури здійснюється із
наступних процедур.
Процедура
Windo призначена для загального оформлення використовуваних у програмі вікон.
Вона викликається із наступних процедур разом із вхідними, для даної процедури
даними. Вхідні дані задають розміри виводжуваного вікна, основний та даний
кольори, а також назву вікна.
Процедура
Wikno. Призначення – виводить на екранвікно меню даної програми, та вікно опису
даних про автора програми та дату створення даної програми. У вікні “Меню
процедура виводить на екран запрошення для натискання однієї із чотирьох клавіш
F1-F4 та ESC відповідно при натисканні яких програма виводить вікно вводу
розмірності матриці, вікно вводу елементів, вікно виводу результатів та
здійснює вихід із програми. Процедура Wikno використовується процедурою Wind та
з головного блоку програми.
Процедура
Wind. Використовується для виводу на екран робочих вікон та вікон опису
програми. Параметри виводу робочих вікон задаються при кожному виклику ц
процедури, параметри вікон опису програми є стандартними і описані вони у
процедурі Wikno, яка викликається процедурою Wind. Розміри робочих вікон
виводяться залежно від кількості вхідних чи вихідних даних. Процедура
виконується при вводі розмірності системи, вводу елементів, та виводу
результатів.
Процедура
Widn викликається при натисканні клавіші F1. Вона виводить вікно вводу
розмірності квідратної системи лінійних рівнянь. В разі введення розмірност
більше 20-ти програма виведе повідомлення “Розмірність повинна бути не більше
20-ти”. Це означає, що дана програма не розв’яже систему з кількістю невідомих
більше 20.
Процедура
Vvid призначена для вводу елементів системи та її вільних елементів. Процедура
виводить на екран вікно з розмірами, які залежать від кількості вводжуваних
даних. Коли потрібно розв’язати систему з кількістю невідомих більше 4,
виводиться вікно на 20 ввідних елементів (стільки ж скільки містить всіх елементів
4-х мірна система рівнянь). При заповненні вікна здійснюється перехід до
наступного ж які попереднє вікно і так доти поки не будуть введені вс
елементи. Дана процедура викликається із головного блоку програми при
натисканні клавіші F2.
Процедура
Obchuslennya обчислює невідомі на основі остатньо введених даних. Обчислення
виконуються за методом Жордана-Гауса. Невідомі виводяться у спеціальному вікні,
розміри якого розраховуються так, щоб помістились всі невідомі. Всі результати
виводяться послідовно в стовпчику зверху вниз з такою ж послідовністю як
розміщені невідомі в кожному рядку розвязуючої системи в напрямку зліва на
право. У випадку, коли обчислювана система рівнянь не має розв’язків програма
виводить вікно “Повідомлення” з повідомленням “Система не має розв’язків”.
Головний
блок програми, при входженні в програму, виводить на екран вікно “Меню” із
запрошенням натиснути одну з 4-х клавіш: F1, F2, F3, Esc та вікно “Про автора”.
Для загального опису даних про створення пргграми. В подальшій роботі крім цих
вікон на екран виводяться вікна, які залежать від поточної роботи з програмою.
При
натисканні однієї з 4-х даних клавіш активізується відповідна процедура. При
натисканні клавіші ESC закінчується роюота програми і здійснюється повернення в
середовище системи програмування Turbo Pascal.
2.2 Опис програми
На
початку програми міститься вступний коментар до програми. Інші оператори мають
наступне призначення:
Заголовок
програми
Підключення
зовнішнього модуля управління дисплеєм (Crt)
Опис
константи (m), якій присвоюється число 21, для обмеження розмірност
обчислювальних рівнянь
Надання
змінній m_1 типу двомірного масиву дійсних чисел з обмеженням m*m
Надання
змінній m_2 типу одномірного масиву дійсних чисел з обмеженням m
Надання
змінній m_3типу одномірного масиву цілих чисел з обмеженням m
Опис,
використаної у головному блоці програми мітки m1
008
- 011 Опис використовуваних у програмі масивів та змінних
Заголовок
процедури Ramka
Початок
процедури
Перехід
у позицію з координатами (х1, y1) і вивід у цих позиціях символа “&%239556;”, як
верхнього лівого кута рамки
Цикл
виводу символів “&%239552;”, для обмеження рамки зверху
Вивід
символа “&%239559;”, як верхнього правого кута рамки
017
- 020 Цикл виводу символа “&%239553;” для обмеження рамки з боків
Прехід
у позицію з координатами (x1,y2) і вивід символа “&%239562;” (нижній лівий кут
рамки)
Цикл
виводу символа “&%239552;”для обмеження рамки знизу
Вивід
символа “&%239565;” (правого нижнього кутка рамки)
Вивід
у позицію (x1 3,y1) символів “[<]”
Закінчення
процедури Ramka
Заголовок
процедури Windo та опис вхідних даних
Початок
процедури
028
- 029 Встановлення основного та фонного кольору
Опис
вікна з параметрами, які задаються при виклику процедури Windo
Очистка
екрану
Виклик
процедури Ramka із вхідними для неї розмірами:2,1,x2-x1,y2-y1 1
033
- 034 Опис виводу на верхній грані рамки аосередині назви вікна
Закінчення
процедури
Заголовок
процедури Wikno
Початок
процедури
Задання
кольору фону та основного кольору
039
- 042 Цикл виводу по всій величині екрану пропусків
043
- 047 Виклик процедури Windo із заданнням назви вікна “Меню” та вихід у вікн
головного меню
048
053 Виклик процедури Windo із заданням інших координат виводячого вікна та
задання назви вікна “Про автора” а також вивід у цьому вікні відомостей про
автора
Кінець
прцедури Vikno
Заголовок
процедури Wind та опис вхідних даних
Початок
процедури
Виклик
процедури Vikno
Виклик
процедури Windo
Закінчення
процедури Wind
Заголовок
процедури Vvidn
Початок
процедури
Виклик
процедури Wind із заданням назви виводячого вікна “Ввід розмірності квадратно
матриці”.
063
- 064 Ввід розмірності
065
- 069 Перевірка умови чи часом не введена розмірність більша за 20, якщо так
то виводиться на екран повідомлення “Розмірність повинна бути не більшою за 20”
Кінець
процедури Vvidn
Заголовок
процедури Vid
Опис
використаної у процедурі Vvidn мітки (m8)
Початок
процедури
Присвоєння
змінній k введеної розмірності системи
075
- 076 Перевірка умови чи k>4 якщо так то змінній k присвоюється 4, що буде
використане для обмеження розмірності вікна.
077
- 079 Присвоєння змінній позиціонування курсора та змінній організац
початкових значень циклів початкового значення j
080
Виклик процедури Window із вхідними параметрами та назвою виводячого вікна
Ввід елементів”
081
- 082 Початок циклів нумерації ввідних елементів
083
- 086 Перехід у позицію з координатами (3,t 1) та вивід на екран “Елемент
а[i,j]=” або “вільний елемент [i,j]=” залежно від поточного вводу елемента та
очікування вводу цього елемента
087
Перевірка умови чи вікно вводу повністю заповнене, якщо так то початок
складного оператора
088
089 Присвоєння змінній позиціонування курсора та змінній початку циклу по
рядках відповідно значень 1 і значення початкового номера рядка
090
094 Перевірка чи остатньовведене число є елементом чи вільним членом. Якщо
елементом, то змінній початку циклу по стовпцях присвоюється номер наступного
стовпця. Якщо вільний елемент то змінній h стає одиницею, змінна початку циклу
по рядкає дорівнює номеру наступного стовпця, якщо вільний елемент то змінна h
стає одиницею.
095
Очистка заповненого елементами вікна.
096 Передача
на мітку M8
097 Закінчення
складного оператора
098-102
Перевірка чи в поточне вікно ще вмітиться наступний елемент: якщо так, то
змінна переміщування курсора збільшується на одиницю, а змінній h і z
присвоюється початкове значення один.
103 Закінчення
циклу вводу елементів
104 Закінчення
процедури Vvid
105 Заголовок
процедури Obchuslennia
106 Опис
використаних у процедурі міток
107 Початок
процедури
108 Присвоєння
змінній j номера стовпця вільних елементів
109-110
Цикл заміни вільних елементів на протилежні
111-112
Обнуління змінної t, яка буде використовуватись для обчислення в цикл
кількості виконуваних стовпців та присвоєння змінній e розмірності розв’язуючо
системи
113-114
Цикл обнуління масиву E, який буде використовуватись для запам’ятовування
кількості зсувів вліво кожного стовпця після кожного наступного викидування
стопця.
115 Початок
циклу обчислення невідомих
116 Обнуління
змінної I
117-118
Перевірка чи I дорівнює кількості рядків системи. Якщо так то перехід на мітку.
119 Присвоєння
нуля змінні j
120-123
Перевірка чи з даного перевіряючогорядка, вже був використаний елемент для
основного елемента чи ні. Якщо так, то перехід на мітку m4
124 Надання
змінній j нульового значення
125 Збільшення
змінної j на одиницю
126 Перевірка
умови: чи дійшли до останнього рядка, чи перевіряючий елемент стоїть перед
вільним елементом даного рядка і чи даний елемент дорівнює нулю. Якщо все так
то перехід на мітку m6
127 Перевірка
умов: чи перевіряючий елемент є передостатнім в рядку I чи наний елемент
дорівнює нулю, якщо так то перехід на мітку m2
128-132
Якщо перевіряючий елемент дорівнює нулю то перехід на мітку m5
запам’ятовування індексів даного перевіряю чого елементу
133 Присвоєння
змінній k остатнього перевіряю чого елементу
134-135
Початок циклів по стовпцю і рядку для обчислення елементів залишившиїся системи
після попередніх обчислень.
136-137
Перевірка умови: чи обчислювальний елемент не стоїть в рядку або стовпці до
якого належить основний елемент. Якщо умова виконується то поточний елемент
обчислюється за правилом обчислення двомірного визначника і результат
запам’ятовується в інший масив
138-139
Якщо обчислювальний елемент стоїть в рядку де є останьо обраний основний
елемент але не є основним елементом то обчислювальний елемент запам’ятовується
в масив В з протилежним знаком
140 Закінчення
циклу обчислення елементів
141-142
Початок циклу по викиданню стовпця з основним елементом
143-144
Якщо індекс стовпця менший за цей же індекс останнього елемента то в масив А
буде записане число, яке одержується шляхом ділення елемента з масиву В з цими
ж індексами на основний елемент
145-148
якщо індекс стовпця більший або рівний цьому ж індексу основного елемента то в
масив А запам’ятовується число отримане шляхом ділення наступного елемента
поточного рядка з масиву В на основний елемент
149 Закінчення
циклу викидання стовпця
150 Збільшення
змінної t на одиницю
151 Запам’ятовування
в масив С з яких рядків уже були використані елементи для основного елемента
152 Запам’ятовування
в масив D навпроти кожного рядка остаточний результат якій змінній ма
відповідати
153-158
Цикл запам’ятовування кількості зсувів вліво після кожного наступного
викидування стовпця
159 Зменшення
змінної z на одиницю
160 закінчення
циклу обчислення невідомих
161 присвоєння
змінній z одиниці
162-165
Цикл впорядкування результатів
166 Присвоєння
змінній t нуля
167 Виклик
процедури Wind і надання розмірів та заголовку вікна, яке виводиться цією
процедурою
168-171
Цикл виводу результатів
172 Перехід
на мітку m7
173 Виклик
процедури Wind і задання заголовку
174 Перехід
у позицію (10,3) і вивід повідомлення “Система немає розв’язку”
175 Очікування
натискання клавіші на клавіатурі
176 Закінчення
процедури Obchusennja
177 Початок
головного блоку програми
178 Виклик
процедури Vikno
179 Очікування
натискання однієї з ф-них клавіш: F1, F2, F3 або ESC
180 Заголовок
оператора вибору, який аналізує код натиснутої клавіші
181 Якщо
нажато клавішу F1 то здійснюється виклик процедури Widn
182 Якщо
нажато клавішу F2, викликається процедура Vvid
183 Якщо
нажато клавішу F3 виклик процедури Obchuslenja
184 Кли
нажато ESC – вихід з програми
185 Закінчення
оператору вибору
186 Прехід
на мітку m1
187
Кінець програми
2.3 Контрольний приклад
та результат машинного експерименту
Найбільш
відповідальною, найбільш трудомісткою і з найбільшими витратами часу
випробовування (створення програм та усунення помилок. Не можна бути впевненим,
що програма працює правильно коли вона виводить якісь результати. Найчастіше ц
результати перші) бувають помилковими. Це означає, що багато помилок. Тому для
перевірки правильності програми необхідно розробити тестові дані з наперед
визначеними (обчисленими) результатами. Тестові дані повинні бути розроблен
так, щоб перевірити всі оператори програми без виключення.
Для
перевірки на правильність даної програми розроблені наступні тести:
Тест
1.
Система
з трьома невідомими

Результати:

Порівнявши
результати обчислені вручну до тестових даних і результати обчислені за
допомогою програми Kursova.pas, фкі подані у додатку бачимо що все співпадає, тому
можна стверджувати, що програма дає правильні результати і саме не містить
помилок. Однак остаточним висновок про правильність програми можна зробити
тільки після тривалої експлуатації.
Висновок
Розв’язування
математичних задач за допомогою персональних комп’ютерів має велике значення,
оскільки кожен розв’язок є оперативним та точним. Обчислюючи математичну задачу
за допомогою сучасного комп’ютера, зрозуміло, що ймовірність помилкового
введення даних в пам’ять ПК є набагато більшою чим ймовірність помилкового
обчислення комп’ютером, чим тут практично можна знехтувати. Тоді що вже можна
говорити про порівняня ручного обчислення і машинного. Тому надзвичайно важливо
самостійно складати програми для виникаючих задач, які потрібно часто рішати.
Звичайно головним в написанні програми є правильність її складання, оскільки
правильність результатів обчислення найперш залежить від правильності програми.
В
даній курсовій роботі складено програму по обчисленню різних систем рівнянь з
квадратною матрицею. Дану програму розроблено в середовищі Turbo Pascal. Ї
налагоджено з використанням різноманітних тестових даних. Прикладом для
перевірки роботоздатності програми було розроблено вручну тест. Результати
обчислення вручну та за допомогою комп’ютера повністю співпали. Тому можна
вважати цей програмний продукт готовим для практичного застосування.
Список використано
літератури
Turbo pascal(учебник) /
С.А. Немнюгин – СПБ: Издательство “Питер”, 2000.
М.Я. Ляшенко, М.С.
Головань. Чисельні методи. К.:”Либідь”, 1996 – 285 с.
Математика для техникумов
Алгебра и начала анализа.
Додаток
1
(***********************************************************)
(* програма
по розвязуванню *)
(* систем
лiнiйних рiвнянь *)
(* методом
Жордана-Гауса,написана до курсового проекту. *)
(* Програму
склав Добромильський Iван *)
(************************************************************)
001
program metod_Zhordana_Hausa;
002
uses crt;
003
const m!;
004
type m_1=array[1..m,1..m] of real;
005
m_2=array[1..m] of real;
006
m_3=array[1..m] of integer;
007
label m1;
008
var A,B:m_1; X:m_2; C,D,E:m_3;
009
R:real;
010
i,j,k,t,l,z,h,n,p:integer;
011
s:char;
(* Процедура
виводу рамки *)
012
procedure ramka(x1,y1,x2,y2:integer);
013
begin
014
gotoxy(x1,y1);write('Й');
015
for i:=1 to x2-x1-1 do write('Н');
016
write('»');
017
for i:=1 to y2-y1-1 do begin
018
gotoxy(x2,y1 i);write('є');
019
gotoxy(x1,y1 i);write('є');
020
end;
021
gotoxy(x1,y2);write('И');
022
for i:=1 to x2-x1-1 do write('Н');
023
write('ј');
024
gotoxy(x1 3,y1);write('[ю]');
025
end;
(* Процедура
опису вiкна *)
026
procedure windo(x1,y1,x2,y2:integer;Nazva:string);
027
begin
028
TextColor(15);
029
TextBackGround(1);
030
Window(x1,y1,x2,y2);
031
clrscr;
032
ramka(2,1,x2-x1,y2-y1 1);
033
l:=x2-x1 1-length(nazva);
034
gotoxy((l div 2) 3,1);write(Nazva);
035
end;
(* Процедура
виводу загального опису *)
036
procedure vikno;
037
begin
038
TextBackGround(15);TextColor(1);
039
for i:=1 to 80 do
040
for j:=1 to 25 do begin
041
gotoxy(i,j);write(' ');
042
end;
043
windo(50,2,75,7,' Меню ');
044
gotoxy(3,2);write('F1-Ввiд розмiрностi');
045
gotoxy(3,3);write('F2-Ввiд даних');
046
gotoxy(3,4);write('F3-Вивiд результатiв');
047
gotoxy(3,5);write('ESC-Вихiд');
048
windo(50,10,78,16,' Про автора ');
049
gotoxy(3,2);write('Програма курсово» роботи.');
050
gotoxy(3,3);write('Складена студентом групи');
051
gotoxy(3,4);write('39-П Добромильським I.');
052
gotoxy(3,5);write('Дата складення програми');
053
gotoxy(3,6);write('травень 2003р');
054
end;
(* Процедура
виводу вiкна *)
055
procedure wind(x1,y1,x2,y2:integer;Nazva:string);
056
begin
057
vikno;
058
windo(x1,y1,x2,y2,nazva);
059
end;
(* Пороцедуга
вводу розмiрностi квадратно» матрицi *)
060
procedure vvidn;
061
begin
062
wind(2,2,47,5,'=Ввiд розмiрностi квадратно» матрицi');
063
gotoxy(3,2); write('n=');
064
readln(n);
065
if n>=m then begin
066
wind(2,2,40,6,'Повiдомлeння');
067
gotoxy(4,3);writeln('Розмiрнiсть повинна не бiльша ',m-1,'');
068
S:= readkey;
069
end;
070
end;
(* Процедура
вводу елементiв *)
071
procedure vvid;
072
label m8;
073
begin
074
k:=n;
075
if k>4 then
076
k:=4;
077
t:=1;
078
z:=1;
079
h:=1;
080
m8:wind(2,2,35,k*k k 3,'Ввiд елементiв');
081
for i:=z to n do
082
for j:=h to n 1 do begin
082
gotoxy(3,t 1);
084
if j<=n then write ('Елемент a[',i,j,']=')
085
else write ('Вiльний елемент a[',i,j,']=');
086
readln(A[i,j]);
087
if t>19 then begin
088
t:=1;
089
z:=i;
090
if j<(n 1) then h:=j 1
091
else begin
092
z:=i 1;
193
h:=1;
194
end;
195
clrscr;
196
goto m8;
197
end;
198
if t<_ then begin
199
t:=t 1;
100
z:=1;
101
h:=1;
102
end;
103
end;
104
end;
(* Процедура
обчислення невiдомих *)
105
procedure obchuslennja;
106
label m2,m3,m4,m5,m6,m7;
107
begin
108
j:=n 1;
109
for i:=1 to n do
110
A[i,j]:=-A[i,j];
111
t:=0;
112
l:=n;
113
for i:=1 to l 1 do
114
E[i]:=0;
115
for p:=1 to n do begin
116
i:=0;
117
m2:if i=n then goto m6
118
else i:=i 1;
119
j:=0;
120
m3:if j=t then goto m4
121
else j:=j 1;
122
if i=C[j] then goto m2
123
else goto m3;
124
m4:j:=0;
125
m5:j:=j 1;
126
if(i=n)and(j=l)and(A[i,j]=0) then goto m6;
127
if (j=l)and(A[i,j]=0) then goto m2;
128
if A[i,j]=0 then goto m5
129
else begin
130
k:=i;
131
h:=j;
132
end;
133
R:=A[k,h];
134
for i:=1 to n do
135
for j:=1 to l 1 do begin
136
if(i<>k)and(j<>h) then
137
B[i,j]:=R*A[i,j]-A[i,h]*A[k,j];
138
if (i=k)and(j<>h) then
139
B[i,j]:=-A[i,j];
140
End;
141
for i:=1 to n do
142
for j:=1 to l do begin
143
if j<h then
144
A[i,j]:=B[i,j]/R;
145
if j>=h then begin
146
z:=j 1;
147
A[i,j]:=B[i,z]/R;
148
end;
149
end;
150
t:=t 1;
151
C[t]:=k;
152
D[k]:=E[h] h;
153
for i:=1 to l 1 do begin
154
if i>h then begin
155
z:=i-1;
156
E[z]:=E[i] 1;
157
end;
158
end;
159
l:=l-1;
160
END;
161
z:=1;
162
for i:=1 to n do begin
163
j:=D[i];
164
X[i]:=A[j,z];
165
end;
166
t:=0;
167
wind(2,2,45,n 3,'Результати');
168
for i:=1 to n do begin
169
gotoxy(5,i 1);writeln('x[',i,']=',X[i]:8:3);
170
t:=t 1;
171
end;
172
goto m7;
173
m6:wind(2,2,45,6,'Повiдомлення');
174
gotoxy(10,3); write('Система не ма№ розвязкiв');
175
m7: s:=readkey;
176
end;
(*
Головний блок програми *)
177
BEGIN
178
m1:vikno;
179
s:=readkey;
180
case s of
181
%2359:vvidn;
182
%2360:vvid;
183
%2361: obchuslennja;
184
%2327:halt;
185
end;
186
goto m1;
187
END.
Додаток
4
Екранна
форма виводу результатів обчислення
|
|
|
|
|
Результати
Скачать Курсовая работа: Метод Жордана ГауссаКурсовая работа: Метод Жордана Гаусса"> Скачать Курсовая работа: Метод Жордана Гаусса одним архивом
|
Просмотров: 479 |
Добавил: kroker77
| Рейтинг: 0.0/0 |
|
|
|