Вторая пачка часть 42
Пр嬬и¬му-щество такого под¬хо¬да состоит в том, что тре-буется толь¬ко n рବбо¬чих ячеек, не нужно ни¬ка-кой ед謬нич¬ной мат¬рицы, не из¬вле¬ка¬ют¬ся ни¬ка-кие квад¬рат¬ные кор¬¬ни, вы¬пол¬ня¬ет¬ся лишь n опе-ра¬ций деления. При боль¬ших n ко¬ли¬чес¬тво опе-раций умно¬же¬ния при¬бли¬жается к n3/2, что в не-сколь¬ко раз меньше, чем при ис¬поль¬зовании ста-н¬дартного алгоритма.
Рассмотрим про¬цедуру INVERS, по¬стро-ен¬ную на ос¬¬но¬ве та¬кого упро¬щенного алгоритма.
Формальные параметры прцедуры. Входные: n (тип in¬¬teger) - порядок матрицы A; A[1:n, 1:n] (тип real) - ис¬ход¬ная матрица. Вы¬ход-ные: A[1:n,1:n] (тип real) - матрица, ра第¬ме¬щен¬ная на месте исходной мат¬рицы A, в кто¬рой гла⬬-ная диагональ и над¬ди¬а¬го¬нальные эле¬мен¬ты пред¬ста⬬ляют собой элементы об¬ратной мат-рицы A-1.
PROCEDURE INVERS (N: INTEGER; VAR A MAS2);
VAR Y,P : REAL; I,J,K : INTEGER;
V : ARRAY [1..N-1] OF REAL;
BEGIN
FOR K:=1 TO N DO
BEGIN
{**** ЕСЛИ A[1,1]=0, ТО ВЫХОД ***}
IF A[1,1]=0 THEN EXIT;
P:=1.0/A[1,1];
FOR I:=2 TO N DO
V[I-1]:=A[1,I];
FOR I:=1 TO N-1 DO
BEGIN
A[I,N]:=-V[I]*P;
Y:=-V[I]*P;
FOR J:=I TO N-1 DO
A[I,J]:=A[I+1,J+1]+V[J]*Y
END ;
A[N,N]:=-P;
END ;
FOR I:=1 TO N DO
FOR J:=I TO N DO
A[I,J]:=-A[I,J]
END .
Приведенная процедура была получена путем пе¬ревода процедуры INVERS66 [Агеев и др., 1976] с язы¬ка AL¬GOL на язы¬к PASCAL и проверена на тех же при¬ме¬рах, что и в под-тверждениях к рас¬смат¬ри¬ва¬е¬мому ал¬го¬рит¬му, при¬ве¬ден¬ных в работах [Ran¬del, Brouden, 1962; Caffrey, 1962]. В част¬¬нос¬ти, для матрицы Вильсона
получено
.
Для матрицы пятого порядка, ис¬поль¬зо-ван¬ной в ка¬чес¬т¬ве теста в работе (Randel, Brouden, 1962), результат ока¬зал¬ся следующим:
.
Результаты тестирования на IBM PC/AT-386 пред¬ла¬га¬е¬мых процедур соответствуют результатам, пр謬¬ве¬ден¬¬ным в ра¬ботах [Randel, Brouden,1962; Caffrey, 1962] , с до¬ста¬точ¬ной степенью точности (? < 10-5)
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа