Решение систем линейных алгебраических уравнений методом Гаусса

Автор: Пользователь скрыл имя, 29 Октября 2011 в 22:23, курсовая работа

Описание работы

Цель курсовой работы: освоить метод Гаусса для решения систем линейных алгебраических уравнений, и научится составлять алгоритмы решения систем линейных алгебраических уравнений

Содержание

Введение……………………………………………………………………….. 4
1.Теоретическая часть………………………………………………………. 5
1.1. Основные определения…………………………………………………. 5
1.2. Действия над матрицами………………………………………………. 6
1.2.1. Сумма и разность матриц……………………………………………. 6
1.2.2. Умножение матриц…………………………………………………….. 6
1.3. Абсолютная величина и норма матрицы………………………………8
1.4. Метод Гаусса…………………………………………………………….... 9
1.4.1. Схема единственного деления………………………………………... 9
1.4.2. Схема частичного выбора……………………………………………. 11
1.4.3. Схема полного выбора…………………………………………………11
1.5. Метод Гаусса-Зейделя……………………………………………………12
1.5.1. Приведение системы к виду, удобному для итераций……………. 12
1.5.2. Описание метода………………………………………………………. 13
1.6. Сравнение прямых и итерационных методов………………………. 14
2. Практическая часть………………………………………………………. 15
2.1. Программа решения систем линейных уравнений по методу Гаусса
2.1.1 Постановка задачи…………………………………………………….. 15
2.1.2. Текстовый пример……………………………………………………. 15
2.1.3. Описание алгоритма…………………………………………………. 15
2.1.4.Листинг программы и результаты работы………………………... 16
Заключение…………………………………………………………………... 32
Список используемой литературы………………………………………... 33

Работа содержит 1 файл

курсовая 2 курс.doc

— 238.50 Кб (Скачать)

      x3 = b31x1b32x2 +  … + b3,n–1xn–1b3nxnc3 ,

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

      xn = bn1x1bn2x2bn3x3 + … + bn,n–1xn–1 +  cn ,

в которой  на главной диагонали матрицы  B находятся нулевые элементы. Остальные элементы выражаются по формулам

      bij = –aij / aii, ci = bi / aii (i, j = 1, 2, …, n, j ≠ i)

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

1.5.2. Описание метода

     Введем  нижнюю и верхнюю треугольные  матрицы

  0 0 0 … 0  0 b12 b13 … b1n

            b21 0 0 … 0  0 0 b23 … b2n

      B1b31 b32 0 … 0 ,  B2 =  0 0 0 … b3n

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

  bnbnbn… 0  0 0 0 … 0

     Заметим, что B = B1 + B2 и поэтому решение x исходной системы удовлетворяет равенству

      x = B1x + B2 x + c .

     Выберем начальное приближение x(0) = [x1(0), x2(0), …, xn(0)]T. Подставляя его в правую часть равенства при верхней треугольной матрице B2 и вычисляя полученное выражение, находим первое приближение

      x(1) = B1x(0) + B2x(1)

Подставляя  приближение x(1), получим

      x(2) = B1x(1) + B2x(2)

Продолжая этот процесс далее, получим последовательность x(0), x(1), …, x(n), приближений к вычисляемых по формуле

      x(k+1) = B1(k+1) + B2(k) + c

или в  развернутой форме записи

      x1(k+1) =  b12x2(k)b13x2(k) + … + b1nxn(k)c1 ,

      x2(k+1)b21x1(k+1) +  b23x3(k) +  … + b2nxn(k)c2 ,

      x3(k+1)b31x1(k+1)b32x2(k+1) +  … + b3nxn(k)c3 ,

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

      xn(k+1)bn1x1(k+1)bn2x2(k+1)bn3x3(k+1) + … +  cn .

Объединив приведение системы к виду, удобному для итераций и метод Зейделя в одну формулу, получим

      xi(k+1) = xi(k)aii–1(∑j=1i–1 aijxj(k+1) + ∑j=1n aijxi(k)bi).

Тогда достаточным  условием сходимоти метода Зейделя  будет

      j=1, j≠i n | aij | < | aii |

(условие доминированния  диагонали).

      Метод Зейделя иногда называют также методом  Гаусса-Зейделя, процессом Либмана, методом последовательных замещений.

1.6. Сравнение прямых и итерационных методов

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

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

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

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

    2.1 Программа решения систем линейных уравнений по методу Гаусса

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. Листинг программы и результаты работы

Пример  №1:

Uses CRT;

Const

     maxn = 10;

Type

    Data = Real;

    Matrix = Array[1..maxn, 1..maxn] of Data;

    Vector = Array[1..maxn] of Data;

{ Процедура ввода  расширенной матрицы системы  }

Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);

Var

   i, j, r: Integer;

Begin

     r := WhereY;

     GotoXY(2, r);

     Write('A');

     For i := 1 to n do begin

         GotoXY(i*6+2, r);

         Write(i);

         GotoXY(1, r+i+1);

         Write(i:2);

     end;

     GotoXY((n+1)*6+2, r);

     Write('b');

     For i := 1 to n do begin

         For j := 1 to n do begin

             GotoXY(j * 6 + 2, r + i + 1);

             Read(a[i, j]);

         end;

         GotoXY((n + 1) * 6 + 2, r + i + 1);

         Read(b[i]);

     end;

End;

{ Процедура вывода результатов }

Procedure WriteX(n :Integer; x: Vector);

Var

   i: Integer;

Begin

     For i := 1 to n do

         Writeln('x', i, ' = ', x[i]);

End; 
 

{ Функция, реализующая  метод Гаусса }

Function Gauss(n: Integer; a: Matrix; b: Vector; var x:Vector): 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 Abs(a[i, k]) > m then begin

                m := Abs(a[i, 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 := a[k, j];

                a[k, j] := a[l, j];

                a[l, j] := t;

            end;

            t := b[k];

            b[k] := b[l];

            b[l] := t;

         end;

  { Преобразуем матрицу }

         For i := k + 1 to n do begin

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

             For j := 1 to n do

                 If j = k then

                    a[i, j] := 0

                 else

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

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

             end; 

     end;

     { Вычисляем решение }

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

     For i := n - 1 downto 1 do begin

         t := 0;

         For j := 1 to n-i do

             t := t + a[i, i + j] * x[i + j];

         x[i] := (1 / a[i, i]) * (b[i] - t);

     end;

     Gauss := true;

End; 

Var

    n, i: Integer;

    a: Matrix ;

    b, x: Vector;

Begin

      ClrScr;

      Writeln('Программа решения систем  линейных уравнений по методу  Гаусса');

      Writeln; 

      Writeln('Введите порядок матрицы системы (макс. 10)');

      Repeat

             Write('>');

             Read(n);

      Until (n > 0) and (n <= maxn);

Информация о работе Решение систем линейных алгебраических уравнений методом Гаусса