Розробка програми вирішення системи лінійних рівнянь

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати


Далекосхідна академія державної служби

(Заочне навчання)

Факультет державного та муніципального управління

КУРСОВИЙ ПРОЕКТ

за курсом: Інформатика

на тему:

Розробка програми вирішення системи лінійних рівнянь

Виконав: студент

1 курсу 3 річної

заочної форми навчання

(Внебюджет)

________ Групи

Спеціальність: ГіМУ

Воіщев Олексій Юрійович

м. Хабаровськ 2005

Зміст

Введення

1. Опис математичних методів розв'язання систем лінійних рівнянь

1.1 Метод Гаусса

1.2 Матричний метод

1.3 Обчислення визначників другого і третього порядку

2. Мова програмування Паскаль

2.1 Структура програми

2.2 Опис змінних

2.3 Основні конструкції мови

2.4 Структури даних

2.4 Процедури і функції

3. Опис програми

3.1 Робота програми

3.2 Блок-схема програми

Висновок

Висновок

Список використаних джерел та літератури

Додаток

Введення

Останні десятиліття характеризуються бурхливим розвитком обчислювальної техніки. Розширюються області застосування обчислювальних машин і удосконалюються методи їх використання. Створено універсальні мови програмування та розроблено потужні операційні системи.

Зараз неможливо уявити собі будь-яку область діяльності, що обходиться без застосування комп'ютерної техніки. Комп'ютери використовуються при проведенні різних інженерних розрахунків, при вирішенні економічних завдань, у процесі управління виробництвом, при одержанні оцінок виробничих ситуацій і в багатьох інших випадках.

Системи лінійних рівнянь з'являються майже в кожній галузі прикладної математики. У деяких випадках ці системи рівнянь безпосередньо складають ту задачу, яку необхідно вирішувати, в інших випадках завдання зводиться до такої системи.

Щоб швидко впорається з рішенням системи лінійних рівнянь, можна скористатися засобами обчислювальної техніки - скласти програму на мові програмування.

У цій роботі розглядається можливість вирішення систем лінійних рівнянь матричним способом і методом Гауса за допомогою програми, створеної на мові Паскаль.

1. Опис математичних методів розв'язання систем лінійних рівнянь

1.1 Метод Гаусса

Ідея методу Гаусса полягає в послідовному виключенні невідомих. Алгоритм розв'язання системи рівнянь цим методом простежимо на прикладі.

Приклад 1.

Вибирається провідне рівняння з коефіцієнтом при х 1, рівним 1. У нашому прикладі провідним рівнянням буде друге. Систему краще переписати, поставивши це рівняння на перше місце:

Множимо перше рівняння на 6 і віднімаємо від отриманого друге, щоб виключити з другого невідоме х 1. Перше рівняння записуємо, а на місце другого - результат віднімання.

Потім перше рівняння помножимо на 3 та складаємо з третім рівнянням. Тоді отримуємо систему

Або

перше рівняння переписуємо без зміни, а друге множимо на 7 і віднімаємо від нього третіх рівняння, помножене на 15, щоб позбутися від х 2 у третьому рівнянні. При цьому друге записуємо без зміни, на місці третього - результат віднімання. Тоді

З третього слід х 3 =- 3, підставимо його в друге, отримаємо х 2 = - 2. Далі підставимо знайдені х 2 і х 3 в перше рівняння, отримаємо х 1 = 1.

Рішення системи: х 1 = 1, х 2 = - 2, х 3 = - 3.

Примітка: якщо система рівнянь не містить рівняння з коефіцієнтом 1 при х 1, тоді виняток х 1 з другого і третього досягається множенням спочатку першого на коефіцієнт другого, а другого на коефіцієнт першого. Потім множимо перше на коефіцієнт третього, а третє на коефіцієнт першого. Таким чином при вирахуванні виключаємо х 1.

1.2 Матричний метод

Запишемо систему лінійних 3 рівнянь з 3 невідомими

Складемо матрицю з коефіцієнтів при невідомих

А =

Введемо в розгляд матриці - стовпці для невідомих і вільних членів:

Х = ; В = .

Тоді систему (2) можна переписати в матричній формі

АХ = В

Помноживши це рівняння на ліворуч, отримаємо , Звідки = або

Отже, матриця - рішення Х знаходиться як добуток на В.

Приклад 2. Вирішити систему рівнянь матричним методом

Рішення: визначник матриці

А =

Δ =- 1, значить, існує зворотна матриця .

Матриця - стовпчик при невідомих:

Х =

Матриця - стовпець з вільних членів:

В =

Тоді рішення запишеться у вигляді

= =

Звідки випливає, х 1 = 1; х 2 = 0; х 3 = 2.

1.3 Обчислення визначників другого і третього порядку

Число 11 а 22 - а 12 а 21) називається визначником другого порядку і позначається символом

Визначник другого порядку містить два рядки і два стовпці. Числа а 11, а 12, а 21, а 22 називаються елементами визначника. Діагональ визначника, на якій розташовані числа а 11, а 22 - головна, а елементи а 12, а 21 становлять побічну діагональ.

Визначник 3-го порядку містить три рядки і три стовпця:

Для обчислення визначника третього порядку існує кілька способів.

Розглянемо метод обчислення визначника розкладанням за елементами першого рядка.

Введемо поняття мінору і алгебраїчного доповнення.

Мінором деякого елемента визначника називається визначник, отриманий з даного викреслюванням того рядка і того стовпця в яких цей елемент розташований. Позначається М ij (i - номер рядка, j - номер стовпця).

Наприклад, мінором елемента а 12 є визначник

Алгебраїчним доповненням даного елемента визначника називається його мінор, помножений на (-1) i + j. Алгебраїчні доповнення позначаються літерами А ij, і тоді А y = (-1) i + j M y.

Визначник обчислюється так:

= .

Так само можна розкласти визначник будь-якому рядку або стовпцю.

Викладений метод застосуємо до обчислення визначників 4-го і т.д. порядків.

Прімер3. Обчислити визначник розкладанням за елементами першого рядка

Рішення: Елементи першого рядка

а 11 = 1, а 12 = 2, а 13 = - 2.

А 11 = (-1) 1 +1. М 11 = = 4 +1 = 5.

М 11 отримали, викресливши перший рядок і перший стовпець.

А 12 = (-1) 1 +2. М 12 = - = - (8 +3) = - 11.

М 12 отримали, викресливши перший рядок і другий стовпчик.

А 13 = (-1) 1 +3. М 13 = = 2-3 = - 1.

М 13 отримали, викресливши перший рядок і третій стовпець.

Остаточно

= 1.5 +2. (-11) - 2. (-1) = - 15

2. Мова програмування Паскаль

2.1 Структура програми

Мова Паскаль, починаючи з моменту свого створення Н. Віртом в 1971р., Відіграє особливу роль м в практичному програмуванні, і в його навчанні. З неперевершеною чіткістю в ньому реалізовані принципи структурного програмування. Перекладачі для програм, написаних на Паскалі, розроблені для різних комп'ютерів і в даний час мають безліч різновидів. Вони є компіляторами, обробними розроблені програмістами тексти програм.

Існує багато версій мови Паскаль. Відмінності між ними часом дуже великі. Так, базова версія Вірта має багато разів менше можливостей, ніж версія Турбо-Паскаль 7.0. (Перша, фактично - мову для навчання майбутніх програмістів, а друга - знаряддя професійних розробників прикладного програмного забезпечення) Тим не менш, це версії однієї мови.

Будь-яка Паскаль - програма є текстовим файлом з власним ім'ям і з розширенням. pas. Паскаль - програма має вигляд послідовності символів латинських і російських букв, арабських цифр, знаків операцій, дужок, розділових знаків і деяких додаткових символів. У ньому можна виділити опису даних і оператори, що описують дії, які треба виконати машині над цими даними.

Схематично програма представляється у вигляді послідовності восьми розділів:

заголовок програми;

опис зовнішніх модулів, процедур і функцій;

опис міток;

опис констант;

опис типів змінних;

опис змінних;

опис функцій і процедур;

розділ операторів.

Кожен розділ починається зі службового слова, призначення якого зафіксовано у Паскалі так, що його не можна вживати для інших цілей. Так наприклад, опис заголовка починається зі службового слова program, опис констант - const, опис змінних - var, розділ операторів починається з begin. Програма закінчується службовим словом end, після якого ставиться крапка. Описи величин і оператори один від одного відділяються знаком "крапка з комою".

2.2 Опис змінних

Для позначення величин використовуються імена. Вони складаються з латинських букв і цифр, причому першим символом повинна бути буква.

Постійні величини (константи) найчастіше бувають числовими або символьними. Значення символьних констант полягають в апострофи.

Постійні величини описуються в розділі констант за схемою:

Const <ім'я> = <константа>

Дані, що обробляються програмою, можуть бути різних типів (числові, символьні, рядки, масиви і т.д.). Тип визначає область допустимих значень, а також операції та функції, що застосовуються до величин цього типу. У Паскалі є кілька вбудованих простих типів зі стандартними іменами.

Група типів, значення кожного з яких можна перерахувати в деякому списку - скалярні типи. Для них визначено порядкова функція ord (x) - номер значення х у списку; функція pred (x)-значення в списку, що передує х, і succ (x) - значення в списку, наступне за х.

Упорядкований тип - це тип, значення якого впорядковані у звичайному сенсі.

Змінні описуються в розділ опису змінних за схемою:

Var <список імен змінних>: <тип>

Імена в списку розділяються комою. У цьому розділі може бути описано декілька змінних різного типу, наприклад:

Var a, b, c,: real; k, i: integer; p: Boolean;

Над цілими величинами (тип integer) визначено арифметичні операції: * (множення), div (розподіл без остачі), mod (обчислення залишку від ділення), +, - (додавання і віднімання); операції перераховані в порядку старшинства. Цілий результат дають деякі стандартні функції (аргумент полягає в круглі дужки):

Abs (x)

Sqr (x)

Trunk (x)

Round (x)

Random (x)

-Абсолютна величина цілого хж

квадрат значення х;

ціла частина речовій величини х;

ціле число, отримане з речового год за правилом округлення;

випадкове ціле число з інтервалу від 0 до х

Над речовими величинами визначені операції: *, +, -, /, а також стандартні функції, при матеріальному або цілому аргументі: abs (x), sqr (x), sin (x), cos (x), ln (x), sqrt (x) - квадратний корінь з х, int (x) - ціла частина з х, random - випадкове число від 0 до 1. Зазначені операції та функції дають речовинний результат.

Безліч всіх символів утворюють символьні величини (тип char), які є впорядкованими.

Вирази - це конструкції, що задають правила обчислення значень змінних. У загальному випадку вираження будуються з змінних, констант, функцій за допомогою операцій і дужок.

Ця роль вираження відображена в основному операторі мови - оператора присвоювання. Він має наступний вигляд:

<Ім'я змінної>: = <вираз>

Тип змінної та тип вираження повинні бути узгоджені (величини належать до одного і того ж типу).

У Паскалі можна вводити з клавіатури числові і символьні дані. Є дві вбудовані процедури (підпрограми) вводу:

1) read (<список змінних>);

2) readln (<список змінних>).

Процедура readln відрізняється від read тільки тим, що при завершенні введення курсор переміщається на початок рядка.

Програма на Паскалі може виводити на екран або на принтер значення числових чи символьних виразів. Є дві процедури виведення на екран:

1) write (<список виразів>);

2) writeln (<список виразів>).

Процедура write (x 1, x 2, x 3, ... xn) друкує на екран значення виразу зі списку х1, х2, ... хn. Для виводу на принтер використовуються ті ж процедури з додаванням службового слова lst перед списком виразів:

Приклад: write (lst, 'немає рішень');

2.3 Основні конструкції мови

Паскаль - це мова структурного програмування. Це значить, що програма повинна виражати свої думки дуже дисципліновано, з використанням малого числа чітко обумовлених конструкцій, використовуючи як чергування їх, так і вкладення один в одного. Не рекомендується (хоча й можливо) використовувати оператор переходу goto.

Реалізація послідовності дій (тобто структури прямування) виконується за допомогою складеного оператора:

Begin <послідовність операторів> end

Розділ операторів у програмі завжди є складеним оператором. Службові слова begin і end часто називають операторними дужками.

Для реалізації розвилки у Паскалі передбачені два оператори: умовний оператор і оператор варіанту (вибору). Вони призначені для виділення зі складових їх операторів одного, який і виконується.

Структура і дія умовного оператора такі:

IF <логічний вираз>

Then <оператор 1>

Else <оператор 2>

Умовний оператор може бути неповним, тобто не містити частина "else <оператор 2>". У цьому випадку, якщо значення логічного виразу одно false, умовний оператор не викликає ніяких дій.

Оператор варіанта має наступну форму:

Case <вираз> of

<Список констант 1>: <оператор 1>;

<Список констант 2>: <оператор 2>;

... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

<Список констант n>: <оператор n>;

end;

Вираз, що стоїть між службовими словами case і of, повинно мати значення ординальні типу. Будь-який список констант може складатися з однієї константи.

Оператор варіанту обчислює значення виразу, записаного після case. Якщо його значення збігається з однією з констант в деякому списку, то виконується оператор, що стоїть після цього списку. Якщо значення виразу не співпало з жодною константою у всіх варіантах, то оператор варіанту нічого не робить.

Для реалізації циклів у Паскалі є три оператори. Якщо кількість повторень відомо заздалегідь, то зручно скористатися оператором циклу з параметром. В інших випадках слід використовувати оператори циклу з передумовою (цикл "поки") або з постусловіем (цикл "до").

Цикл з передумовою є найбільш потужним в Паскалі. Інші оператори циклу можна виразити через нього. Його форма така:

While <логічний вираз> do <оператор>

Дія: обчислюється значення логічного виразу. Якщо воно дорівнює true, то виконується оператор, після чого знову обчислюється значення логічного виразу, в іншому випадку дія закінчується.

Оператор циклу з постусловіем має форму:

Repeat <послідовність операторів>

Until <логічний вираз>

Дія: виконується послідовність операторів. Далі обчислюється значення логічного виразу. Якщо воно дорівнює true, то дія закінчується, в іншому випадку знову виконується послідовність операторів циклу і т.д.

Оператор циклу з параметром передбачає повторне виконання деякого оператора з одночасною зміною за правилом арифметичній прогресії значення керуючої змінної (параметра) цього циклу. Оператор циклу з параметром має дві форми.

Форма 1:

For <параметр>: = <вираз 1> to <вираз 2> do <оператор>

Параметр, вираз 1, вираз 2 повинні бути одного ординальні типу. Параметр в цьому циклі зростає. Дія еквівалентно дії наступного складеного оператора:

Begin

<Параметр>: = <вираз 1>;

while <параметр> <= <вираз 2> do

begin

<Оператор>;

<Параметр>: = succ (<параметр>)

end

end.

Якщо в цьому описі відношення <= замінити на> =, а функцію succ на pred, то параметр в циклі буде спадати, в цьому випадку цикл з параметром приймає форму 2.

Форма 2:

For <параметр>: = <вираз 1> downto <вираз 2> do <оператор>

2.4 Структури даних

У Паскалі крім простих типів даних: real, integer, boolean, byte, char, програміст за своїм бажанням може визначити новий тип шляхом перерахування його елементів - перераховується тип, який відноситься до простих ординальні типам.

Опис перечисляемого типу виконується за схемою:

Type <ім'я типу> = <список імен>

Наприклад, type operator = (plus, minus, multi, divide);

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

Type days = (mon, tue, wed, thu, fri, sat, sun);

Workdays = mon. Fri;

Index = 1. .30;

Операції та функції - ті ж, що і для базового типу. Використання інтервальних типів у програмі дозволяє економити пам'ять і проводити під час виконання програми контроль присвоєння.

Природно і часто дуже зручно групувати однотипні дані в послідовності - масиви, рядки символів, об'єднувати різнотипні дані в одному і тому ж об'єкті у вигляді записів. Значне зручність представляються користувачеві у Паскалі при організації однотипних величин у вигляді безлічі з відповідним набором операцій: об'єднання, перетину і т.д. Послідовність однотипних величин змінної довжини можна представити у Паскалі у вигляді файлу даних і зберігати на зовнішніх носіях, використовуючи його в різних програмах.

Масив-це послідовність, що складається з фіксованого числа однотипних елементів. Всі елементи масиву мають загальне ім'я і розрізняються індексами. Індекси можна обчислювати, їх тип повинен бути ординальні. В описі масиву використовуються службові слова array і of. В описі масиву вказується тип його елементів і типи їх індексів.

2.4 Процедури і функції

У Паскалі підпрограми називаються процедурами і функціями і описуються в розділі з тією ж назвою.

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

Дані для обробки можуть передаватися процедурі через глобальні імена або через аргументи процедури. У процедурі кожен аргумент має своє ім'я - формальний параметр, що описується в заголовку процедури за схемою

Procedure <ім'я> (<список формальних параметрів>)

Опис формальних параметрів може мати вигляд

<Список імен>: <тип> або var <список імен>: <тип>

Оператор виклику процедури має вигляд

<Ім'я процедури> (<список виразів>);

Зазначені висловлювання називаються фактичними параметрами. Їх список повинен точно відповідати переліку описів формальних параметрів процедури. Під час виклику процедури кожному параметру-значенням присвоюється значення відповідного фактичного параметра і тому їх використовують для передачі вхідних даних. Параметри - змінні використовуються для представлення результатів процедури.

Функція - це підпрограма, що визначає єдине скалярний, речовий або строкове значення. Відмінності підпрограми - функції від процедури:

заголовок функції починається зі службового слова function і закінчується зазначенням типу значення функції:

function <ім'я> (список описів формальних параметрів): <тип>;

розділ операторів функції повинен містити хоча б один оператор присвоювання імені функції;

звернення до функції - не оператор, а вираз виду:

<Ім'я функції>; (<список фактичних параметрів>)

3. Опис програми

3.1 Робота програми

Для розв'язання систем лінійних рівнянь методом Гаусса та матричним методом створена програма на мові Паскаль. Програма запрошує вихідні дані (рис.1):

матрицю коефіцієнтів при невідомих х;

стовпець вільних членів

спосіб вирішення системи лінійних рівнянь - варіант 1 або 2.

Малюнок 3.1 Введення вихідних даних

Залежно від обраного варіант у програмі відбувається рішення системи рівнянь методом Гауса (рис.2) або матричним методом (рис.3) з видачею на екран результатів:

Малюнок 3.2 Результати розрахунків системи лінійних рівнянь методом Гауса.

Малюнок 3.3 Результати розрахунків системи лінійних рівнянь матричним методом.

Програма складається з 7 підпрограм - 6 процедур і однієї функції:

процедура Gauss забезпечує вирішення системи лінійних рівнянь за методом Гауса;

процедура matrica забезпечує вирішення системи лінійних рівнянь матричним методом;

процедура PrintMatr2 призначена для видачі на екран вихідної і оберненої матриці;

процедура MultString призначена для множення рядків матриці на число r;

процедура AddStrings додає до i перше рядку матриці i 2-у, помножену на число r;

процедура MultMatr призначена для множення матриць.

Функція Sign використовується для зміни знаку на протилежний при обчисленні оберненої матриці.

Програма налаштована на вирішення системи 3-х лінійних рівнянь з трьома невідомими. Щоб розв'язати систему з 2-х рівнянь з 2-ма невідомими необхідно в програмі змінити значення константи N з N = 3 на N = 2 (рис. 4).

Малюнок 3.4. Фрагмент програми з описом констант і змінних.

3.2 Блок-схема програми

Висновок

У цій роботі розглянуті математичні методи розв'язання систем лінійних рівнянь: матричний метод і метод Гаусса, наводяться основні конструкції мови Паскаль. Розглянуті теоретичні питання дають можливість створення програми на Паскалі для розв'язання систем лінійних рівнянь. У курсовій роботі наводиться текст даної програми, розглядається структура програми, аналізуються всі підпрограми. Дана програма може бути використана в різних областях, де потрібно рішення систем лінійних рівнянь.

Список використаних джерел та літератури

  1. А.В. Могильов, Н.І. Пак, Є.К. Хеннер "Інформатика", Москва, ACADEMA, 2000 р.

  2. "Турбо Паскаль 7.0", Київ, Торгово-видавниче бюро BHV, 1997.

  3. С.А. Немнюгин, "Турбо ПАСКАЛЬ", Практикум, Пітер, 2002р.

Додаток

Текст програми

"Рішення систем лінійних рівнянь матричним способом і методом Гауса"

Program Lin_yravneniya;

uses crt;

const N = 3;

eps = 0.00001; {all numbers less than eps are equal 0}

type matr = array [1. n, 1. n] of real;

mas = array [1. n] of real;

var

i, j: integer;

b, x: mas;

variant: byte;

a, c: matr;

dt: real;

imx, np: integer;

{*** Друк вихідної і оберненої матриці ***}

procedure PrintMatr2 (m, m1: matr; n, nz, nd: integer);

var i, j: integer;

begin

for i: = 1 to n do

begin

if (i = 1) then write (np: 2, ':')

else write ('');

for j: = 1 to n do

write (m [i, j]: nz: nd); write ('');

for j: = 1 to n do

write (m1 [i, j]: nz: nd);

writeln;

end;

inc (np);

end;

procedure MultString (var a, b: matr; i1: integer; r: real);

var j: integer;

begin

for j: = 1 to n do

begin

a [i1, j]: = a [i1, j] * r;

b [i1, j]: = b [i1, j] * r;

end;

end;

procedure AddStrings (var а, b: matr; i1, i2: integer; r: real);

{Процедура додає до i1 рядку матриці а i2-у помножену на r}

var j: integer;

begin

for j: = 1 to n do

begin

a [i1, j]: = a [i1, j] + r * a [i2, j];

b [i1, j]: = b [i1, j] + r * b [i2, j];

end;

end;

procedure MultMatr (a, b: matr; var c: matr);

var i, j, k: byte;

s: real;

begin

for i: = 1 to n do

for j: = 1 to n do

begin

s: = 0;

for k: = 1 to n do

s: = s + a [i, k] * b [k, j];

c [i, j]: = s;

end;

end;

function sign (r: real): shortint;

begin

if (r> = 0) then sign: = 1 else sign: =- 1;

end;

{************************************************* **}

{** Викреслення з матриці рядка та стовпця **}

procedure GetMatr (a: matr; var b: matr; m, i, j: integer);

var ki, kj, di, dj: integer;

begin

di: = 0;

for ki: = 1 to m-1 do

begin

if (ki = i) then di: = 1;

dj: = 0;

for kj: = 1 to m-1 do

begin

if (kj = j) then dj: = 1;

b [ki, kj]: = a [ki + di, kj + dj];

end;

end;

end;

{*** Метод Гауса *******}

procedure gauss (a: matr; b: mas; var x: mas; n: integer);

Var k: byte;

m, s: real;

begin

{Приведення до трикутного вигляду}

For k: = 1 to N-1 do

For i: = k +1 to n do

begin

m: = a [i, k] / a [k, k];

a [i, k]: = 0;

For j: = k +1 to N do

a [i, j]: = a [i, j]-m * a [k, j];

b [i]: = b [i]-m * b [k];

end;

{Розрахунок невідомих х у зворотному порядку}

x [n]: = b [n] / a [n, n];

writeln;

writeln ('Висновок результатів рішення системи рівнянь методом Гауса');

writeln ('x [', n, '] =', x [n]: 6: 2);

for i: = (n-1) downto 1 do

begin s: = 0;

For j: = i +1 to n do

s: = sa [i, j] * x [j];

x [i]: = (b [i] + s) / a [i, i];

writeln ('x [', i, '] =', x [i]: 6: 2);

end;

end;

{*** Матричний спосіб ***}

procedure matrica (a: matr; y: mas; n: integer);

var z, a0: matr;

imx, np: integer;

s: mas;

begin

for i: = 1 to n do

begin

for j: = 1 to n do z [i, j]: = 0;

z [i, i]: = 1;

end;

for i: = 1 to n do

for j: = 1 to n do

a0 [i, j]: = a [i, j];

for i: = 1 to n do

begin

{До i-ої рядку додаємо (або віднімаємо) j-й рядок

взяту зі знаком i-того елемента j-го рядка. Таким чином,

на місці елементова a [i, i] виникає сума модулів елементів i-того

стовпця (нижче i-го рядка) взята зі знаком колишнього елемента a [i, i],

рівність нулю яку говорить про неіснування оберненої матриці}

for j: = i +1 to n do

AddStrings (a, z, i, j, sign (a [i, i]) * sign (a [j, i]));

{PrintMatr (a, b, n, 6,1);}

{Прямий хід}

if (abs (a [i, i])> eps) then

begin

MultString (a, z, i, 1 / a [i, i]);

for j: = i +1 to n do

AddStrings (a, z, j, i,-a [j, i]);

{PrintMatr (a, b, n, 6,1);}

end

else

begin

writeln ('Зворотною матриці не існує.');

halt;

end

end;

{Зворотний хід: ');}

if (a [n, n]> eps) then

begin

for i: = n downto 1 do

for j: = 1 to i-1 do

begin

AddStrings (a, z, j, i,-a [j, i]);

end;

{PrintMatr (a, b, n, 8,4);}

end

else writeln ('Зворотною матриці не існує.');

MultMatr (a0, z, a);

writeln ('Початкова матриця, зворотна до неї матриця:');

PrintMatr2 (a0, z, n, 7,3);

{** Множення оберненої матриці на стовпець вільних членів **}

for i: = 1 to n do s [i]: = 0;

for i: = 1 to n do

for j: = 1 to n do

s [i]: = s [i] + z [i, j] * y [j];

writeln ('Висновок результатів рішення системи рівнянь матричним способом');

for i: = 1 to n do write ('', s [i]: 5: 2);

end;

begin {***** тіло програми ******}

clrscr;

writeln ('введення матриці коефіцієнтів при невідомих х');

for i: = 1 to N do

for j: = 1 to N do

begin

write ('введіть a [', i ,',', j, '] =>');

read (a [i, j]);

end;

writeln ('введення стовпця вільних членів');

for i: = 1 to N do

begin

write ('введіть b [', i, '] =>');

read (b [i]);

end;

writeln ('введіть варіант ');

writeln ('1 - рішення системи лінійних рівнянь методом Гауса');

write ('2 - рішення системи лінійних рівнянь матричним методом =>');

readln (variant);

case variant of

1: gauss (a, b, x, n);

2: matrica (a, b, n);

else writeln ('невірно вказано варіант');

end;

end.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
63.5кб. | скачати


Схожі роботи:
Розробка програми для розв`язання систем лінійних рівнянь
Розробка програми пошуку рішення системи диференціальних рівнянь двома методами Рунге-Кутта
Розробка програми пошуку рішення системи диференціальних рівнянь двома методами Рунге Кутта
Метод Гаусса для вирішення систем лінійних рівнянь
Системи лінійних рівнянь
Системи лінійних алгебраїчних рівнянь
Системи лінійних рівнянь і нерівностей
Стійкість системи лінійних алгебраїчних рівнянь
Алгебра матриць Системи лінійних рівнянь
© Усі права захищені
написати до нас