Вторая пачка часть 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)
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz