Автор: Пользователь скрыл имя, 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
x3 = b31x1 + b32x2 + … + b3,n–1xn–1 + b3nxn+ c3 ,
. . . . . . . . . . . . . . . . . . . . . . .
xn = bn1x1 + bn2x2 + bn3x3 + … + 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 b
B1 = b31 b32 0 … 0 , B2 = 0 0 0 … b3n
. . . . . . . . . . . . . .
bn1 bn2 bn3 … 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);
Информация о работе Решение систем линейных алгебраических уравнений методом Гаусса