Текст подпрограммы и версий
afg2r_p.zip , afg2e_p.zip , afg2c_p.zip
Тексты тестовых примеров
tafg2r_p.zip , tafg2e_p.zip , tafg2c_p.zip

Подпрограмма:  AFG2R (модуль AFG2R_p)

Назначение

Треугольное разложение вещественной матрицы методом Гаусса с выбором ведущего элемента по всей матрице.

Математическое описание

Для заданной матрицы А выполняется факторизация вида QАT = LU, где Q и Т  - вычисляемые матрицы перестановок, L - нижняя, U - верхняя треугольные матрицы. Матрица L имеет единичные диагональные элементы. Матрицы Q и Т осуществляют соответственно перестановку строк и столбцов исходной матрицы и обеспечивают стратегию выбора ведущего элемента по всей матрице.

В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях типа Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОРТРАНе", вып.3, Изд-во МГУ, 1973.

Использование

procedure AFG2R(var A :Array of Real; var S :Array of Integer;
                N :Integer);

Параметры

A - двумерный N*N массив, в котором задается исходная матрица (тип: RЕАL); по окончании работы подпрограммы в массиве А на соответствующих местах запоминаются элементы матрицы U и поддиагональные элементы матрицы L;
S - двумерный N*2 массив, в столбцах которого запоминаются векторы, порождающие матрицы перестановок; при этом в S (К,1) и S (К,2) запоминаются соответственно номера строки и столбца, переставленных на К - ом шаге с К - ой строкой и К - ым столбцом (тип: целый);
N - заданный порядок исходной матрицы (тип: целый);

Версии

AFG2E - треугольное разложение матрицы, заданной с расширенной (Extended) точностью, методом Гаусса с выбором ведущего элемента по всей матрице.
AFG2C - треугольное разложение комплексной матрицы методом Гаусса с выбором ведущего элемента по всей матрице.

Вызываемые подпрограммы: нет

Замечания по использованию

  1. 

В подпрограмме АFG2E массив А имеет тип Extended.

  2. 

В подпрограмме АFG2С массив А имеет тип Complex.

  3.  Поскольку факторизация Гаусса требует N - 1 шагов, то S (N, i) = 0,  i = 1, 2.

Пример использования

Unit tafg2r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFG2R_p;

function tafg2r: String;

implementation

function tafg2r: String;
var
J,I :Integer;
S :Array [0..7] of Integer;
const
A :Array [0..15] of Real = ( 7.9,8.5,4.3,3.2,5.6,-4.8,4.2,-1.4,5.7,0.8,-3.2,
-8.9,-7.2,3.5,9.3,3.3 );
begin
Result := '';  { результат функции }
AFG2R(A,S,4);
Result := Result + #$0D#$0A;
for I:=1 to 4 do
 begin
  for J:=1 to 4 do
   begin
    Result := Result + Format('%20.16f ',[A[(I-1)+(J-1)*4]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('tafg2r',Result);  { вывод результатов в файл tafg2r.res }
exit;
end;

end.

Результат:

                 |  9.300    4.300    4.200  -3.200 |
                 | -0.774  11.229    8.852   3.223 |
      A  =    |  0.376   0.613  -11.805   0.029 |  ;
                 |  0.355   0.149     0.357  -8.255 |

                 | 34 |
                 | 34 |
      S  =    | 34 | ;
                 |   0 |

 это означает, что

                 |  1          0         0         0 |
                 | -0.774  1         0         0 |
      L  =    |  0.376   0.613  1         0 |  ;
                 |  0.355   0.149  0.357  1 |

                 | 9.300   4.300    4.200  -3.200 |
                 | 0         11.229    8.852   3.223 |
      U  =    | 0           0       -11.805   0.029 | 
                 | 0           0           0.       -8.255 |