|
Текст подпрограммы и версий aig2r_p.zip aig2e_p.zip aig2c_p.zip |
Тексты тестовых примеров taig2r_p.zip taig2e_p.zip taig2c_p.zip |
Обращение вещественной матрицы методом Жордана с выбором ведущего элемента по всей матрице.
Заданная матрица А N - го порядка приводится к единичной матрице Е последовательностью элементарных преобразований Жордана L1, L2, ... LN и матрицами перестановок Р и Q так, что
LNLN-1 ... L1PAQ = E ,
при этом А- 1 = QLNLN-1 ... L1Р. Матрицы Р и Q осуществляют соответственно перестановку строк и столбцов матрицы А и обеспечивают стратегию выбора ведущего элемента по всей матрице.
В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях типа Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.
procedure AIG2R(var A :Array of Real; var S :Array of Integer;
N :Integer);
Параметры
| A - | двумерный N на N массив, в котором задается исходная матрица; по окончании работы подпрограммы в массиве А запоминается вычисленная обратная матрица (тип: вещественный); |
| S - | двумерный N на 2 массив, используемый подпрограммой как рабочий (тип: целый); |
| N - | заданный порядок матрицы (тип: целый). |
Версии
| AIG2E - | обращение матрицы, заданной с расширенной (Extended) точностью, методом Жордана с выбором ведущего элемента по всей матрице. |
| AIG2C - | обращение комплексной матрицы методом Жордана с выбором ведущего элемента по всей матрице. |
Вызываемые подпрограммы : нет
Замечания по использованию
| 1. |
В подпрограмме АIG2E массив А имеет тип External. |
| 2. | В подпрограмме АIG2С массив А имеет тип Сomplex. |
Unit TAIG2R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, AIG2R_p;
function TAIG2R: String;
implementation
function TAIG2R: String;
var
_i :Integer;
S1 :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 := '';
AIG2R(А,S1,4);
Result := Result + #$0D#$0A;
for _i:=0 to 15 dО
begin
Result := Result + Format('%15.5f ',[A[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
exit;
end;
end.
Результат:
| 0.0505 0.0542 0.0062 0.0350 |
| 0.0518 -0.0846 0.0721 -0.0003 |
A-1 = | -0.0084 0.0432 0.0202 -0.1211 |
| -0.0497 0.0279 0.0790 -0.0577 |