работа на тему: «Решение систем линейных уравнений. Метод Гаусса. Алгоритм оптимального исключения неизвестных по столбцам с выбором главных элементов по строкам преобразовав матрицу а в эквивалентную верхнюю левую треугольную матрицу»

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

 ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ 

ВЫСШЕГО ПРОФЕСИОНАЛЬНОГО ОБРАЗОВАНИЯ



«РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ им А.И.ГЕРЦЕНА»





Кафедра информационных и коммуникационных технологий













Курсовая работа

на тему:

«Решение систем линейных уравнений. Метод Гаусса.                                                                  Алгоритм оптимального исключения неизвестных по столбцам                                                                      с выбором главных элементов по строкам                                                                              преобразовав матрицу А в эквивалентную верхнюю левую треугольную матрицу»























Выполнил:

студентка 2 курса 1 гр

института информационных технологий

Смирнова Е.Г.



Проверил:

кандидат педагогических наук, доцент

С.В.Гончарова

































Санкт-Петербург

2005 год

Содержание

Введение

Постановка  задачи

		вывод рекуррентной формулы

		блок-схема

		код программы

		контрольный пример

3.   Библиография 































































































Введение

	Решение систем линейных алгебраических уравнений – одна из основных задач вычислительной линейной алгебры. Хотя задача решения системы линейных уравнений сравнительно редко представляет самостоятельный интерес для приложений, от умения эффективно решать такие системы часто зависит сама возможность математического моделирования самых разнообразных процессов с применением ЭВМ. Значительная часть численных методов решения различных (в особенности – нелинейных) задач включает в себя решение систем линейных уравнений как элементарный шаг соответствующего алгоритма.

	Одна из трудностей практического решения систем большой размерности связанна с ограниченностью оперативной памяти ЭВМ. Хотя объем оперативной памяти вновь создаваемых вычислительных машин растет очень быстро, тем не менее, еще быстрее возрастают потребности практики в решении задач все большей размерности. В значительной степени ограничения на размерность решаемых систем можно снять, если использовать для хранения матрицы внешние запоминающие устройства. Однако в этом случае многократно возрастают как затраты машинного времени, так и сложность соответствующих алгоритмов. Поэтому при создании вычислительных алгоритмов линейной алгебры большое внимание уделяют способам компактного размещения элементов матриц в памяти ЭВМ.

К счастью, приложения очень часто приводят к матрицам, в которых число ненулевых элементов много меньше общего числа элементов матрицы. Такие матрицы принято называть разреженными. Одним из основных источников разреженных матриц являются математические модели технических устройств, состоящих из большого числа элементов, связи между которыми локальны. Простейшие примеры таких устройств – сложные строительные конструкции и большие электрические цепи.

	Известны примеры решенных в последние годы задач, где число неизвестных достигало сотен тысяч. Естественно, это было бы невозможно, если бы соответствующие матрицы не являлись разреженными (матрица системы из 100 тыс. уравнений в формате двойной точности заняла бы около 75 Гбайт).

Множество прикладных и чисто математических задач приводят к необходимости решения систем линейных алгебраических уравнений. Без преувеличения можно утверждать, что это одна из важнейших задач вычислительной математики.

Значимость задачи породила целый ряд методов ее решения. Среди этих методов есть универсальные и специализированные (т.е. применимые лишь к системам, имеющим некоторые специальные свойства). Методы отличаются друг от друга эффективностью, требованиями к объемам  машинной памяти (при  реализации на ЭВМ), закономерностями накопления ошибок в ходе расчетов. Не существует одного метода, который можно было бы во всех случаях предпочесть всем остальным, и поэтому знакомство с несколькими методами является обязательным для квалифицированного вычислителя.

Как известно из курса алгебры, число неизвестных в системе может быть больше числа уравнений или равно ему. Если число неизвестных больше числа уравнений, то на первом этапе стандартными алгебраическими методами  задача сводится к промежуточной задаче, в которой число неизвестных равно  числу уравнений. С точки зрения вычислителя истинная проблема состоит именно в решении такой системы, и поэтому  в данной  работе я рассмотрю лишь такую ситуацию.

Итак, перед нами система n линейных алгебраических уравнений с n неизвестными:

                        (1.1)



Запись матрицы в такой форме достаточно громоздка, и при первой возможности я буду впредь использовать матричную форму записи, совершенно равносильную (1.1):

 AX=B

А - матрица, X – вектор-столбец неизвестных, B- вектор-столбец свободных членов.

Методы решения систем вида (1.1) можно разделить на два класса. К первому относятся прямые методы. С помощью таких методов в принципе можно в результате конечного числа шагов получить точные значения неизвестных. При этом предполагается, что и коэффициенты в правой части, и элементы столбца свободных членов – числа точные, а все вычисления производятся без округлений. Однако практически такое может произойти и в исключительных случаях или может быть связано с решением специального класса задач (например, когда решениями являются только целые числа). К подобным методам относятся:

		Метод определителей (метод Крамера) хорошо известный из курса алгебры;

		Матричное решение: X=A-1B (если известна обратная матрица);

		Различные варианты метода исключения неизвестных (метода Гаусса).

Чаще всего прямые методы реализуются на ЭВМ, и в процессе вычислительной ошибки округления и погрешности арифметических действий неизбежны. В силу этого название «точный»  не вполне соответствует существу дела (но является традиционным).

Практическое применение первых двух методов может оказаться неэффективным или вообще невозможным. Если попробовать решать  «в лоб» систему 15 линейных уравнений с 15 неизвестными с помощью формулы Крамера, то придется вычислить 16 определителей порядка 15, что приведет к выполнению примерно 2*16*15!*14 умножений и сложений. Для выполнения  этих  вычислений на ЭВМ с быстродействием 106  арифметических операций в секунду потребуется почти  10 недель непрерывной работы. С практической точки зрения  при  достаточно больших размерах системы матричное решение также является малопривлекательным, поскольку задача нахождения обратной матрицы сама по себе не проще задачи решения системы.

Ко второму классу методов решения систем линейных алгебраических уравнений относятся различные итерационные методы. К ним относятся:

	Метод простой итерации;

	Метод Зейделя.



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

Итерационные методы применяют главным образом для решения задач большой размерности, когда использование прямых методов невозможно из-за ограничений в доступной оперативной памяти ЭВМ или из-за необходимости выполнения чрезмерно большого числа арифметических операций. Большие системы уравнений, возникающие в основном в приложениях, как правило, являются разреженными. Методы исключения для систем с разреженными матрицами неудобны, например, тем, что при их использовании большое число нулевых элементов превращается в ненулевые и матрица теряет свойство разреженности. В противоположность им при использовании итерационных методов в ходе итерационного процесса матрица не меняется, и она, естественно, остается разреженной. Большая эффективность итерационных методов по сравнению с прямыми методами тесно связанна с возможностью существенного использования разреженности матриц.

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































2. Постановка задачи:

Решение  систем линейных уравнений. Метод Гаусса. Алгоритм оптимального исключения неизвестных по столбцам и с выбором главных элементов по строкам, преобразовав матрицу А в эквивалентную верхнюю левую треугольную матрицу.

2.1. Вывод рекуррентной формулы

Рассмотрим метод  Гаусса оптимального исключения неизвестного по столбцам. В методе оптимального исключения принцип преобразования матрицы аналогичен классическому методу последовательного исключения. 

В численном методе Гаусса решения систем линейных уравнений  АХ=В преобразуем в  эквивалентную треугольную систему.

Решение  этой задачи сводится сводиться к двум этапам.

1 этап. Прямой ход.

Матрица А преобразуется в эквивалентную ей левую верхнюю треугольную матрицу, таким же преобразованиям подвергается и вектор-столбец свободных членов В, который обычно присоединяется к матрице А справа как n+1 столбец, но я присоединю его слева как  1 столбец для того, чтобы удобнее было вычислять неизвестные данной нам матрицы.





j=1                          j=1

0



    А



 2 этап. Обратный ход.

На этом ходе находятся корни уравнений методом обратной подстановки.

Алгоритм действия на 1 этапе.

На этапе прямого хода мы должны получить левую верхнюю треугольную матрицу, диагональные элементы должны быть не единичными.



Для  этого необходимо:

		преобразование матрицы А начнем из верхнего правого угла, где расположен элемент а1n+1  и будем двигаться сверху вниз и справа налево

	двигаясь сверху вниз под диагональю в каждом (n-i+1)-том столбце будем получать нули

	двигаясь справа налево включая столбец свободных членов обеспечивает эквивалентное преобразование элементов начиная с (n+1) столбца. 

Рассмотрим подробно вывод рекуррентных формул для первого этапа.

1.Для получения нуля на месте ведомого элемента ak(n-i+1) необходимо получить новый коэффициент преобразования для k-той строки. Он равен:

    (2.1)

2.Далее в каждом цикле частичного обнуления (n-i+1)-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования , с точки зрения математики это описывается следующим образом:

  (2.2)

где i = 1÷(n-1)

      k = (i+1) ÷ n

      j = (n-i+2)÷1

В данном методе на этапе прямого кода выполняется на n операций делений меньше , чем в методе последовательного исключения поскольку в каждом цикле обнуления столбца на подготовку коэффициентов преобразования  требуется на одно деление меньше по сравнению с количеством делений элементов ведущей строки вместе с тем этот выигрыш является кажущимся , так как на втором этапе (обратный код) требуется ровно  на n операций деления больше, чем в методе последовательного исключения диагональные элементы не равны единице. 

Алгоритм действий на этапе обратного хода.

В результате преобразования имеем:





Обобщенные формулы для нахождения корней систем линейных уравнений имеет следующий вид:  

   (2.3)

  (2.4)

где i = (n-1)÷1















































































начало

Массив mas(i,j), n

i:= 0

max:=|mas(i,n-i)|

j1:= n - i

j:= n - i

m5:=|mas(i,j)|

m5 > max

max:=m5

j1:= j

j:= j - 1

j =>1

j1:= n - i

l:= 0

p5:=mas(l,n-i)

mas(l,n-i):=mas(l,j1)

Л

14

18

17

16

2.2 Блок-схема







Л

13

mas(l,j1):=p5

l:= l +1

l <= n-1

i:= i +1

i <= n-1

Массив mas(i,j), n

j:= j -1

j:= n-i

i:= 0 

mas(k,j):=mas(k,j)-p*mas(i,j)

p:=mas(k,n-i)/mas(i,n-i)

j => 0

k:= k +1

Л

29

12

10

3

31

k:= i+1 

k <= n-1



Л

28

i:= i +1

i <= n  - 2

Массив mas(i,j), n

Массив mas(i,j), n

S:= 0

i:= n - 2

x(0):=mas(n-1,0)/mas(n-1,1)

Л

43

21

j:= 0

S:=S+mas(i,j+1)*x(j)

x(n-i-1):=mas(i,0)-S

j:= j +1

j <= n  -  i - 2

i:= i - 1

i >= 0



Л

42

i:= 0

x(i)

i:= i +1

i <= n  - 1

остановка



2.3 Код программы

Module Module1



    Sub Main()

        Dim mas(,) As Decimal = New Decimal(,) {{17, 5, 2, 4, 6}, {13, 4, 3, 1, 5}, {22, 6, 5, 3, 8}, {20, 3, 10, 5, 2}}

        Dim x(3), p, p5, S As Decimal

        Dim i, k, n, j, i1, j1, t, m, m5, l, m1, max As Integer

        Dim strSt As String

        n = 4

        Console.WriteLine("Метод оптимального исключения по столбцам ")

        Console.WriteLine("с выбором главного элемента по строкам")

        'вывод матрицы на экран 

        Console.WriteLine()

        Console.WriteLine("Исходная матрица")

        Console.WriteLine()

        For i = 0 To n - 1

            For j = 0 To n

                strSt = FormatNumber(mas(i, j), 2)

                Console.Write("   {0}", strSt)

            Next j

            Console.WriteLine()

        Next i

        Console.WriteLine()

        'выбор главного элемента по строкам

        For i = 0 To n - 1

            max = Math.Abs(mas(i, n - i))

            j1 = n - i

            For j = n - i To 1 Step -1

                m5 = Math.Abs(mas(i, j))

                If m5 > max Then

                    max = m5

                    j1 = j

                End If

            Next j



            If j1 = n - i Then

                'конец алгоритма выбора главного элемента

                Console.WriteLine()

            Else

                ' Перестановка столбцов

                For l = 0 To n - 1

                    p5 = mas(l, n - i)

                    mas(l, n - i) = mas(l, j1)

                    mas(l, j1) = p5

                Next l

            End If

        Next i

        Console.WriteLine("Преобразованная матрица")

        For t = 0 To n - 1

            For j = 0 To n

                strSt = FormatNumber(mas(t, j), 2)

                Console.Write("   {0}", strSt)

            Next j

            Console.WriteLine()

        Next t

        Console.WriteLine()

        Console.WriteLine("Преобразовываем матрицу в треугольную левую верхнюю")

        'процедура прямого хода

        'преобразовываем матрицу в левую верхнюю треугольную

        For i = 0 To n - 2



            For k = i + 1 To n - 1

                p = mas(k, n - i) / mas(i, n - i)

                For j = n - i To 0 Step -1

                    mas(k, j) = mas(k, j) - p * mas(i, j)

                Next j

            Next k



            'вывод преобразованной матрицы

            For t = 0 To n - 1

                For j = 0 To n

                    strSt = FormatNumber(mas(t, j), 2)

                    Console.Write("   {0}", strSt)

                Next j

                Console.WriteLine()

            Next t

            Console.WriteLine()

        Next i



        'вывод полученной матрицы

        Console.WriteLine("Полученная матрица")

        For i = 0 To n - 1

            For j = 0 To n

                strSt = FormatNumber(mas(i, j), 2)

                Console.Write("   {0}", strSt)

            Next j

            Console.WriteLine()

        Next i

        Console.WriteLine()



        'процедура обратного кода

        x(0) = mas(n - 1, 0) / mas(n - 1, 1)

        i = n - 2

        Do

            S = 0

            For j = 0 To n - i - 2

                S = S + mas(i, j + 1) * x(j)

                x(n - i - 1) = (mas(i, 0) - S) / mas(i, n - i)

            Next j

            i = i - 1

        Loop While i >= 0



        'вывод результатов

        Console.WriteLine("Полученные значения х")

        For i = 0 To n - 1

            Console.Write("x{0}=", i + 1)

            strSt = FormatNumber(x(i), 2)

            Console.Write(strSt)

            Console.WriteLine()

        Next i



    End Sub



End Module































2.4 Контрольный пример

Решить систему линейных уравнений методом Гаусса оптимального исключения неизвестных по столбцам, преобразовав данную матрицу в эквивалентную ей левую верхнюю треугольную матрицу с выбором главного элемента по строкам.



Преобразованная матрица



Получим новый коэффициент преобразования для каждой k-ой строки. 







2. Для обнуления 5-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .



3. Получим новый коэффициент преобразования для каждой k-ой строки. 





4. Для обнуления 4-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .



5. Получим новый коэффициент преобразования для каждой k-ой строки. 



6. Для обнуления 3-го столбца из каждой ведомой k-той строки вычитается ведущая строка кратная коэффициенту преобразования .



7. Вычислим переменные х:

 







Сравним полученные результаты с результатом программы



Метод оптимального исключения по столбцам

с выбором главного элемента по строкам



Исходная матрица



   17,00   5,00   2,00   4,00   6,00

   13,00   4,00   3,00   1,00   5,00

   22,00   6,00   5,00   3,00   8,00

   20,00   3,00   10,00   5,00   2,00



Преобразованная матрица

   17,00   4,00   2,00   5,00   6,00

   13,00   1,00   3,00   4,00   5,00

   22,00   3,00   5,00   6,00   8,00

   20,00   5,00   10,00   3,00   2,00



Преобразовываем матрицу в треугольную левую верхнюю

   17,00   4,00   2,00   5,00   6,00

   -1,17   -2,33   1,33   -0,17   0,00

   -0,67   -2,33   2,33   -0,67   0,00

   14,33   3,67   9,33   1,33   0,00



   17,00   4,00   2,00   5,00   6,00

   -1,17   -2,33   1,33   -0,17   0,00

   4,00   7,00   -3,00   0,00   0,00

   5,00   -15,00   20,00   0,00   0,00



   17,00   4,00   2,00   5,00   6,00

   -1,17   -2,33   1,33   -0,17   0,00

   4,00   7,00   -3,00   0,00   0,00

   31,67   31,67   0,00   0,00   0,00



Полученная матрица

   17,00   4,00   2,00   5,00   6,00

   -1,17   -2,33   1,33   -0,17   0,00

   4,00   7,00   -3,00   0,00   0,00

   31,67   31,67   0,00   0,00   0,00



Полученные значения х

x1=1,00

x2=1,00

x3=1,00

x4=1,00















Библиография



Ф.Р.Гантмахер. Теория матриц (издание третье)./Ф.Р.Гантмахер. Москва: „Наука”, главная редакция физико-математической литературы, 1967г.

Математический энциклопедический словарь. Москва: „Советская энциклопедия”, 1988г.

Интернет-ресурсы (exponenta.ru)

Выводила рекуррентные формулы студентка 2 курса института информационных технологий Смирнова Е.Г.