Текст подпрограммы и версий afg2r_p.zip , afg2e_p.zip , afg2c_p.zip |
Тексты тестовых примеров tafg2r_p.zip , tafg2e_p.zip , tafg2c_p.zip |
Треугольное разложение вещественной матрицы методом Гаусса с выбором ведущего элемента по всей матрице.
Для заданной матрицы А выполняется факторизация вида 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 |