- •§ 4. Алгебра матриц
- •4.2. Вычисление собственных векторов и собственных значений матриц по методу данилевского
- •4.3. Вычисление собственных векторов и собственных значений симметрической матрицы методом якоби
- •4.4. Задача обращения матриц и вычисления главного определителя по схеме гаусса
- •4.5. Обращение симметрической матрицы методом квадратных корней
- •4.6. Обращение матрицы и решение системы линейных алгебраических уравнений
- •4.7. Умножение уплотненной симметрической матрицы на прямоугольную
- •4.8. Корректировка обратной матрицы после изменения одного элемента в прямой матрице
- •4.9. Матрица причинно-следственных отношений
4.7. Умножение уплотненной симметрической матрицы на прямоугольную
Произведение матрицы
A=||aij|| (i = 1, ..., m; j = 1, ..., n)
на матрицу
B=||bij || (i = 1, ..., n; j = 1, ..., p)
есть матрица
C=||cij|| (i = 1, ..., m; j = 1, ...,p),
элементы которой определяются формулой
, i=1, ..., m; j = 1,..., p.(1.50)
Из равенства (1.50) следует, что операция перемножения матриц определена только тогда, когда число столбцов матрицы Aравно количеству строк матрицыB. В случае если одна из перемножаемых матриц, например матрицаA,является симметрической, т.е.aij = aji, то она может быть уплотнена путем сведения к почти треугольной матрице (верхняя треугольная часть матрицыA,включая главную диагональ), которую из практических вычислительных соображений (экономия машинной памяти, ускорение поиска нужного элемента) удобно построчно переписать в виде одномерного массиваd [1:n×(n+1)/2]. Заметим, чтов этом случае в процессе выполнения соответствующей процедурызначения элементов исходной матрицыa[i, j] могут присваиваться элементамd[mi+j], гдеmi = =(2n -i) (i - 1) / 2. Отсюда следует, чтоmi+1=mi +n -i, т.е. значенияmi могут вычисляться рекурсивно, если положитьm0 = 0. Такое уплотнение симметрической матрицы может быть полезно, например, в том случае, когда она целиком не помещается в свободную часть оперативной памяти ЭВМ. Размещение результирующей матрицыCна месте вводимой матрицыBтакже позволяет оптимизировать затраты оперативной памяти.
Изложенный алгоритм реализован в процедуре multcram.
Формальные параметры процедуры.Входные:n(типinteger) -порядок квадратной матрицы A и количество строк прямоугольной матрицыB;d[1:n×(n+1)/2] (типreal) - вводимая в виде одномерного массиваdуплотненная матрица A;r (типinteger) - количество столбцов вводимой прямоугольной матрицыB;b[1:n, 1:r] (типreal) - матрицаB.Выходные:b[1:n, 1:r] (типreal) - выводимая на месте входной матрицы Bматрица-произведение C = A*B.
procedure multcram (d: mas1; n,r: integer;
var b:mas2);
var s:real; i,j,k,m : integer; v array [1..n] of real;
begin
for j:=1 to r do
begin
for i:=1 to n do
begin
s:=0; m:=i-n;
for k:=1 to n do
begin
if k <= i then m := m+n+1-k
else m:=m+1;
s:=s+d[m]*b[k,j]
end {k}; v[i]:=s
end {i};
for i:=1 to n do
b[i,j]:=v[i]
end {j};
end {multcram}.
Процедура multcram была получена из процедурыcram[Агеев, 1976]1путем ее перевода с языкаALGOLна языкPASCAL. Тестирование процедуры проводилось на IBM PC/AT-386 для тех же исходных данных, что и в работе Каффрей (1961):
.
При этом был получен верный результат:
.
4.8. Корректировка обратной матрицы после изменения одного элемента в прямой матрице
Пусть дана матрица A = M -1размерностью[n´n] и матрицаM', полученная в результате увеличения элементаm[i,j] матрицыMна величинуd. Тогда скорректированная матрицаB = (M')-1может быть эффективно вычислена по элементам матрицыA без обращения матрицыMпри помощи представленной процедурыadjust.
Формальные параметры процедуры.Входные:a[n,n] - (типreal) - исходная матрицаA;n(типinteger) - порядок матрицыA;i, j(типinteger) - индексы измененного элементаm[i, j] матрицы M;d(типreal) - величина изменения элементаm[i, j].Выходные:b[n, n] (типreal) - скорректированная матрица B.
procedure adjust (a:mas1;n,i,j: integer;
d:real; var b:mas1);
var t : real; r,s : integer;
begin t:=d/(a[j,i]*d+1);
for r:=1 to n do
for s:=1 to n do
b[r,s]:=a[r,s]-t*a[r,i]*a[j,s]
end {adjust};
Процедура adjustпредставляет собой перевод на языкPASCALопубликованной в работе [Агеев и др., 1976], исправленной, сокращенной и ординарно переработанной процедуры, опубликованной в работе [Herndon, 1961]. Тестирование процедурыadjustбыло выполнено наIBM PC/AT-286 для следующих исходных данных:
,n = 2,i = 1,j = 2,d= 3.
Результат корректировки
с точностью до ошибок округления совпал с точным решением
.
Замечание.Интересно, что исходной алгоритм[Herndon, 1961] проверялся дополнительно Р. Георгом (1962) для матриц порядкаn = 2, 3, ..., 10 при произвольных значенияхi, jислучайных приращенияхэлементаm[i, j] прямой матрицыM: -1.0 <d<< 1.0. По результатам корректировки рассчитывалось произведениеC=B*M ' ивычислялась погрешность каждого опытапо формуле
,
при этом во всех произведенных опытах значение eне превышало 2e-8.