{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ст. до н. е.
Метод Гаусса розв’язування систем лінійних рівнянь з числовими коефіцієнтами завдяки простоті і однотипності виконуваних операцій придатний для використання на електронно-обчислювальних машинах. Істотним недоліком цього методу є неможливість сформулювати умови сумісності і визначеності системи залежно від значень коефіцієнтів і вільних членів. З іншого боку, навіть для визначеної системи цей метод не дає змоги знайти загальні формули, що визначають розв’язки системи через її коефіцієнти і вільні члени, які необхідно мати для теоретичних досліджень. Існують й інші методи розв’язування і дослідження систем лінійних рівнянь, які не мають зазначених недоліків. Ці методи ґрунтуються на теорії матриць і визначників.
Корені лінійних систем алгебраїчних рівнянь за методом Гаусса на сучасних ЕОМ обчислюють за спеціальними стандартними програмами. Такі програми записують різними мовами програмування.
В даному курсовому проекті розроблено та описано програму отримання результатів розв’язку системи алгебраїчних рівнянь методом Гаусса мовою програмування TurboPascal. Програма відсаджена з використанням набору текстових даних. Контрольний приклад розроблений вручну для перевірки роботоздатності програми. Він повністю співпав з результатом машинного експерименту. Тому дану програму можна використовувати на практиці.
Запуск програми здійснюється з головного меню інтегрованого середовища TurboPascal ( шляхом вибору опції RUN). Попередньо програма повинна бути завантажена в оперативну пам'ять. Можна було б відкомпілювати дану програму з опцією DestinationtoMemory для запуску exe – файла. Тож можна зробити висновки про можливість вдосконалення цієї програми.
Список використаної літератури
1. „Інформатика. Комп’ютерна техніка. Комп’ютерні технології”/ Підручник. За редакцією О.І. Пушкаря. – Київ. Видавничий центр „Академія”, (Навчальне видання. Серія „Альма-матер”. Заснована в 1999 році.) 2002. – 703с.
2. О.Г. Ципкін „Довідник з математики для середніх навчальних закладів” / За редакцією С.О.Степанова. – К.: Вища школа. Головне вид-во, 1988. – 416с.
3. В.Я. Сердюченко „Розробка алгоритмів та програмування мовою Turbo Pascal”.
Додатки
Результат машинного експерименту
(******************************)
* Програма розв'язку *
* системи лінійних рівнянь *
* методом Гауса *
(******************************)
{01} program kyrsova;
{02} usescrt;
{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} procedurerezult;
{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.