Вторая пачка часть 186
ВЫЧИСЛЕННЫЕ СОБСТВЕННЫЕ ЗНА-ЧЕНИЯ РАЗМЕЩАЮТСЯ В ПОРЯДКЕ ВОЗРАСТАНИЯ В МАССИВЕ D НА МЕСТЕ ДИАГОНАЛЬНЫХ ЭЛЕМЕНТОВ.
СОБСТВЕННЫЕ ВЕКТОРЫ ФОРМИРУЮТСЯ В МАССИВЕ Z [1:N, 1:N] НА МЕСТЕ МАТРИЦЫ ОРТОГОНАЛЬНЫХ ПРЕОБРАЗОВАНИЙ Z. ПРИ РАБОТЕ ПРОЦЕДУРЫ ПРОИСХОДИТ ВЫХОД ПО КОМАНДЕ EXIT, ЕСЛИ ДЛЯ ОПРЕДЕЛЕНИЯ СОБСТВЕННОГО ЗНАЧЕНИЯ ПО¬ТРЕ¬БО¬ВАЛОСЬ БОЛЕЕ 30 ИТЕРАЦИЙ ;)
LABEL CONT, ROOT,NEXTIT;
VAR I, J, K, L, M : INTEGER; B, C, F, G, H, P, R, S : REAL;
BEGIN
FOR I := 2 TO N DO
E[I-1] := E[I];
FOR I := 1 TO N DO
FOR J := 1 TO N DO
IF I=J THEN ZA[I,J] := 1.0
ELSE ZA[I,J] := 0.0;
E[N] := 0.0;
B:= 0.0;
F := 0.0;
(; ОПРЕДЕЛЕНИЕ САМОГО МАЛЕНЬКОГО ЧИСЛА. ПОЛУЧЕННОЕ ЧИСЛО ЗАВИСИТ ОТ ТИПА ИСПОЛЬЗУЕМОЙ ЭВМ ;)
FOR L := 1 TO N DO
BEGIN
J := 0;
H := MASHEPS * (ABS(D[L])+ABS(E[L]));
IF B<H THEN
B:= H;
(;ОПРЕДЕЛЕНИЕ ПРЕНЕБРЕЖИМО МАЛОГО ПОДДИАГОНАЛЬНОГО ЭЛЕМЕНТА. ЗАВИСИТ ОТ ТИПА ИСПОЛЬЗУЕМОЙ ЭВМ;)
FOR M := L TO N DO
IF ABS(E[M])<=B THEN
GOTO CONT;
CONT:
IF M=L THEN
GOTO ROOT;
NEXTIT:
IF J=30 THEN EXIT;
INC(J);
(; ФОРМИРОВАНИЕ СДВИГА ;)
G := D[L];
P:= (D[L+1]-G) / (2*E[L]);
R:= SQRT (P*P+1.0);
IF P<0.0 THEN
D[L] := E[L]/(P-R)
ELSE
D[L] := E[L]/(P+R);
H := G - D[L];
FOR I := L+1 TO N DO
D[I] := D[I] - H;
F := F + H;
(; QL - ПРЕОБРАЗОВАНИЕ ;)
P:= D[M];
C := 1;
S := 0;
FOR I := M-1 DOWNTO L DO
BEGIN
G := C*E[I]; H := C*P;
IF ABS(P)>=ABS(E[I]) THEN
BEGIN
C := E[I]/P;
R := SQRT(C*C+1);
E[I+1] := S*P*R;
S := C / R;
C := 1.0 / R;
END
ELSE
BEGIN
C:= P/E[I];
R := SQRT(C*C+1);
E[I+1] := S*E[I]*R;
S := 1.0/R; C := C / R;
END;
P := C*D[I] - S*G;
D[I+1] := H + S*(C*G + S*D[I]);
(; ФОРМИРОВАНИЕ СОБСТВЕННОГО ВЕКТОРА ;)
FOR K := 1 TO N DO
BEGIN
H := ZA[K,I+1];
ZA[K,I+1] := S*ZA[K,I] + C*H;
ZA[K,I] := C*ZA[K,I] - S*H;
END;
END;
E[L] := S*P;
D[L] := C*P;
IF ABS(E[L])>B THEN
GOTO NEXTIT;
ROOT:
D[L] := D[L] + F;
END;
(; РАЗМЕЩЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ
И СОБСТВЕННЫХ ВЕКТОРОВ;)
FOR I := 1 TO N DO
BEGIN
K := I;
P := D[I];
FOR J := I+1 TO N DO
IF D[J] < P THEN
BEGIN
K:=J;
P:=D[J];
END;
IF K<>I THEN
BEGIN
D[K] := D[I];
D[I] := P;
FOR J := 1 TO N DO
BEGIN
P := ZA[J,I];
ZA[J,I] := ZA[J,K];
ZA[J,K] := P;
END;
END;
END;
END;
{$F+}
PROCEDURE TRBAK (N,M1,M2:INTEGER;AZ:MAS1;
E:MAS; VAR ZA:MAS1);
(; ВЫЧИСЛЕНИЕ СОБСТВЕННЫХ ВЕКТОРОВ ИСХОДНОЙ СИМ¬МЕТ¬РИ¬ЧЕС¬КОЙ МАТРИЦЫ, КОГДА ИЗВЕСТНЫ СОБСТВЕННЫЕ ВЕКТОРЫ ТРЕХ¬ДИАГОНАЛЬНОЙ МАТРИЦЫ, РАЗМЕЩЕННЫЕ В МАССИВЕ Z[1:N,M1:M2]
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа