- •§ 4. Алгебра матриц
- •4.2. Вычисление собственных векторов и собственных значений матриц по методу данилевского
- •4.3. Вычисление собственных векторов и собственных значений симметрической матрицы методом якоби
- •4.4. Задача обращения матриц и вычисления главного определителя по схеме гаусса
- •4.5. Обращение симметрической матрицы методом квадратных корней
- •4.6. Обращение матрицы и решение системы линейных алгебраических уравнений
- •4.7. Умножение уплотненной симметрической матрицы на прямоугольную
- •4.8. Корректировка обратной матрицы после изменения одного элемента в прямой матрице
- •4.9. Матрица причинно-следственных отношений
4.6. Обращение матрицы и решение системы линейных алгебраических уравнений
Рассматриваемый здесь алгоритм итерационного типа объединяет задачи обращения матрицы Aи решения системы линейных алгебраических уравнений, задаваемых в матричной форме как
AТ x = b,(1.49)
где АТ- транспонированная матрицаA; x- вектор-строка неизвестных членов; b- вектор-строка свободных членов. В случае если заданоb = (1, 0, ..., 0), то процедураinvequ будет вычислять обращенную матрицуA-1, для другихbрешается уравнение (1.49)
Формальные параметры процедуры.Входные:n(типinteger) - размер матрицыА;а[1:n, 1:n] (типreal) - результат транспонирования матрицыA;b[1:n] (типreal) - вектор-строка b;count(типinteger) - параметр, задающий количество итераций (в работе Роека (1962), в которой приведена первоначальная, не оптимизированная версия алгоритма, не рекомендуется задаватьcountбольше 6);eps(типreal) - число, характеризующее точностьполученного приближения к теоретическому результату. Выходные:w[1:n, 1:n] (типreal) - матрицаA-1в случаеb= (1,0,...,0);x[1:n] (типreal) - вектор-строка решения уравнения (1.23);c[1:n,1:n] (типreal) - матрица, служащая для контроля точности. После выполнения процедуры в качестве первой строки матрицыcбудет векторbвдоль главной ее диагонали (1,0,...,0). В нулевом цикле первой итерации процедура invequ определяет в качестве строк матрицыwстолбцы матрицыa, для всех последующих итераций строки матрицыw, вычисленные вn-м цикле последней итерации, являются строками матрицыwнулевого цикла.
procedure invequ (a:mas2; b:mas1;
n,count: integer;eps:real;
var w: mas2; x: mas1; c:mas2);
var bh,z : real; i,j,p : integer;
label beg;
begin
for j:=1 to n do
for i:=1 to n do
w[j,i]:=a[i,j];
beg:
for j:=1 to n do
for i:=1 to n do
c[i,j]:=0;
bh:=b[1];
for j:=1 to n do
begin
for i:=1 to n do
c[j,j]:=c[j,j]+w[j,i]*a[i,j];
z:=bh/c[j,j];
for i:=1 to n do
w[j,i]:=z*w[j,i];
for i:=1 to n do
if i<>j then
begin
for p:=1 to n do
c[i,j]:=c[i,j]+a[p,j]*w[i,p];
if i=1 then z:=b[j] -c[i,j];
else z:=0-c[i,j];
for p:=1 to n do
w[i,p]:=bh*w[i,p]+z*w[j,p]
end;
bh:=1
end;
z:=abs(b[1]);
for j:=1 to n do
if abs(abs(c[j,j])-z) > eps then
begin
count:=count-1;
if count > 0 then go to beg
end;
for j:=1 to n do
x[j]:=w[1,j]
end.
Процедура invequполучена из процедурыsimult[Агеев, 1976]1путем ее перевода с языкаALGOLна языкPASCAL.
Проверка процедуры invequ производилась в целях контроля для тех же входных параметров, что и в работе Агеева (1976). При этом для входных параметров
,
n = 3,count = 3, 6, 10 иeps= 1e - 3, 1e - 5, 1e - 8, при всех значенияхcountиepsбыли получены следующие результаты, совпадающие с полученными Агеевым (1976):
1) для b= (1, 0, 0)
;
2) для b= (9, -2, 7),x= (-1, 2, 3)
.
Для матрицы, транспонированной от матрицы a, использованной в первом тесте, результаты также хорошо совпали с результатами, приведенными М.И. Агеевым (1976):
1) для b= (1, 0, 0):
;
2) для b= (9, -2, 7):x= (-0.42536367e-10, 3, 2),
,
точное решение уравнения (1.23), как указано Агеевым (1976), при этих входных данных x = (0, 3, 2).