Текст подпрограммы и версий 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