|
Текст подпрограммы и версий aeb2r_p.zip , aeb2e_p.zip |
Тексты тестовых примеров taeb2r_p.zip , taeb2e_p.zip |
Вычисление собственных значений вещественной симметрической ленточной матрицы, принадлежащих заданному интервалу, их номеров и соответствующих собственных векторов.
Симметричная ленточная матрица приводится ортогональными преобразованиями Гивенса к трехдиагональной форме, которая используется для вычисления методом бисекций собственных значений, принадлежащих данному интервалу, их номеров и соответствующих собственных векторов с помощью метода обратных итераций.
Дж.Х.Уилкинсон, Агебраическая проблема собственных значений, "Наука", М., 1970.
procedure AEB2R(N :Integer; MB :Integer; MM :Integer;
var M :Integer; var RLB :Real; var RUB :Real;
var A :Array of Real; var EV :Array of Real;
var V :Array of Real; var IRAB1 :Array of Integer;
var RAB1 :Array of Real; var RAB2 :Array of Real;
var IERR :Integer);
Параметры
| N - | порядок исходной матрицы (тип: целый); |
| NC - | заданное число кодиагоналей исходной матрицы, включая главную диагональ (тип: целый); |
| MM - | оценка сверху числа собственных значений исходной матрицы, принадлежащих заданному интервалу (тип: целый); если фактическое число собственных значений М, принадлежащих заданному интервалу, больше, чем ММ, то собственные значения не вычисляются; |
| M - | целая переменная, в которой запоминается вычисленное число собственных значений, принадлежащих заданному интервалу; |
|
RLB - RUB | заданные нижняя и верхняя границы интервала собственных значений (тип: вещественный); если RLВ > RUВ, то собственные значения не вычисляются; |
| A - | вещественный двумерный массив размера N*NC, в котором задается исходная симметричная ленточная матрица в компактной форме; |
| EV - | вещественный вектор длины ММ, содержащий вычисленные в возрастающем порядке собственные значения; |
| V - | вещественный двумерный массив размерности N на ММ, содержащий в своих первых М столбцах вычисленные ортонормированные собственные векторы; |
| IRAB - | целый вектор длины ММ, содержащий индексы расположенных в возрастающем порядке М вычисленных собственных значений; |
| RAB1 - | вещественный двумерный массив размерности N*NC, используемый как рабочий; |
| RAB2 - | вещественный вектор длины N * (2*NС+4), используемый как рабочий; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом значение IЕRR |
| - равно 3*N+1, если значение ММ меньше истинного числа собственных значений М на интервале; | |
| - равно - К, если для вычисления собственного вектора с индексом К не нашлось ни одного начального вектора, обеспечивающего приемлемое приближение; при этом компоненты этого собственного вектора полагаются равными нулю. Если таких собственных векторов несколько, то значение IЕRR равно индексу последнего из них. |
Версии
| AEB2E - | вычисление собственных значений вещественной симметрической ленточной матрицы, принадлежащих заданному интервалу, их номеров и соответствующих собственных векторов с расширенной (Extended) точностью. |
Вызываемые подпрограммы
| UTAE10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АЕВ2R, AEB2E. |
Замечания по использованию
|
Подпрограммы АЕВ2R, AEB2E не сохраняют исходную ленточную матрицу, но в последних двух столбцах массива А запоминается ее трехдиагональная форма. | |
| В подпрограмме AEB2E параметры A, EV, V, RAB1, RAB2, RLB, RUB имеют тип Extended . |
Unit TAEB2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AEB2R_p;
function TAEB2R: String;
implementation
function TAEB2R: String;
var
MB,I,N,MM,M,IERR,J,_i :Integer;
RLB,RUB :Real;
A :Array [0..20] of Real;
V :Array [0..48] of Real;
EV :Array [0..6] of Real;
IRAB1 :Array [0..6] of Integer;
RAB1 :Array [0..20] of Real;
RAB2 :Array [0..69] of Real;
label
_1;
begin
Result := ''; { результат функции }
for I:=1 to 7 do
begin
A[(I-1)+14] := Power(10.0,7-I);
A[(I-1)+7] := 10.0;
_1:
A[(I-1)+0] := 1.0;
end;
Result := Result + Format('%s',
[' ВЫЧИСЛЕНИЕ НЕКОТОРЫХ СОБСТВЕННЫХ ЗНАЧЕНИЙ ' + #$0D#$0A +
' И СООТВЕТСТВУЮЩИХ СОБСТВЕННЫХ ВЕКТОРОВ' + #$0D#$0A +
' YРАВНЕНИЯ BИДA:AX=LAMBDA*X, ГДЕ A - ' + #$0D#$0A +
' ВЕЩЕСТВЕННАЯ СИММЕТРИЧЕСКАЯ ЛЕНТОЧНАЯ МАТРИЦА ']) + #$0D#$0A;
N := 7;
МВ := 3;
ММ := 7;
RLB := -6.0;
RUB := IntPower(10.0,7);
AEB2R(N,MB,MM,M,RLB,RUB,A,EV,V,IRAB1,RAB1,RAB2,IERR);
Result := Result + Format('%s',[#$0D#$0A + ' PEЗУЛЬTAT']) + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + ' EV' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[EV[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + ' IERR' + #$0D#$0A]);
Result := Result + Format('%8d ',[IERR]) + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + ' V' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for _i:=0 to 48 do
begin
Result := Result + Format('%20.16f ',[V[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAEB2R',Result); { вывод результатов в файл TAEB2R.res }
exit;
end;
end.
Результаты:
Собственные значения в интервале (-6.E0, 10.E0**7)
| -5.67228961584E+00 |
| 1.55306282219E+01 |
| 1.01029236853E+02 |
EV = | 1.00010120030E+03 |
| 1.00000101020E+04 |
| 1.00000001010E+05 |
| 1.00000000011E+06 |
Собственные векторы, соответствующие вычисленным в интервале ( - 6.E0, 10.E0**7) собственным значениям:
| -0.4602311E-11 | | 1.0165937E-11 |
| 6.1941045E-10 | | 3.2304868E-09 |
| 4.5962454E-06 | | -1.0198015E-05 |
V1 = | -1.0790686E-04 | , V2 = | -2.2101839E-04 | ,
| -4.4909463E-02 | | 1.0403192E-01 |
| 5.5756761E-01 | | -8.2263142E-01 |
| -8.2891585E-01 | | -5.5897666E-01 |
| -8.7876556E-11 | | 1.2133718E-09 |
| -1.2077304E-07 | | -9.9880319E-06 |
| 8.9075420E-05 | | -1.1122780E-03 |
V3 = | 1.1174350E-02 | , V4 = | 9.9993692E-01 | ,
| -9.9349727E-01 | | 1.1120421E-02 |
| -1.1133146E-01 | | 1.1224759E-03 |
| -2.1061961E-02 | | 2.2365282E-05 |
| -1.0089779E-06 | | 1.1111235E-05 |
| -1.1112329E-04 | | -9.9999999E-01 |
| 9.9999937E-01 | | -1.1111211E-04 |
V5 = | 1.1112103E-03 | , V6 = | -1.0112234E-05 | ,
| 1.0213258E-04 | | -2.1244794E-09 |
| 2.1347731E-07 | | -0.1013453E-11 |
| 1.0427767E-08 | | -3.1713216E-12 |
| 1.0000000E+00 |
| 1.1111122E-05 |
| 1.0102132E-06 |
V7 = | 2.1234289E-11 | ,
| 0.1010306E-11 |
| -2.1027951E-16 |
| -3.1713216E-14 |
IERR = 0