Текст подпрограммы и версий
afg3r_p.zip
Тексты тестовых примеров
tafg3r_p.zip

Подпрограмма:  AFG3R (модуль AFG3R_p)

Назначение

Приведение пары вещественных матриц к верхней почти треугольной форме ортогональными преобразованиями с помощью QZ - алгоритма.

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

Для заданных вещественных матриц А и В размера N*N вычисляются такие ортогональные матрицы Q и Z размера N*N, что матрица QАZ является верхней почти треугольной, а матрица QВZ - верхней треугольной.

В результате работы подпрограммы АFG3R матрица QАZ помещается на место матрицы А, матрица QВZ - на место матрицы В. Левостороннее преобразование Q не сохраняется, правостороннее преобразование Z по желанию пользователя может сохраняться.

С.В.Мoler and G.W.Stewart, Аn Аlgorithm for Generalized Mатrix Еigenvalue Рroblems, SIАМ J. Numer.Аnal., 10, 1973.

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

procedure AFG3R(var A :Array of Real; var B :Array of Real;
                var Z :Array of Real; N :Integer; M :Integer);

Параметры

A, B - вещественные двумерные массивы размера N*N, в которых задаются исходные матрицы А и В; в результате работы подпрограммы в массивы А и В записываются соответственно верхняя почти треугольная матрица QАZ и верхняя треугольная матрица QВZ ;
Z - вещественный двумерный массив размера N*N, который в результате работы подпрограммы по желанию пользователя может содержать матрицу Z правостороннего преобразования; если матрица Z не нужна, параметр Z в подпрограмме не используется;
N - заданный порядок исходных матриц А и В (тип: целый);
M - задает режим работы подпрограммы (тип:целый); при этом
М = 0 - если преобразование Z сохраняется,
М = 1 - если преобразование Z не сохраняется.

Версии: нет

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

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

  1. 

Матрица преобразования Z необходима для вычисления соответственных векторов обобщенной проблемы Аx = λВx по правилу x = Zy, где y - собственные векторы обобщенной проблемы QАZy = λQВZy .

  2.  Если матрица преобразования Z не нужна, т.е. когда М = 1, то в качестве фактического параметра Z можно использовать параметр А.

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

Unit tafg3r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFG3R_p;

function tafg3r: String;

implementation

function tafg3r: String;
var
J,I,N,M :Integer;
Z :Array [0..8] of Real;
const
A :Array [0..8] of Real = ( 1.0,-10.0,5.0,0.5,2.0,1.0,0.0,0.0,0.5 );
B :Array [0..8] of Real = ( 0.5,3.0,4.0,0.0,3.0,0.5,0.0,0.0,1.0 );
begin
Result := '';  { результат функции }
Result := Result + Format('%s',
 [' ПРИВЕДЕНИЕ ПАРЫ ВЕЩЕСТВЕННЫХ МАТРИЦ К ВЕРХНЕТРЕУГОЛЬНОЙ ' + #$0D#$0A +
 ' И ВЕРХНЕЙ ПОЧТИ ТРЕУГОЛЬНОЙ ФОРМЕ ОРТОГОНАЛЬНЫМИ ' + #$0D#$0A +
 ' ПРЕОБРАЗОВАНИЯМИ']) + #$0D#$0A; 
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  for J:=1 to 3 do
   begin
    Result := Result + Format(' A %20.16f ',
 [A[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  for J:=1 to 3 do
   begin
    Result := Result + Format(' B %20.16f ',
 [B[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
N := 3;
M := 0;
AFG3R(A,B,Z,N,M);
Result := Result + Format('%s',[' PEЗYЛЬTAT' + #$0D#$0A]) + #$0D#$0A; 
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  for J:=1 to 3 do
   begin
    Result := Result + Format(' A %20.16f ',
 [A[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  for J:=1 to 3 do
   begin
    Result := Result + Format(' B %20.16f ',
 [B[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  for J:=1 to 3 do
   begin
    Result := Result + Format(' Z %20.16f ',
 [Z[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('tafg3r',Result);  { вывод результатов в файл tafg3r.res }
exit;
end;

end.

Результаты:

              |   1.89057  -2.06068   0.27000 |
      A  =    | -11.06462   0.94174   0.35338 |
              |   0.00000  -0.39941  -0.09705 |

              | -5.02494  -2.23447   0.65793 |
      B  =    |  0.00000   2.07058   0.71846 |
              |  0.00000   0.00000  -0.14417 |

              |  1.00000   0.00000   0.00000 |
      Z  =    |  0.00000   0.99805   0.06238 |
              |  0.00000   0.06238  -0.99805 |