|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Розробка програмного забезпечення для розв'язку СЛАР методом ГаусаРозробка програмного забезпечення для розв'язку СЛАР методом ГаусаРазмещено на http://www.allbest.ru/ Размещено на http://www.allbest.ru/ Зміст Вступ 1. Теоретична частина 1.1 Постановка задачі 1.2 Розв'язання системи лінійних рівнянь методом Гаусса1.3 Вхідна інформація1.4 Вихідна інформація2. Практична частина2.1 Архітектура програми2.2 Опис програми2.3 Контрольний прикладВисновокСписок використаної літературиДодаткиВступСлово «комп'ютер» означає «обчислювач», тобто пристрій для обчислень. Необхідність в автоматизації обробки даних, в тому числі обчислень, виникла дуже давно. Багато тисяч років назад для обчислень використовувались палочки, камінці і т. д. Більше 1500 років тому назад (а може і раніше) для полегшення обчислень почали використовувати рахівниці.В 1642 р. Блез Паскаль винайшов пристрій, який виконував додавання чисел, а в 1673 р. Готфрід Вільгельм Лейбніц сконструював арифмометр, який дозволив механічно виконувати чотири арифметичні дії. Починаючи з XIX ст. арифмометри набули широкого розповсюдження. На них виконували навіть дуже складні обчислення, наприклад розрахунки балістичних таблиць для алтилерійських стрільб. Існувала і спеціальна професія - рахівник - людина, яка працювала з арифмометром, швидко і точно виконувала певну послідовність інструкцій (таку послідовність інструкцій почали називати програмою). Але багато обчислень виконувались дуже повільно. Причина проста - при таких обчисленнях вибір виконуваних дій і записування результатів виконувалась людиною, а швидкість її роботи досить обмежена.В першій половині XIX ст. англійський математик Чарльз Беббідж намагався побудувати універсальний обчислювальний пристрій - Аналітичну машину, яка повинна була виконувати обчислення без участі людини. Для цього вона повинна була вміти виконувати програми, які вводилися з допомогою перфокарт (карт з цупкого паперу з інформацією, яка наносилася з допомогою дірок) і мати «склад» для запам'ятовування даних і проміжних результатів (пам'ять). Беббідж не зміг довести до кінця роботу по створенню Аналітичної машини - вона виявилася занадто складною для техніки того часу. Але він розробив всі основні ідеї, і в 1943 р. американець Говард Ейкен на основі техніки XX ст. - електромеханічних реле - зміг побудувати на одному з підприємств фірми IBM таку машину під назвою «Марк-1». Ще раніше ідеї Беббіджа були перевідкриті німецьким інженером Кондратом Цузе, який в 1941 р. побудував аналогічну машину.До цього часу необхідність в автоматизації обчислень стала настільки великою, що над створенням машин такого типу працювало кілька груп розробників. Починаючи з 1943 р. група спеціалістів під керівництвом Джона Мочлі і Преспера Ейкарта в США почала конструювати схожу машину на основі електронних ламп, а не на реле. Їхня машина ENIAC працювала в тисячу раз швидше, але для задання її програми необхідно було на протязі декількох годин або навіть декількох днів під'єднювати певним чином проводи. Щоб спростити процес задання програми, Мочлі і Ейкерт почали конструювати нову машину, яка могла б зберігати програму в своїй пам'яті. В 1945 р. до роботи був залучений знаменитий математик Джон фон Нейман, який підготував доповідь про цю машину. Доповідь була розіслана багатьом вченим і отримала широку популярність, оскільки в ній фон Нейман ясно і просто сформулював загальні принципи функціонування універсальних обчислювальних пристроїв, тобто комп'ютерів.Перший комп'ютер, який базувався на принципах фон Неймана, був побудований в 1949 р. англійцем Морісом Уілкінсом. З появою комп'ютерів виникла наука інформатика.Інформатика - комплексна наукова й інженерна дисципліна, що вивчає всі аспекти проектування, створення, оцінювання, функціонування комп'ютерних систем оброблення інформації, їх застосування і вплив на різні галузі соціальної практики.Термін «informatique» запроваджено у Франції в середині 60-х років XX ст., коли розпочалося широке використання обчислювальної техніки.Одним із базових понять інформатики й ОТ є поняття алгоритму як правила перетворення інформації. Алгоритм указує, які операції оброблення даних і в якій послідовності необхідно виконувати, щоб одержати розв'язок задачі.Алгоритм - точний припис, що визначає обчислювальний процес, який веде від початкових даних, що змінюються, до шуканого результату.З нього починається робота над програмою і від якості алгоритму залежить її успішне створення. Тому вміння програмувати в значній мірі означає розробляти хороші алгоритми і застосовувати вже відомі.На сьогодні існує велика кількість різноманітних мов програмування, кожна з яких має свої певні переваги і недоліки. В цьому розмаїтті не завжди легко зробити свій вибір на користь якоїсь певної мови програмування.Для реалізації поставленої задачі вибрано середовище Turbo Pascal. Алгоритмічна мова Pascal була створена Н. Віртом на початку 70-их років. Завдяки зусиллям розробників ця мова програмування стала потужним інструментом професійних програмістів, не втративши простоти і якості, властивих цій мові від народження.Розробник системи Turbo Pascal - фірма Borland International, яка виникла в 1984 році і за порівняно короткий час неодноразово дивувала користувачів персональних ЕОМ своїми Turbo- системами. Було випущено кілька версій Turbo Pascal: 3.0, 4.0, 5.0, 5.5, 6.0, 7.0 Pascal For Window, Borland Pascal.Головні особливості середовища Turbo Pascal:· широкий спектр типів даних, можливість обробки рядкових та структурних типів даних;· достатній набір операторів управління розгалуженнями та циклами;· добре розвинутий апарат підпрограм та зручні конструкції роботи з файлами;· великі можливості управління всіма ресурсами ПЕОМ;· різноманітні варіанти стикування з мовою Асемблера;· підтримка ідей об'єктно - орієнтованого програмування.Саме з огляду на ці особливості програмну реалізацію курсового проекту було здійснено в середовищі Turbo Pascal.1. Теоретична частина1.1 Постановка задачіСистеми лінійних рівнянь.Розв'язком деякої множини (системи) рівняньF1 (x1, x2, …, xn) = 0, …, Fm (x1, x2, …, xn) = 0з невідомими x1, x2, …, xn називається множина значень невідомих, які перетворюють одночасно всі рівняння системи в тотожності. Система рівнянь вважається розв'язаною, якщо знайдено всі такі значення невідомих або доведено, що не існує набору значень невідомих, які перетворювали б одночасно всі рівняння системи в тотожності. В останньому випадку кажуть, що система не має розв'язків або що вона несумісна.Систему рівнянь часом записують, об'єднуючи рівняння фігурною дужкою.Дві системи рівнянь вважають еквівалентними, якщо вони мають одну й ту саму множину розв'язків. (Дві несумісні системи за означенням вважаються еквівалентними.)Кажуть, що система рівнянь (S) еквівалентна двом системам рівнянь (S1) і (S2), якщо множина розв'язків системи (S) збігається з об'єднанням множин розв'язків систем (S1) і (S2).Властивості систем рівнянь:1) При заміні будь-якого рівняння системи еквівалентним рівнянням утворюється еквівалентна система.2) Якщо одне з рівнянь системи (S) еквівалентне деяким двом рівнянням, то початкова система (S) еквівалентна двом системам (S1) і (S2), в кожній з яких це рівняння замінене на одне з рівнянь еквівалентної сукупності, а решта залишена без змін.Системою s лінійних алгебраїчних рівнянь з n невідомими x1, x2, …, xn називається система виглядуa11x1 + a12x2 +…+ a1nxn = b1,a21x1 + a22x2 +…+ a2nxn = b2,. . . . . . . . . . . . . . . . . . . . . .as1x1 + as2x2 +…+ asnxn = bs.Величини a11, a12, …, a1n, a21, a22, …, a2n, …, as1, as2, …, asn називаються коефіцієнтами даної лінійної системи рівнянь. Індекси біля коефіцієнтів лінійної системи означають: перший індекс показує номер рівняння системи, другий індекс показує номер невідомого, при якому стоїть даний коефіцієнт. Так, наприклад, a25 - коефіцієнт, що стоїть у другому рівнянні системи при невідомому х5.Величини b1, b2, ..., bs називаються вільними членами першого, другого, ..., s-го рівнянь системи. Система рівнянь називається однорідною, якщо всі числа bj дорівнюють нулю (j=1, 2, 3, ..., s), і неоднорідною, якщо хоча б одне bj відмінне від нуля.Упорядкована множина n чисел k1, k2, k3, …, kn називається розв'язком системи, якщо при підстановці його в систему замість невідомих x1, x2, x3, …, xn усі рівняння системи перетворюються в тотожність. Система рівнянь називається сумісною, якщо вона має хоча б один розв'язок, і несумісною, якщо вона не має жодного розв'язку.Сумісна система лінійних рівнянь називається визначеною, якщо вона має єдиний розв'язок, тобто існує тільки один набір n чисел k1, k2, k3, …, kn, який перетворює всі рівняння системи в тотожності.Сумісна система лінійних рівнянь називається невизначеною, якщо розв'язків більше ніж один.Система однорідних рівнянь завжди має нульовий розв'язок:x1 = x2 = x3 = … = xn = 0Якщо система однорідних рівнянь має ненульовий розв'язок k1, k2, k3,..., kn (тобто хоча б одне з чисел ki (i = 1 ,2,…, n) відмінне від нуля), то така система має і незліченну множину розв'язків вигляду lk1, lk2, …, lkn, де l - будь-яке число.1.2 Розв'язання системи лінійних рівнянь методом ГауссаОдним з найпоширеніших методів розв'язування систем алгебраїчних рівнянь є метод послідовного виключення невідомих - метод Гаусса. Цей метод ґрунтується на деяких перетвореннях системи лінійних рівнянь, внаслідок яких дістанемо систему, еквівалентну початковій системі.Метод Гаусса ґрунтується на деяких перетвореннях системи лінійних рівнянь, внаслідок яких дістанемо систему, еквівалентну початковій системі. Алгоритм гауссових вилучень полягає у послідовному застосуванні до системи таких елементарних перетворень: 1) множення рівняння системи на число, відмінне від нуля; 2) додавання до одного рівняння іншого, помноженого на довільне число; 3) зміна місцями двох рівнянь в системі. Після елементарних перетворень система стає рівносильною. Якщо система лінійних рівнянь має вигляд a11x1 + a12x2 +…+ a1nxn = b1, a22x2 +…+ a2nxn = b2, ……………………………. annxn = bn, тобто матриця коефіцієнтів системи - верхня трикутна, то розв'язують її досить просто, послідовно виключаючи невідомі по черзі з останнього рівняння. Прямий перебіг методу Гаусса саме й дає змогу внаслідок елементарних перетворень замінити систему лінійних рівнянь загального вигляду еквівалентною системою з верхньою трикутною матрицею. Є багато реалізацій методу Гаусса з певними перевагами обчислення. Наприклад, у схемі з вибором головного елемента послідовність вилучення визначають під час обчислення. Схема єдиного ділення. Опишемо метод Гаусса для розв'язування системи лінійних рівнянь загального вигляду: a11x1 + a12x2 +…+ a1nxn = a1,n+1, a21x1 + a22x2 +…+ a2nxn = a2,n+1, ................................................... an1x1 + an2x2 +…+ annxn = an,n+1. Виберемо a110 як провідний елемент і поділимо на нього перше рівняння. Дістанемо x1 + a12x2+…+ a1nxn = a1,n+1, a1k= a1k a11, k=2,3,...,n. Вилучимо x1 з усіх рівнянь системи, крім першого. Для цього помножимо перетворене перше рівняння на -a21 і додамо його до другого. Аналогічно вилучаємо x1 з третього рівняння і т. ін. Помножимо перше рівняння на -an1 і додамо його до останньго, вилучимо x1 з n-го рівняння. На цьому перший крок гауссового вилучення завершено. Початкова система матиме еквівалентний вигляд: x1 + a12x2+…+ a1nxn = a1,n+1, a22x2+…+ a2nxn = a2,n+1, ........................................................... an2x2+…+ annxn = an,n+1. де aij= aij- ai1 a1j, j=2,3,...,n+1. На другому кроці, припустивши, що провідний елемент a220, вилучимо невідоме x2 з усіх рівнянь, починаючи з третього. Після скінченої кількості таких перетворень початкова система лінійних рівнянь матиме один з таких виглядів: а) б) У випадку а) система має єдиний розв'зок, який легко знайти шляхом послідовного вилучення невідомих, починаючи з xn, за формулами: pascal рівняння лінійний програма гаус Цей випадок можливий, коли всі рівняння системи лінійно незалежні, тобто визначник матриці коефіцієнтів біля невідомих не дорівнює нулю. Крім того, всі провідні елементи a11, a22, ..., ann також відмінні від нуля. Остання умова завжди виконуватиметься, якщо матриця системи має властивість діагонального перевантаження, тобто
або відмінні від нуля головні мінори матриці. У випадку б) система несумісна, коли хоча б одне з чисел сr+1,n+1,...,сn,n+1 не дорівнює нулю. Якщо всі елементи сr+1,n+1,..., сn,n+1 дорівнюють нулю, то система має нескінченну множину розв'язків. Невідомі xr+1,...,xn можуть набирати будь-яких значень, а з перших r рівнянь перетвореної системи подано послідовно xr,xr-1,...,x1 через вільні невідомі xr+1,...,xn. У цьому разі система має r лінійно незалежних рівнянь, а решта є їх наслідками. Схема єдиного ділення полягає у використанні однотипних дій, які легко програмувати на сучасних ЕОМ. Метод Гаусса надзвичайно ефективний також за кількістю арифметичних дій. Кількість множень і ділень у прямому перерізі методу має порядок O(n), де n - кількість рівнянь у системі. У зворотному перерізі цей порядок становить O(n). У загальному випадку коефіцієнти системи є дробові числа. Крім того, під час ділення на провідні елементи обмежуються скінченою кількістю десяткових знаків. Тому гауссові виключення неминуче супроводжує похибка заокруглення, яка може збільшуватися зі зростанням кількості рівнянь системи. Отже, метод Гаусса дає змогу знайти розв'язок системи з точністю до похибки заокруглення. 1.3 Вхідна інформація В програмі описаний тип mas1, який являється масивом дійсних чисел максимальної розмірності 50 на 51. Для введення коефіцієнтів при невідомих і вільних членів в програмі описано матрицю а. Розмірність цієї матриці має тип integer, але її значення обмежене програмою - залежить від кількості рівнянь. Елементи матриці мають такий тип, як і матриця, до якої вони належать.
1.4 Вихідна інформація В програмі описаний тип mas2. Цей тип являється одновимірним масивом дійсних чисел розмірності 50. Матриця x формується в результаті перетворень над матрицею а і обчислень всередині програми.
2. Практична частина 2.1 Архітектура програми Програма Gays призначена для обчислення системи лінійних рівнянь методом Гаусса. Програма складається з головної програми і шести процедур: Vvid Mriv Dil Nkoef Nevid Result Текст програми (Додаток ), блок-схеми всіх процедур і головної програми подані в додатках. Процедура vvid призначена для введення кількості рівнянь, коефіцієнтів при невідомих і вільних членів (Додаток ). Процедура mriv призначена для того, щоб поміняти провідне рівняння, якщо провідний коефіцієнт рівний нулю, на те, де ведучий коефіцієнт відмінний від нуля. Це рівняння автоматично стає ведучим (Додаток ). Процедура dil призначена для ділення коефіцієнтів провідного рівняння на провідний коефіцієнт (Додаток ). Процедура nkoef призначена для обчислення нових коефіцієнтів при невідомих (Додаток ). Процедура nevid призначена для обчислення невідомих шляхом арифметичних перетворень над зведеною до трикутної форми матрицею коефіцієнтів і вільних членів системи рівнянь(Додаток ). Процедура vuvid призначена для виводу на екран результатів виконання програми (Додаток ). Головна програма призначена для виклику процедур. Спочатку викликається процедура vvid. Процедури mriv, dil, nkoef викликаються в циклі, кількість повторень якого на одиницю менше від кількості рівнянь. На цьому прямий хід розв'язку системи лінійних рівнянь методом Гаусса закінчується. Після цього викликається процедура nevid, яка реалізує зворотній хід розв'язку системи - пошук невідомих (Додаток ). Останньою викликається процедура vuvid (Додаток ). 2.2 Опис програми {01} Назва програми; {02} підключення модуля crt; {03} службове слово для опису типів; {04} опис двовимірного масиву дійсних чисел mas1; {05} опис одновимірного масиву дійсних чисел mas2; {06} службове слово для опису змінних; {07} опис змінної a; {08} опис змінної x; {09} опис змінних b,c,d,r; {10} опис змінних i,j,n,k,m; {11} - {22} Процедура вводу коефіцієнтів і вільних членів {11} заголовок процедури, опис змінних; {12} початок процедури; {13} вивід повідомлення „введіть кількість рівнянь n=”; {14} оператор вводу кількості рівнянь; {15} вивід повідомлення „введіть коефіцієнти і вільні члени”; {16} оператор циклу; {17} оператор циклу; {18} командна дужка „begin”; {19} вивід повідомлення; {20} оператор вводу коефіцієнтів і вільних членів; {21} командна дужка „end”; {22} кінець процедури; {23} - {36} Процедура зміни рівнянь місцями {23} назва процедури, опис змінних; {24} початок процедури; {25} перевірка умови; {26} оператор циклу; {27} командна дужка „begin”; {28} оператор циклу; {29} оператор циклу; {30} командна дужка „begin”; {31} - {33} зміна коефіцієнтів місцями між даним і наступним рядком через третю змінну r; {31} змінній r присвоюється значення дане значення коефіцієнта; {32} даному значенню коефіцієнта присвоюється значення наступного рядка; {33} значенню коефіцієнта наступного рядка присвоюється значення змінної r; {34} командна дужка „end”; {35} командна дужка „end”; {36} кінець процедури; {37} - {43} Процедура ділення рівняння на провідний коефіцієнт; {37} назва процедури, опис змінних; {38} початок процедури; {39} змінній b присвоюється значення провідного коефіцієнта; {40} оператор циклу; {41} оператор циклу; {42} коефіцієнти провідного рівняння діляться на змінну b; {43} кінець процедури; {44} - {51} Процедура обчислення нових коефіцієнтів {44} назва процедури, опис змінних; {45} початок процедури; {46} оператор циклу, командна дужка „begin”; {47} змінній c присвоюється коефіцієнт; {48} оператор циклу; {49} обчислення коефіцієнта за формулою; {50} командна дужка „end”; {51} кінець процедури; {52} - {62} Процедура обчислення коренів рівняння {52} назва процедури, опис змінних; {53} початок процедури; {54} обчислення останнього невідомого за формулою; {55} оператор циклу з зменшенням параметра, командна дужка „begin”; {56} присвоєння 0 змінній d; {57} оператор циклу; {58} оператор циклу; {59} обчислення змінної d за формулою; {60} обчислення невідомих за формулою; {61} командна дужка „end”; {62} кінець процедури; {63} - {68} Процедура виводу результатів {63} назва процедури; {64} початок процедури; {65} вивід повідомлення „Розв'язки рівняння”; {66} оператор циклу; {67} вивід невідомих; {68} кінець процедури; {69} - {69} Головна програма {69} початок; {70} очистка екрана; {71} виклик процедури вводу коефіцієнтів і вільних членів; {72} оператор циклу, командна дужка „begin”; {73} виклик процедури зміни рівнянь місцями; {74} виклик процедури ділення рівняння на провідний коефіцієнт; {75} виклик процедури обчислення нових коефіцієнтів; {76} командна дужка „end”; {77} виклик процедури обчислення коренів рівняння; {78} виклик процедури виводу результатів; {79} оператор вводу без параметрів; {80} кінець програми. 2.3 Контрольний приклад Схема єдиного ділення. Продемонструємо алгоритм гауссових вилучень на прикладі: 2x1 + 4x2 + 6x3 + 8x4 = 2, 3x1 + 5x2 + 6x3 + 13x4 = 8, 5x1 + 10x2 + 16x3 + 19x4 = 3, 7x1 + 12x2 + 20x3 + 27x4 = 9. Випишемо розширену матрицю системи, відокремивши стовпчик вільних членів від коефіцієнтів біля невідомих вертикальною рискою: Коефіцієнт 2 біля x1 у першому рівнянні назвемо провідним. Перший крок методу Гаусса полягає у вилучення змінної з другого, третього та четвертого рівнянь системи. Для цього поділимо коефіцієнти першого рівняння на провідний елемент: Додамо до другого перше рівняння, помножене на -3; до третього - перше, помножене на -5; до четвертого - перше, помножене на -7. Дістанемо еквівалентну систему рівнянь з розширеною матрицею: На другому кроці вилучимо змінну x2 з третього та четвертого рівнянь. Провідним елементом виберемо коефіцієнт -1 біля x2 у другому рівнянні. Поділимо на -1 коефіцієнти другого рівняння: У третьому рівнянні змінної x2 немає, тому залишаємо його без змін. Помножимо друге рівняння на 2 і додамо його до четвертого: На третьому кроці провідний елемент (коефіцієнт біля x3 у третьому рівнянні) дорівнює 1. залишаємо це рівняння без змін. З четвертого рівняння вилучимо змінну x3, помноживши третє рівняння на -5 і додавши його до четвертого: Поділивши останнє рівняння на 2 одержимо: x4=1. На цьому прямий перебіг методу Гаусса завершено. Зворотний перебіг полягає в послідовному знаходженні невідомих з перетвореної системи. За значенням x4 з третього рівняння знаходимо: x3=-2+ x4=-2+1=-1 і, нарешті, з першого рівняння: x1=1-2x2-3x3-4x4=1+2+3-4=2. Перевіривши, переконуємося, що знайдені значення невідомих перетворюють кожне рівняння в тотожність. Відповідь: система має єдиний розв'язок: x1=2, x2=-1, x3=-1, x4=1. Висновок Однією з головних задач лінійної алгебри є розв'язання систем лінійних алгебраїчних рівнянь - математичної моделі реальних об'єктів, залежності між параметрами яких мають лінійний характер. У багатьох фізичних задачах електро-, радіотехніки, механіки баланс сил, діючих на якусь конструкцію, моделюють системою лінійних рівнянь. Наприклад, баланс сил струмів у вузлах і напруг у контурах електричного кола на підставі законів Кірхгофа описують системою рівнянь, лінійних відносно опорів та джерел енергії. Фізичні системи, модельовані диференціальними рівняннями, які не завжди можна розв'язати в аналітичному вигляді, описують наближено системою різницевих рівнянь. До лінійних систем зводяться також задачі статистики, економіки тощо. Системи лінійних алгебраїчних рівнянь розв'язують точними (прямими) й наближеними методами. Серед точних методів найвідомішим та найефективнішим є метод Гаусса, чи метод послідовного вилучення невідомих. Цей алгоритм був знаний ще в давнину, принаймні в III ст. до н. е. Метод Гаусса розв'язування систем лінійних рівнянь з числовими коефіцієнтами завдяки простоті і однотипності виконуваних операцій придатний для використання на електронно-обчислювальних машинах. Істотним недоліком цього методу є неможливість сформулювати умови сумісності і визначеності системи залежно від значень коефіцієнтів і вільних членів. З іншого боку, навіть для визначеної системи цей метод не дає змоги знайти загальні формули, що визначають розв'язки системи через її коефіцієнти і вільні члени, які необхідно мати для теоретичних досліджень. Існують й інші методи розв'язування і дослідження систем лінійних рівнянь, які не мають зазначених недоліків. Ці методи ґрунтуються на теорії матриць і визначників. Корені лінійних систем алгебраїчних рівнянь за методом Гаусса на сучасних ЕОМ обчислюють за спеціальними стандартними програмами. Такі програми записують різними мовами програмування. В даному курсовому проекті розроблено та описано програму отримання результатів розв'язку системи алгебраїчних рівнянь методом Гаусса мовою програмування Turbo Pascal. Програма відсаджена з використанням набору текстових даних. Контрольний приклад розроблений вручну для перевірки роботоздатності програми. Він повністю співпав з результатом машинного експерименту. Тому дану програму можна використовувати на практиці. Запуск програми здійснюється з головного меню інтегрованого середовища Turbo Pascal ( шляхом вибору опції RUN). Попередньо програма повинна бути завантажена в оперативну пам'ять. Можна було б відкомпілювати дану програму з опцією Destination to Memory для запуску exe - файла. Тож можна зробити висновки про можливість вдосконалення цієї програми. Список використаної літератури 1. „Інформатика. Комп'ютерна техніка. Комп'ютерні технології”/ Підручник. За редакцією О.І. Пушкаря. - Київ. Видавничий центр „Академія”, (Навчальне видання. Серія „Альма-матер”. Заснована в 1999 році.) 2002. - 703с. 2. О.Г. Ципкін „Довідник з математики для середніх навчальних закладів” / За редакцією С.О. Степанова. - К.: Вища школа. Головне вид-во, 1988. - 416с. 3. В.Я. Сердюченко „Розробка алгоритмів та програмування мовою Turbo Pascal”. Додатки Результат машинного експерименту (******************************) * Програма розв'язку * * системи лінійних рівнянь * * методом Гауса * (******************************) {01} program kyrsova; {02} uses crt; {03} type {04} mas1=array[1..50,1..51] of real; {05} mas2=array[1..50] of real; {06} var {07} a:mas1; {08} x:mas2; {09} b,c,d,r:real; {10} i,j,n,k,m:integer; (* Процедура вводу коефіцієнтів і вільних членів *) {11} procedure vvid(var n:integer; var a:mas1); {12} begin {13} write('введіть кількість рівнянь n='); {14} readln(n); {15} writeln('Введіть коефіцієнти і вільні члени'); {16} for i:=1 to n do {17} for j:=1 to n+1 do {18} begin {19} write('a',i,',',j,'='); {20} readln(a[i,j]); {21} end; {22} end; (* Процедура зміни рівнянь місцями *) {23} procedure mriv(var a:mas1); {24} begin {25} if a[k,k]=0 then {26} for m:=1 to n do {27} begin {28} for i:=k to k do {29} for j:=k to n+1 do {30} begin {31} r:=a[i,j]; {32} a[i,j]:=a[i+1,j]; {33} a[i+1,j]:=r {34} end; {35} end; {36} end; (*Процедура ділення рівняння на провідний коефіцієнт *) {37} procedure dil(var a:mas1); {38} begin {39} b:=a[k,k]; {40} for i:=k to k do {41} for j:=k to n+1 do {42} a[i,j]:=a[i,j]/b; {43} end; (* Процедура обчислення нових коефіцієнтів *) {44} procedure nkoef(var a:mas1); {45} begin {46} for i:=k+1 to n do begin {47} c:=a[i,k]; {48} for j:=k to n+1 do {49} a[i,j]:=a[i,j]-a[k,j]*c; {50} end; {51} end; (* Процедура обчислення коренів рівняння *) {52} procedure nevid(var x:mas2); {53} begin {54} x[n]:=a[n,n+1]/a[n,n]; {55} for k:=n-1 downto 1 do begin {56} d:=0; {57} for i:=k to k do {58} for j:=k+1 to n do {59} d:=d+a[k,j]*x[j]; {60} x[k]:=a[k,n+1]-d; {61} end; {62} end; (* Процедура виводу результатів *) {63} procedure rezult; {64} begin {65} writeln('Розв'язки рівняння'); {66} for i:=1 to n do {67} writeln('x',i,'=',x[i]:8:2); {68} end; (* Головна програма *) {69} begin {70} clrscr; {71} vvid(n,a); {72} for k:=1 to n-1 do begin {73} mriv(a); {74} dil(a); {75} nkoef(a); {76} end; {77} nevid(x); {78} rezult; {79} end. Размещено на Allbest.ru |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |