Практическая часть

Практическая часть. Программа решения систем линейных уравнений по методу Гаусса 2.1.1. Постановка задачи. Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида a11x1 a12x2 a1nxn b1 , a21x2 a22x2 a2nxn b2 an1x1 an2x2 annxn bn для n 10 по методу Гаусса. 2.1.2. Тестовый пример. 3,2x1 5,4x2 4,2x3 2,2x4 2,6 , 2,1x1 3,2x2 3,1x3 1,1x4 4,8 , 1,2x1 0,4x2 0,8x3 0,8x4 3,6 , 4,7x1 10,4x2 9,7x3 9,7x4 8,4 , x1 5, x2 4, x3 3, x4 2. 2.1.3. Описание алгоритма.

В данной программе реализован метод Гаусса со схемой частичного выбора. В переменную n вводится порядок матрицы системы. С помощью вспомогательной процедуры ReadSystem в двумерный массив a и одномерный массив b вводится c клавиатуры расширенная матрица системы, после чего оба массива и переменная n передаются функции Gauss. В фукции Gauss для каждого k-го шага вычислений выполняется поиск максимального элемента в k-м столбце матрицы начинаяя с k-й строки.

Номер строки, содержащей максимальный элемент сохраняеется в переменной l. В том случае если максимальный элемент находится не в k-й строке, строки с номерами k и l меняются местами. Если же все эти элементы равны нулю, то происходит прекращение выполнения функции Gauss c результатом false.

После выбора строки выполняется преобразование матрицы по методу Гаусса. Далее вычисляется решение системы и помещается в массив x. Полученное решение выводится на экран при помощи вспомогательной процедуры WriteX. 2.1.4. Листинг программы и результаты работы Uses CRT Const maxn 10 Type Data Real Matrix Array1 maxn, 1 maxn of Data Vector Array1 maxn of Data Процедура ввода расширенной матрицы системы Procedure ReadSystemn Integer var a Matrix var b Vector Var i, j, r Integer Begin r WhereY GotoXY2, r WriteA For i 1 to n do begin GotoXYi62, r Writei GotoXY1, ri1 Writei2 end GotoXYn162, r Writeb For i 1 to n do begin For j 1 to n do begin GotoXYj 6 2, r i 1 Readai, j end GotoXYn 1 6 2, r i 1 Readbi end End Процедура вывода результатов Procedure WriteXn Integer x Vector Var i Integer Begin For i 1 to n do Writelnx, i xi End Функция, реализующая метод Гаусса Function Gaussn Integer a Matrix b Vector var xVector Boolean Var i, j, k, l Integer q, m, t Data Begin For k 1 to n - 1 do begin Ищем строку l с максимальным элементом в k-ом столбце l 0 m 0 For i k to n do If Absai, k m then begin m Absai, k l i end Если у всех строк от k до n элемент в k-м столбце нулевой, то система не имеет однозначного решения If l 0 then begin Gauss false Exit end Меняем местом l-ую строку с k-ой If l k then begin For j 1 to n do begin t ak, j ak, j al, j al, j t end t bk bk bl bl t end Преобразуем матрицу For i k 1 to n do begin q ai, k ak, k For j 1 to n do If j k then ai, j 0 else ai, j ai, j - q ak, j bi bi - q bk end end Вычисляем решение xn bn an, n For i n - 1 downto 1 do begin t 0 For j 1 to n-i do t t ai, i j xi j xi 1 ai, i bi - t end Gauss true End Var n, i Integer a Matrix b, x Vector Begin ClrScr WritelnПрограмма решения систем линейных уравнений по методу Гаусса Writeln WritelnВведите порядок матрицы системы макс. 10 Repeat Write Readn Until n 0 and n maxn Writeln WritelnВведите расширенную матрицу системы ReadSystemn, a, b Writeln If Gaussn, a, b, x then begin WritelnРезультат вычислений по методу Гаусса WriteXn, x end else WritelnДанную систему невозможно решить по методу Гаусса Writeln End. Программа решения систем линейных уравнений по методу Гаусса Введите порядок матрицы системы макс. 10 4 Введите расширенную матрицу системы A 1 2 3 4 b 1 3.2 5.4 4.2 2.2 2.6 2 2.1 3.2 3.1 1.1 4.8 3 1.2 0.4 -0.8 -0.8 3.6 4 4.7 10.4 9.7 9.7 -8.4 Результат вычислений по методу Гаусса x1 5.0E00 x2 -4.0E00 x3 3.0E00 x4 -2.0E00 2.2 Программа решения систем линейных уравнений по методу Зейделя 2.2.1. Постановка задачи.

Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида a11x1 a12x2 a1nxn b1 , a21x2 a22x2 a2nxn b2 an1x1 an2x2 annxn bn для n 10 по методу Зейделя. 2.2.2. Тестовый пример. 4,1x1 0,1x2 0,2x3 0,2x4 21,14 , 0,3x1 5,3x2 0,9x3 0,1x4 17,82 , 0,2x1 0,3x2 3,2x3 0,2x4 9,02 , 0,1x1 0,1x2 0,2x3 9,1x4 17,08 , x1 5,2, x2 4,2, x3 3, x4 1,8. 2.2.3. Описание алгоритма.

В переменную n вводится порядок матрицы системы, в переменную e максимальная абсолютная погрешность.

С помощью вспомогательной процедуры ReadSystem в двумерный массив a и одномерный массив b вводится c клавиатуры расширенная матрица системы. Начальное прибижение предполагается равным нулю. Оба массива и переменные n и e передаются функции Seidel.

В функции Seidel исследуется сходимость системы, и в том случае если система не сходится, выполнение функции прекращается с результатом false.

В ходе каждой итерации вычисляется новое приближение и и абсолютная погрешность.

Когда полученная погрешность становится меньше заданной, выполнение функции прекращается.

Полученное решение выводится на экран при помощи вспомогательной процедуры WriteX. 2.2.4. Листинг программы и результаты работы. Uses CRT Const maxn 10 Type Data Real Matrix Array1 maxn, 1 maxn of Data Vector Array1 maxn of Data Процедура ввода расширенной матрицы системы Procedure ReadSystemn Integer var a Matrix var b Vector Var i, j, r Integer Begin r WhereY GotoXY2, r WriteA For i 1 to n do begin GotoXYi 6 2, r Writei GotoXY1, r i 1 Writei2 end GotoXYn 1 6 2, r Writeb For i 1 to n do begin For j 1 to n do begin GotoXYj 6 2, r i 1 Readai, j end GotoXYn 1 6 2, r i 1 Readbi end End Процедура вывода результатов Procedure WriteXn Integer x Vector Var i Integer Begin For i 1 to n do Writelnx, i xi End Функция, реализующая метод Зейделя Function Seideln Integer a Matrix b Vector var x Vector e Data Boolean Var i, j Integer s1, s2, s, v, m Data Begin Исследуем сходимость For i 1 to n do begin s 0 For j 1 to n do If j i then s s Absai, j If s Absai, i then begin Seidel false Exit end end Repeat m 0 For i 1 to n do begin Вычисляем суммы s1 0 s2 0 For j 1 to i - 1 do s1 s1 ai, j xj For j i to n do s2 s2 ai, j xj Вычисляем новое приближение и погрешность v xi xi xi - 1 ai, i s1 s2 - bi If Absv - xi m then m Absv - xi end Until m e Seidel true End Var n, i Integer a Matrix b, x Vector e Data Begin ClrScr WritelnПрограмма решения систем линейных уравнений по методу Зейделя Writeln WritelnВведите порядок матрицы системы макс. 10 Repeat Write Readn Until n 0 and n maxn Writeln WritelnВведите точность вычислений Repeat Write Reade Until e 0 and e 1 Writeln WritelnВведите расширенную матрицу системы ReadSystemn, a, b Writeln Предполагаем начальное приближение равным нулю For i 1 to n do xi 0 If Seideln, a, b, x, e then begin WritelnРезультат вычислений по методу Зейделя WriteXn, x end else WritelnМетод Зейделя не сходится для данной системы Writeln End. Программа решения систем линейных уравнений по методу Зейделя Введите порядок матрицы системы макс. 10 4 Введите точность вычислений .01 Введите расширенную матрицу системы A 1 2 3 4 b 1 4.1 0.1 0.2 0.2 21.14 2 0.3 5.3 0.9 -0.1 -17.82 3 0.2 0.3 3.2 0.2 9.02 4 0.1 0.1 0.2 -9.1 17.08 Результат вычислений по методу Зейделя x1 5.208E00 x2 -4.2028E00 x3 3.03E00 x4 -1.80E00.