1.3. Сравнение прямых и итерационных методов
Системы линейных алгебраических уравнений можно решать как с помощью прямых, так и и итерационных методов. Для систем уравнений средней размерности чаще использют прямые методы.
Итерационные методы применяют главным образом для решения задач большой размерности, когда использование прямых методов невозможно из-за ограниченииий в доступной оперативной памяти ЭВМ или из-за необходимости выполнения черезмерно большого числа арифметических операций. Большие системы уравнений, возникающие в основном в приложениях, как правило являются разреженными. Методы исключения для систем с разреженным и матрицами неудобны, например, тем, что при их использовании большое число нулевых элементов превращается в ненулевые и матрица теряет свойство разреженности. В противоположность им при использованнии итерационных методов в ходе итерационного процесса матрица не меняется, и она, естественно, остается разреженной. Большая эффективность итерационных методов по сравнению с прямыми методами тесно связанна с возможностью существенного использования разреженности матриц.
Применение итерационных методов для качественного решения большой системы уравнений требует серьезного использования ее структуры, специальных знаний и определенного опыта.
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. Листинг программы и результаты работы
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 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.0000000000E+00
x2 = -4.0000000000E+00
x3 = 3.0000000000E+00
x4 = -2.0000000000E+00
2.2 Программа решения систем линейных уравнений по методу Зейделя
2.2.1. Постановка задачи. Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида
a11x1
+ a12x2
+ … + a1nxn
= b1
,
a21x2
+ a22x2
+ … + a2nxn
= b2
,
. . . . . . . . . . . . .
an1x1 + an2x2 + … + annxn = bn
для n ≤ 10 по методу Зейделя.
... 10.4 9.7 9.7 -8.4 Результат вычислений по методу Гаусса x1 = 5.0000000000E+00 x2 = -4.0000000000E+00 x3 = 3.0000000000E+00 x4 = -2.0000000000E+00 2.2 Программа решения систем линейных уравнений по методу Зейделя 2.2.1. Постановка задачи. Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида a11x1 + a12x2 + … + a1nxn = b1 , a21x2 + ...
... матрицы могут вычисляться по следующим формулам: 6. Метод квадратного корня Использование разложения на взаимно транспонированные треугольные матрицы при решении систем алгебраических уравнений называется метод квадратного корня. Метод разложения на транспонированные треугольные матрицы имеет модификацию, заключающуюся в выделении в произведении диагональной матрицы D с элементами на ...
... вычисляют в следующем порядке: xjn, xjn–1, …, xj1. 3. Метод Зейделя 3.2.1. Приведение системы к виду, удобному для итераций. Для того чтобы применить метод Зейделя к решению системы линейных алгебраических уравнений Ax = b с квадратной невырожденной матрицей A, необходимо предварительно преобразовать эту систему к виду x = Bx + c. Здесь B – квадратная матрица с элементами bij (i, ...
... на языке Turbo Pascal 7.0 для решении систем линейных алгебраических уравнений, используя метод простой итерации. 1.2 Математическая формулировка задачи Пусть А – невырожденная матрица и нужно решить систему где диагональные элементы матрицы А ненулевые. 1.3 Обзор существующих численных методов решения задачи Метод Гаусса В методе Гаусса матрица СЛАУ с помощью равносильных ...
0 комментариев