Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторная работа №2
Система m линейных алгебраических уравнений с n неизвестными в общем виде может быть записана следующим образом:
(1.22)
или в матричном виде AX = B, где A - прямоугольная матрица размерности mn, X - вектор n-го порядка, B - вектор m-го порядка. Решением системы (1.22) называется такая упорядоченная совокупность чисел которая обращает все уравнения системы в верные равенства. Две системы называются эквивалентными (равносильными), если множества их решений совпадают.
Система линейных уравнений называется совместной, если она имеет хотя бы одно решение, и несовместной - в противном случае. Совместная система называется определенной, если она имеет единственное решение, и неопределенной - в противном случае. Система является определенной, если rang A = rang B, где матрица B, полученная из матрицы A добавлением столбца свободных членов, называется расширенной.
Если матрица A - квадратная и det A ¹ 0, то она называется неособенной (невырожденной), при этом система уравнений, имеющая неособенную матрицу A, совместна и имеет единственное решение.
МЕТОД ИСКЛЮЧЕНИЯ ГАУССА ДЛЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
Из курса линейной алгебры [Крылов и др., 1972; Курош, 1962; Фадеев, Фадеева, 1963 и др.] известно, что решение системы линейных уравнений можно просто найти по правилу Крамера - через отношение определителей. Но этот способ не очень удобен для решения систем уравнений с числом неизвестных > 5, т.е. когда найти определитель сложно, а при числе неизвестных > 10 нахождение определителя с достаточно высокой степенью точности становится самостоятельной вычислительной задачей. В этих случаях применяют иные методы решения, среди которых самым распространенным является метод Гаусса.
Запишем систему линейных уравнений (1.22) в виде
(1.24)
Если матрица системы верхняя треугольная, т.е. ее элементы ниже главной диагонали равны нулю, то все хj можно найти последовательно, начиная с хn, по формуле
. (1.25)
При j > k и аjj ¹ 0 этот метод дает возможность найти решение системы.
Метод Гаусса для произвольной системы (1.22) основан на приведении матрицы А системы к верхней или нижней треугольной. Для этого вычитают из второго уравнения системы первое, умноженное на такое число, при котором а21 = 0, т.е. коэффициент при х1 во второй строке должен быть равен нулю. Затем таким же образом исключают последовательно а31 , а41 , ..., аm1 . После завершения вычислений все элементы первого столбца, кроме а11, будут равны нулю.
Продолжая этот процесс, исключают из матрицы А все коэффициенты аij, лежащие ниже главной диагонали.
Построим общие формулы этого процесса. Пусть исключены коэффициенты из k - 1 столбца. Тогда ниже главной диагонали должны остаться уравнения с ненулевыми элементами:
Умножим k-ю строку на число
и вычтем ее из m-й строки. Первый ненулевой элемент этой строки обратится в нуль, а остальные изменятся по формулам
(1.26)
Произведя вычисления по формулам (1.26) при всех указанных индексах, исключим элементы k-го столбца. Такое исключение назовем циклом, а выполнение всех циклов назовем прямым ходом исключения.
После выполнения всех циклов получим верхнюю треугольную матрицу А системы (1.24), которая легко решается обратным ходом по формулам (1.25). Если при прямом ходе коэффициент аjj оказался равен нулю, то перестановкой строк перемещаем на главную диагональ ненулевой элемент и продолжаем расчет.
Если предположить, что аjj ¹ 0, то тогда можно применить подпрограмму gaus, решающую систему из n линейных уравнений.
Формальные параметры процедуры. Входные: n (тип integer) - порядок системы; а (тип real) - массив коэффициентов системы размером nn; b (тип real) - массив-строка свободных членов. Выходные: х (тип real) - массив-строка, в который помещается решение системы.
procedure gaus (n:integer; a : mas; b : mas1;
var x : mas1);
type mst = array [1..n] of real;
mss = array [1..n] of mst;
var a1 : mss; b1 : mst;
i, j, m, k : integer; h : real;
begin
for i := 1 to n do
begin
b1[i] := b[i];
for j := 1 to n do
a1 [i,j] := a[i,j];
end;
for i := 1 to n-1 do
for j := i+1 to n do
begin
a1[j,i] :=- a1[j,i] / a1[i,i];
for k := i+1 to n do
a1[j,k] := a1 [j,k] + a1[j,i]*a1[i,k];
b1[j] := b1[j] + b1[i]*a1[j,i];
end;
x[n] := b1[n] / a1[n,n];
for i := n-1 downto 1 do
begin
h := b1[i];
for j := i+1 to n do
h := h - x[j]*a1[i,j];
x[i] := h / a1[i,i];
end;
end.
Если контроль за невырожденностью матрицы А необходим, то можно предложить воспользоваться другой процедурой gaus1.
В отличие от первой процедуры здесь в выходных параметрах есть переменная tol, возвращающая 0 при нормальном завершении работы процедуры, или 1, если на главной диагонали один из элементов равен 0, или 2, если матрица А размерностью больше, чем 5050.
procedure gaus1 (n:integer; a : mas; b : mas1;
var x : mas1; var tol : integer);
type mst = array [1..50] of real;
mss = array [1..50] of mst;
var a1 : mss; b1 : mst;
i, j, m, k : integer; h : real;
begin
for i := 1 to n do
begin
b1[i] := b[i];
for j := 1 to n do a1 [i,j] := a[i,j];
end;
tol := 0;
if n > 50 then
begin
tol := 2;
exit;
end;
for i := 1 to n-1 do
for j := i+1 to n do
begin
if abs(a1[i,i])< 1.0e-10 then
begin
tol := 1;
exit;
end;
a1[j,i] :=- a1[j,i] / a1[i,i];
for k := i+1 to n do
a1[j,k] := a1 [j,k] + a1[j,i]*a1[i,k];
b1[j] := b1[j] + b1[i]*a1[j,i]
end;
if abs(a1[n,n]) < 1.0e-10 then
begin
tol := 1;
exit;
end;
x[n] := b1[n] / a1[n,n];
for i := n-1 downto 1 do
begin
if abs(a1[i,i]) < 1.0e-10 then
begin
tol := 1;
exit;
end;
h := b1[i];
for j := i+1 to n do h := h - x[j]*a1[i,j];
x[i] := h / a1[i,i];
end;
end.
По поводу приведенных алгоритмов можно сказать, что они не самые эффективные и пригодны для решения систем, имеющих невырожденные матрицы А и В с рангом не более 50, составленные из приблизительно одинаковых коэффициентов. Если между наибольшим и наименьшим из коэффициентов расстояние более чем 104, то эти алгоритмы применять не рекомендуется, так как погрешность вычислений будет такова, что может либо привести к вырожденной матрице А, либо дать в результате вектор Х с большой вычислительной погрешностью.
Для проверки работы процедур решим систему линейных уравнений методом Гаусса с точностью до 0.0001:
Коэффициенты, промежуточные результаты и окончательное решение приводятся в табл. 1.14. Подобные таблицы удобно использовать для ручного счета и проверки хода решения.
Таблица 1.14
Коэффициенты при неизвестных |
Cвободные |
Cтрочные |
|||
x1 |
x2 |
x3 |
x4 |
члены |
суммы |
0.68 0.21 0.11 -0.08 |
0.55 -0.13 0.84 0.15 |
-0.11 0.27 0.28 0.50 |
0.88 0.80 -0.06 0.12 |
2.15 0.44 0.83 1.16 |
2.85 -0.01 1.44 0.61 |
1 |
0.0735 |
-0.1618 |
0.1176 |
3.1618 |
4.1912 |
-0.1454 -0.18319 0.15590 |
0.30398 0.26220 -0.51290 |
-0.8247 0.0729 -0.1106 |
-0.22398 -0.48220 1.41290 |
-0.88015 -0.97847 0.94530 |
|
1 |
-2.09060 |
5.6719 |
1.54040 |
6.1217 |
|
-1.47643 -0.18697 |
4.79139 -0.99480 |
0.79920 1.17230 |
4.1136 -0.0095 |
||
1 |
-3.24410 |
-0.54110 |
-2.7851 |
||
-1.60130 |
1.07110 |
-0.5302 |
|||
1 |
-0.66890 |
0.3311 |
|||
2.8264 |
-0.3337 |
-2.7110 |
-0.6689 |
: РЕШЕНИЕ |
На практике применяют множество вариантов вычислительных схем метода Гаусса. Например, при приведении матрицы к верхней треугольной форме выбирают наибольший элемент (в строке или столбце), уменьшая вычислительную погрешность за счет деления на не самый маленький элемент. Такая вычислительная схема называется методом Гаусса с выбором ведущего элемента. Если же выбирать при приведении матрицы самый большой (по модулю) элемент из всех оставшихся, то такая схема будет называться методом Гаусса с выбором главного элемента. Последняя схема относится к наиболее популярным. Главное ее отличие от метода Гаусса, рассмотренного в п. 3.1, состоит в том, что при приведении матрицы А к верхней (или нижней) треугольной форме ее строки и столбцы переставляют так, чтобы наибольший из всех оставшихся элементов матрицы стал ведущим, и на него выполняется деление. Если матрица хорошо обусловлена, то в методе Гаусса с выбором главного элемента погрешности округления невелики.
Формальные параметры процедуры. Входные: n (тип integer) - целое положительное число, равное порядку исходной системы; aa (тип real) - массив из nn действительных чисел, содержащий матрицу коэффициентов системы (aa[1] = а11; aa[2] = а21; aa[3] = a31; ...; aa[n]= an1; aa[n +1]= =a12; aa[n + 2] = a22; ...; aa[2*n] = аn2; ...; aa[n*n] = аnn); b (тип real) - массив из n действительных чисел, содержащий столбец свободных членов исходной системы (b[1] = =b1; b[2] = b2; ...; b[n] = bn). Выходные: b (тип real) - массив из n действительных чисел (он же был входным) при выходе из подпрограммы, содержащий решения исходной системы (b[1]= x1; b[2] = x2; ...; b[n] = xn); ks (тип integer) - признак правильности решения или код ошибки: если ks = =0, то в массиве b содержится решение исходной системы; если ks = 1, то исходная система не имеет решения (главный определитель ее равен нулю).
procedure sinq (var a: mas11; var b : mas1;
var ks : integer; n : integer);
var tol, biga, aa, save : real;
jj,jy,ij,it,j,i, i1, imax, k, iqs, ixj, ixjx : integer;
jjx, ny, ia, ib, io, i2, ix, jx, ky : integer;
label Cont10;
begin tol := 0.0;
ks := 0;
jj := -n;
for j := 1 to n do
begin jy := j + 1;
jj := jj + n + 1;
biga := 0.0;
it := jj - j;
for i := j to N do
begin
ij := it + i;
aa := abs (a[ij]);
if (abs(biga)-aa) < 0.0 then
begin
biga := a[ij];
imax := i; end;
end;
if (abs(biga)-tol) <= 0.0 then
begin
ks := 1;
exit;
end;
i1 := j + n*(j-2);
it := imax - j;
for k := j to n do
begin
inc (i1,n);
I2:= i1 + it;
save := a[i1];
a[i1] := a[i2];
a[i2] := save;
a[i1] := a[i1] / biga;
end;
save := b[imax];
b[imax] := b[j];
b[j] := save / biga;
if j=n then goto Cont10;
iqs := n*(j-1);
for ix := jy to n do
begin
ixj := iqs + ix;
it := j - ix;
for jx := jy to n do
begin
ixjx := n*(jx-1) + ix;
jjx := ixjx + it;
a[ixjx] := a[ixjx] - a[ixj]*a[jjx];
end;
b[ix] := b[ix] - b[j]*a[ixj];
end;
end;
Cont10: ny := n - 1;
it := n*n;
i := 1;
j :=1;
for ky := 1 to ny do
begin ia := it - ky;
ib := n - ky;
io := n;
for k := 1 to ky do
begin
b[ib] := b[ib] - a[ia]*b[io];
Dec (ia,n);
Dec (io);
end;
end;
end.
Для проверки процедуры и сравнения с работой процедур в п. 3.1 решалась система уравнений, приведенная в качестве примера в п. 3.1. Вычисления проводились с точностью до 10-5. Результаты работы программы приведены далее.
Исходная матрица А |
Матрица В |
0.680000 0.050000 -0.110000 0.080000 0.210000 -0.130000 0.270000 -0.800000 -0.110000 -0.840000 0.280000 0.060000 -0.080000 0.150000 -0.500000 -0.120000 |
2.150000 0.440000 -0.830000 1.160000 |
Преобразованная матрица А |
Матрица В |
1.000000 0.210000 -0.110000 -0.080000 0.000000 1.000000 -0.145441 0.155882 0.000000 0.000000 1.000000 0.258130 0.000000 0.000000 0.000000 1.000000 |
3.161765 0.579636 -2.851572 -0.669070 |
РЕШЕНИЕ СИСТЕМЫ
2.826351 -0.333733 -2.711759 -0.669070 .
Метод квадратного корня основан на представлении матрицы А, составленной из коэффициентов системы в форме произведения треугольных матриц, что позволят свести решение заданной системы к последовательному решению двух систем с треугольными матрицами.
Метод квадратного корня применяется для решения системы линейных уравнений, коэффициенты которой образуют эрмитову симметрическую матрицу (эрмитова матрица совпадает с комплексно-сопряженной транспонированной A* = A).
Представим матрицу А в виде А = S*D S, где S - верхняя треугольная матрица с положительными элементами на главной диагонали; S*- транспонированная к матрице S; D- диагональная матрица, на диагонали которой находятся числа (+1) или ( 1).
Если матрицы S и D найдены, то заданная система AХ= = F может быть решена следующим путем:
AX = S* D S X = (S* D) S X = B Y = F, (1.28)
где S*D = В есть нижняя треугольная матрица и Y = S X - вспомогательный вектор.
Таким образом, решение системы АX = F равносильно решению двух треугольных систем ВY = F и SX =Y.
Пусть S = (sik) при i > k и sik ¹ 0, sii > 0; S* = (); D = =(dik), d =1; i ¹ k. Тогда из сравнения матриц А и S*DS получим
.
Ограничение в сумме получается из учета того факта, что в матрице S ниже главной диагонали элементы обращаются в нуль. Последнее равенство можно переписать несколько иначе, приняв для определенности k = min(k, l):
;
,
откуда окончательно получим формулы для вычисления элементов матриц S и D:
(1.29)
Единственным условием возможности определения sik является skk ¹ 0. Для построения матриц полагаем k = 1 и последовательно вычисляем все элементы первой строки s по формуле (1.29); затем полагаем k = 2 - и определяем элементы второй строки и т.д. Когда k = n, тогда найдены все элементы матриц S и D, а следовательно и S*. Затем последовательно выполняем вычисления (1.28):
S* Z = F; D Y = Z; S X = Y
обычным ходом по формулам
(1.30)
при i = 2, 3, ..., n.
Попутно заметим, что определитель матрицы А можно вычислить из выражения
. (1.31)
Этот метод экономичен, требует n3/3 арифметических действий и при больших n ( n > 50) вдвое быстрее метода Гаусса. Если за основу процедуры принять алгоритм П5.6 Дьяконова [1987], то тогда метод квадратного корня может быть реализован c помощью следующей процедуры:
procedure KVK (M, N : integer;
aa: array of real; bb : array of real;
var C: array of real);
type mas1=array [0..4] of real;
mas=array [0..4] of mas1;
var a : mas; j, k, i : integer; s, c1 : real;
begin
i := 0;
for j := 1 to m do
for k := 1 to n do
begin Inc (i); a[j,k] := aa [i]; end;
for j := 1 to N do
begin
for k := j to N do
begin
s := 0.0;
for i := 1 to M do s := s + a[i,j] * a[i,k];
c[k] := s;
end;
c1 := 0.0;
for i := 1 to M do с1 := c1 + a[i,j]*Bb[i];
for i := j to N do a[i,j] := c[i];
c[J] := c1;
end;
a[1,1] := sqrt (a[1,1]);
for j := 2 to N do a[1,j] := a[j,1] / a[1,1];
for i := 2 to n do
begin
s := 0.0;
for k := 1 to i-1 dо s := s + a[k,i]*a[k,i];
a[i,i] := sqrt (a[i,i] - S);
for j := i+1 to N do
begin
s := 0.0;
for k := 1 to i-1 do
S := S + A[K,I]*A[K,J];
A[I,J] := (A[J,I] - S) / A[I,I];
end;
end;
c[1] := c[1] / a[1,1];
for i := 2 to N do
begin s := 0.0;
for k := 1 to i-1do
s := s + a[k,i] * c[k];
c[i] := (c[i] - s) / a[i,i];
end;
c[n] := c[n] / a[n,n];
for i := n-1 downto 1 do
begin s := 0.0;
for k := i+1 to N do s := s + a[i,k] * c[k];
c[i] := (c[i] - s) / a[i,i];
end;
еnd.
Формальные параметры процедуры.Входные: m, N (тип integer) - m уравнений и n неизвестных определяют размер матрицы А. Для этой процедуры обязательно выполнение m > n, т.е. количество уравнений должно быть больше количества неизвестных (система переопределена), предельный разрешенный случай m = n; а - матрица, составленная из коэффициентов при неизвестных; В - массив, составленный из столбца свободных членов. Выходные: С - массив, в котором содержится решение системы.
Для проверки правильности работы процедуры решалась система 44 линейных уравнений методом квадратных корней с точностью 0.0001:
0.68X1 + 0.05X2 + 0.11X3 + 0.08X4 = 2.15 ;
0.05X1 + 0.13X2 + 0.27X3 + 0.80X4 = 0.44 ;
0.11X1 + 0.27X2 + 0.28X3 + 0.06X4 = 0.83 ;
0.08X1 + 0.80X2 + 0.06X3 + 0.12X4 = 1.16 ,
решение которой, полученное методом квадратных корней, будет следующим
Х 1 = 2.97; Х2 = 1.11; Х3 = 0.74; Х4 = -0.07.
Итерационные методы решения систем линейных уравнений дают возможность вычислить решение системы как предел бесконечной последовательности промежуточных решений. Причем каждое последующее решение в случае сходимости итерационного процесса считается более точным. В этих методах, в отличие от точных (см. п. 3.1 - 3.4), ошибки в начальном приближении и последующих вычислениях компенсируются, т.е. итерационные методы (в случае сходимости) позволяют получить решение более точное, чем прямые. Поэтому итерационные методы относят к самоисправляющимся.
Условия и скорость сходимости процесса в большей степени зависят от свойств уравнений, т.е. от свойств матрицы системы и от выбора начального приближения.
Пусть дана система линейных алгебраических уравнений (1.22) с неособенной матрицей. В методе простой итерации если аii ¹ 0, то исходная система может быть преобразована к виду хi = bi + aij хj , i ¹ j, т.е. из каждого уравнения последовательно выражают хi.
Здесь bi = Fi / аii; aij = - аij / аii. Таким образом, в матричном виде имеем Х = В + AХ. Полученную систему будем решать методом последовательных приближений. За нулевое приближение Х(0) можно принять матрицу В: Х(0)= = B, и далее, подставив найденные значения в исходную систему, получим Х (1) = В + A Х(0) .
При бесконечном повторении этой вычислительной схемы имеем
,
где и будет искомое решение системы.
Условия сходимости итерационного процесса определяются теоремами, которые приводятся нами без доказательств.
Теорема 1. Для того, чтобы последовательность приближений Х(n) сходилась, достаточно, чтобы все собственные значения матрицы A были по модулю меньше единицы: | li | < 1, i = 1, 2, ..., n.
Теорема 2. Если требовать, чтобы последовательность Х(n) сходилась к при любом начальном приближении Х(0) , то условие теоремы 1 является необходимым.
Применение теорем 1 и 2 требует знания всех собственных значений матрицы A, нахождение которых является очень не простой задачей. Поэтому на практике ограничиваются более простой теоремой, дающей достаточные условия сходимости.
Теорема 3. Если для системы Х = В + AХ выполняется хотя бы одно из условий :
;
,
то итерационный процесс сходится к единственному решению этой системы независимо от выбора начального приближения.
Для многих приложений важно знать, какой является скорость сходимости процесса, и оценить погрешность полученного решения.
Теорема 4. Если какая-либо норма матрицы A, согласованная с рассматриваемой нормой вектора Х, меньше единицы, то верна следующая оценка погрешности приближения в методе простой итерации:
.
В библиотеках стандартного математического обеспечения ЭВМ всегда можно найти несколько вариантов программы, выполняющей решение системы линейных уравнений методом простой итерации.
Так, можно предложить к использованию следующую удобную и достаточно эффективную процедуру, взятую из БСП БЭСМ для транслятора ALFA. Перевод на язык PASCAL выполнен авторами.
procedure ITER (n, ik :integer; eps : real;
a : mas1; b : mas; var x : mas);
var x1 : mas; s : real; i, j, k : integer;
begin x1 := b;
x := x1; k := 0;
repeat s := 0.0;
Inc(k);
for i := 1 to n do
begin
for j := 1 to n do x[i] := a[i,j]*x1[j] + b[j];
s := s + abs (x[i]-x1[i]);
end;
s := s / n; x1 := x;
until (s<eps) and (k>ik);
end.
Формальные параметры процедуры. Входные: А (тип real) - матрица, составленная из коэффициентов при Х преобразованного уравнения; В (тип real) - матрица, составленная из свободных членов; N (тип integer) - размерность матриц А (N N) и В(N); IK (тип integer) - предельно возможное количество итераций (введено для того, чтобы в случае расхождения процесса выйти из подпрограммы. Обычно решение достигается за 3-6 итераций); ЕРS (тип real) - заданная погрешность решения. Выходные: Х (тип real) - матрица, в которой находится решение системы.
Для примера методом простых итераций решена система 44 линейных уравнений с точностью до 0.0001:
Х1 = 0.08Х1 + 0.05Х2 + 0.11Х3 + 0.08Х4 + 2.15
Х2 = 0.05Х1 + 0.13Х2 + 0.27Х3 + 0.28Х4 + 0.44
Х3 = 0.11Х1 + 0.27Х2 + 0.28Х3 + 0.06Х4 + 0.83
Х4 = 0.08Х1 + 0.18Х2 + 0.06Х3 + 0.12Х4 + 1.16
Результаты вычислений представлены в табл. 1.16.
Таблица 1.16
X[1] |
X[2] |
X[3] |
X[4] |
№ итерации |
2.150000 |
0.440000 |
0.830000 |
1.160000 |
iter = 0 |
1.252800 |
1.484800 |
1.229600 |
1.299200 |
iter = 1 |
1.263936 |
1.523776 |
1.237952 |
1.315904 |
iter = 2 |
1.265272 |
1.528453 |
1.238954 |
1.317908 |
iter = 3 |
1.265433 |
1.529014 |
1.239075 |
1.318149 |
iter = 4 |
1.265452 |
1.529082 |
1.239089 |
1.318178 |
iter = 5 |
1.265454 |
1.529090 |
1.239091 |
1.318181 |
iter = 6 |
1.265455 |
1.529091 |
1.239091 |
1.318182 |
iter = 7 |
1.265455 1.529091 1.239091 1.318182 :РЕШЕНИЕ |
Этот метод относится к итерационным, имеет более быструю сходимость по сравнению с методом простых итераций (см. п. 3.5), но часто приводит к громоздким вычислениям.
Метод Зейделя применяют в двух расчетных схемах. Рассмотрим каноническую форму (для схемы итераций). Пусть система приведена к виду Х = Вх + b. В схеме простой итерации следующее приближение Х(k +1) находится путем подстановки предыдущего приближения Х(k) в правую часть выражения X(k +1) = B X (k) + b.
Для удобства рассуждений полагаем, что левые части уравнений содержат хi (элементы матрицы X(k +1)) с возрастающими номерами, т.е. сначала х1, затем х2, х3, ..., хn. Тогда решение системы уравнений Х = Вх + b на очередной (k +1) итерации будет иметь вид
, (1.32)
т.е. каждое очередное найденное приближение хi(k +1) сразу же используется для определения . Условия сходимости для итерационного метода Зейделя дают те же теоремы, что и в методе простых итераций.
Вторая форма метода Зейделя требует предварительного приведения системы (1.22) к виду, когда все диагональные элементы отличны от нуля. Если разложить матрицу А на сумму двух матриц R + С, где R - нижняя диагональная матрица, а С - верхняя с нулями на главной диагонали, то систему (1.22) можно записать как
Ax = (R + C)x = R x(k +1) + C x(k) = B
или x(k +1) = R -1B - R -1C x(k)
и тогда становится ясно, что метод Зейделя в канонической форме равносилен методу простой итерации, примененному к системе
X = R -1B - R -1C X.
Для решения системы линейных уравнений методом Зейделя можно использовать процедуру из п. 3.5, слегка ее модифицировав для случая системы n уравнений:
procedure ITER (n, ik :integer; eps : real;
a : mas1; b : mas; var x : mas);
var x1 : mas; s : real; i, j, k : integer;
begin x1 := b;
x := x1;
k := 0;
repeat s := 0.0;
Inc(k);
for i := 1 to n do
begin
for j := 1 to n do
x[i] := a[i,j]*x1[j] + b[j];
s := s + abs (x[i]-x1[i]);
x1 := x;
end;
s := s / n; x1 := x;
until (s<eps) and (k>ik);
end.
Формальные параметры процедуры такие же, как и в п. 3.5. Для сравнения решим такую же систему линейных уравнений, как в методе итераций (см. п. 3.5). Результат решения системы методом Зейделя (табл. 1.17) можно сравнить с результатами табл. 1.16.
Таблица 1.17
x[1] |
x[2] |
x[3] |
x[4] |
№ итерации |
2.150000 |
0.440000 |
0.830000 |
1.160000 |
iter = 0 |
1.252800 |
1.484800 |
1.229600 |
1.299200 |
iter = 1 |
1.263936 |
1.523776 |
1.237952 |
1.315904 |
iter = 2 |
1.265272 |
1.528453 |
1.238954 |
1.317908 |
iter = 3 |
1.265433 |
1.529014 |
1.239075 |
1.318149 |
iter = 4 |
1.265452 |
1.529082 |
1.239089 |
1.318178 |
iter = 5 |
1.265452 1.529082 1.239089 1.318178 :РЕШЕНИЕ |
Решить системы методом Гаусса; методом простой итерации и методом Зейделя с точностью , сравнить итерационные методы по числу итераций; сравнить по эффективности (трудность реализации метода, объем памяти, общие затраты времени) итерационные методы и метод Гаусса
а)
|
Исходные данные |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б)
|
Исходные данные |
|
|
|
Исходные данные |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|