|
Текст подпрограммы и версий adg1r_p.zip adg1e_p.zip adg1c_p.zip |
Тексты тестовых примеров tadg1r_p.zip tadg1e_p.zip tadg1c_p.zip |
Вычисление определителя матрицы методом Гаусса с выбором ведущего элемента по столбцу.
Для матрицы А выполняется разложение вида Q*А = L*U, где Q - матрица перестановок, L, U - треугольные матрицы и матрица L имеет единичные диагональные элементы. Определитель матрицы А вычисляется как произведение определителя матрицы Q и диагональных элементов матрицы U и записывается в виде:
det A = D1*2D2, где 0.0625 ≤ D1 < 1.
В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.
procedure ADG1R(var A :Array of Real; var D1 :Real; var D2 :Integer;
var S :Array of Integer; var N :Integer);
Параметры
| A - | вещественный двумерный массив размера N на N, в котором задается исходная матрица; |
| D1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| D2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| IS - | целый вектор длины N, используемый как рабочий; |
| N - | заданный порядок исходной матрицы (тип: целый). |
Версии
| ADG1E - | вычисление определителя матрицы, заданной с расширенной (Extended) точностью, методом Гаусса с выбором ведущего элемента по столбцу. |
| ADG1C - | вычисление определителя комплексной матрицы C с выбором ведущего элемента по столбцу. |
Вызываемые подпрограммы
| AFG1R - | треугольное разложение матрицы методом Гаусса с выбором ведущего элемента по столбцу. |
| AFG1E - | треугольное разложение матрицы, заданной с расширенной (Extended) точностью, методом Гаусса с выбором ведущего элемента по столбцу. |
| AFG1C - | треугольное разложение комплексной матрицы методом Гаусса с выбором ведущего элемента по столбцу. |
Замечания по использованию
| 1. |
В подпрограмме АDG1E массив А и переменная D1 имеют тип Extended. | |
| 2. | В подпрограмме АDG1С массив А и переменная D1 имеют тип Сomplex. |
Unit TADG1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, ADG1R_p;
function TADG1R: String;
implementation
function TADG1R: String;
var
D2,N :Integer;
D1 :Real;
S :Array [0..3] of Integer;
const
A :АRRay [0..15] of Real = ( 5.0,7.0,6.0,5.0,7.0,10.0,8.0,7.0,6.0,8.0,10.0,
9.0,5.0,7.0,9.0,10.0 );
begin
Result := '';
N := 4;
ADG1R(A,D1,D2,S,N);
Result := Result + Format('%s',[' D1=']);
Result := Result + Format('%20.16f',[D1]) + #$0D#$0A;
Result := Result + Format('%s',[' D2=']);
Result := Result + Format('%3d',[D2]) + #$0D#$0A;
UtRes('TADG1R',Result); { вывод результатов в файл TADG1R.res }
exit;
end;
end.
Результат:
D1 = 0.0625, D2 = 4,
т.е. det A = 0.0625*24 = 1.