|
Текст подпрограммы и версий aee8r_p.zip , aee8e_p.zip |
Тексты тестовых примеров taee8r_p.zip , taee8e_p.zip |
Вычисление собственных значений симметричной трехдиагональной матрицы, принадлежащих данному полуинтервалу, и определение номеров этих собственных значений.
Пусть все собственные значения заданной симметричной трехдиагональной матрицы Т порядка N перенумерованы в порядке неубывания :
λ1 ≤ λ2 ≤ ... ≤ λN-1 ≤ λN
Подпрограмма AEE8R определяет номера собственных значений матрицы Т, принадлежащих данному полуинтервалу (V, U), и производит вычисление этих собственных значений методом бисекций.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.
procedure AEE8R(var A :Array of Real; var B :Array of Real;
N :Integer; var L :Real; var U :Real;
var M1 :Integer; var M2 :Integer;
var RU :Array of Real; var W :Array of Real);
Параметры
| A - | вещественный вектор длины N, содержащий диагональные элементы симметричной трехдиагональной матрицы; |
| B - | вещественный вектор длины N, содержащий в последних N - 1 компонентах поддиагональные элементы симметричной трехдиагональной матрицы; |
| N - | заданный порядок симметричной трехдиагональной матрицы (тип: целый); |
| V, U - | соответственно нижняя и верхняя границы заданного полуинтервала (тип: вещественный); |
| M1, M2 - | номера соответственно наименьшего и наибольшего собственных значений, принадлежащих данному полуинтервалу (тип: целый); |
| RU - | вещественный вектор длины N, используемый как рабочий; |
| W - | вектор длины N, с М1 - й по М2 - ю компоненту которого содержатся вычисленные собственные значения принадлежащие заданному полуинтервалу. |
Версии
| AEE8E - | вычисление собственных значений симметричной трехдиагональной матрицы, заданной с расширенной (Extended) точностью, принадлежащих данному полуинтервалу, и определение номеров этих собственных значений. |
Вызываемые подпрограммы : нет
Замечания по использованию
| 1. |
Подпрограмма АЕЕ8R не сохраняет исходные векторы А и В. | |
| 2. |
Если заданный полуинтервал не содержит ни одного собственного значения симметричной трехдиагональной матрицы, то подпрограмма АЕЕ8R присваивает М1 и М2 нулевые значения. | |
| 3. |
В подпрограмме АЕЕ8E параметры А, В, V, U, RU, W должны иметь тип Extended. | |
| 4. | Подпрограмма АЕЕ8R может быть использована для вычисления собственных значений комплексной эрмитовой трехдиагональной матрицы, принадлежащих данному полуинтервалу, и определения номеров этих собственных значений. Для этого нужно предварительно привести комплексную эрмитовую трехдиагональную матрицу к вещественной симметричной трехдиагональной матрице преобразованиями подобия (например, обратиться к подпрограмме АFЕ0С). | |
| 5. |
Подпрограмма АЕE8R использует служебную подпрограмму AMA1R. Подпрограмма АЕE8E использует служебную подпрограмму AMA1E. |
Unit TAEE8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AEE8R_p;
function TAEE8R: String;
implementation
function TAEE8R: String;
var
N,_i,M1,M2 :Integer;
L,U :Real;
RU :Array [0..49] of Real;
W :Array [0..49] of Real;
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
for _i:=0 to 49 do
W[_i] := 0.0; //начальное обнуление массива
Result := ''; { результат функции }
N := 50;
L := -2.0;
U := 7.0;
AEE8R(A,B,N,L,U,M1,M2,RU,W);
Result := Result + #$0D#$0A;
for _i:=0 to 49 do
begin
Result := Result + Format('%20.16f ',[W[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format(' %5d %5d ',[M1,M2]) + #$0D#$0A;
UtRes('TAEE8R',Result); { вывод результатов в файл TAEE8R.res }
exit;
end;
end.
Результаты:
M1 = 1, M2 = 49 ,
W(1) = W(2) = ... = W(49) = -1.34*10-11