Текст подпрограммы и версий
aee6r_p.zip , aee6e_p.zip
Тексты тестовых примеров
taee6r_p.zip , taee6e_p.zip

Подпрограмма:  AEE6R (модуль AEE6R_p)

Назначение

Вычисление плотности распределения собственных значений симметричной трехдиагональной матрицы на заданном полуинтервале.

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

Подпрограмма AEE6R строит последовательность точек

      V = X0 < X1 < X2 ... < XM-1 < XM = U ,

разбивающую заданный полуинтервал  (V, U) на заданное число  (М) равных частей. Для каждого полученного полуинтервала  (ХK - 1, ХК),  К = 1, ... М, вычисляется МW (К) - число собственных значений симметричной трехдиагональной матрицы, принадлежащих полуинтервалу (ХК - 1, ХК).

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

procedure AEE6R(var A :Array of Real; var B :Array of Real;
                N :Integer; var V :Real; var U :Real; M :Integer;
                var MW :Array of Integer);

Параметры

A - вещественный вектор длины N, содержащий диагональные элементы симметричной трехдиагональной матрицы;
B - вещественный вектор длины N, содержащий в последних N - 1 компонентах поддиагональные элементы симметричной трехдиагональной матрицы;
N - порядок симметричной трехдиагональной матрицы (тип: целый);
V, U - соответственно нижняя и верхняя границы заданного полуинтервала (тип: вещественный);
M - заданное число разбиений исходного полуинтервала (тип: целый);
MW - целый вектор длины М, содержащий вычисленные значения плотности.

Версии

AEE6E - вычисление плотности распределения собственных значений симметричной трехдиагональной матрицы, заданной с расширенной (Extended) точностью, на заданном полуинтервале.

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

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

  1. 

Подпрограмма АЕЕ6R не сохраняет исходные векторы А и В.

  2. 

В подпрограмме АЕЕ6E параметры А и В имеют тип Extended.

  3.  Подпрограмма АЕЕ6R может быть использована и для вычисления плотности распределения собственных значений комплексной эрмитовой трехдиагональной матрицы на заданном полуинтервале. Для этого нужно предварительно привести комплексную эрмитову трехдиагональную матрицу к вещественной симметричной трехдиагональной матрице преобразованием подобия (например, обратиться к подпрограмме АFЕ0С).

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

Unit TAEE6R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AEE6R_p;

function TAEE6R: String;

implementation

function TAEE6R: String;
var
N,M,_i :Integer;
V,U :Real;
MW :Array [0..19] of Integer;
const
A :Array [0..49] of Real = ( 1.0,49.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0 );
B :Array [0..49] of Real = ( 0.0,7.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0 );
begin
Result := '';  { результат функции }
N := 50;
V := -13.0;
U := 7.0;
M := 20;
AEE6R(A,B,N,V,U,M,MW);
Result := Result + #$0D#$0A;
for _i:=0 to 19 do
 begin
  Result := Result + Format('%6d ',[MW[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAEE6R',Result);  { вывод результатов в файл TAEE6R.res }
exit;
end;

end.

Результаты:

      MW(1)   =  MW(2)   = ... =  MW(13)  =  0 , 
      MW(14)  =  49 , 
      MW(15)  =  MW(16)  = ... =  MW(20)  =  0 .