📄 tqli.txt
字号:
Procedure TQLI(var D:array of real; E:array of real; N:integer;var Z:matrx2);
Label 1,2;
Var
I,L,M,K,ITER:integer; G,R,C,F,S,P,DD,ZZ,ZZZ,B:real;
begin
If N > 1 Then
begin
For I:=2 To N do
E[I - 1]:=E[I];
E[N]:=0;
For L:=1 To N do
begin
ITER:=0;
1: For M:=L To N - 1 do
begin
DD:=Abs(D[M]) + Abs(D[M + 1]);
If Abs(E[M]) + DD = DD Then GoTo 2;
end;
M:=N;
2: If M <> L Then
begin
If ITER = 30 Then showMessage(' too many iterations ');
ITER:=ITER + 1;
G:=(D[L + 1] - D[L]) / (2 * E[L]);
R:=Sqrt(Sqr(G) + 1 );
If G >= 0 then
ZZ:=1
Else
ZZ:=-1;
If G >= 0 then
ZZZ:=1
Else
ZZZ:=-1;
G:=D[M] - D[L] + E[L] / (G + ZZZ * ZZ);
S:=1;
C:=1;
P:=0;
For I:=M - 1 DownTo L do
begin
F:=S * E[I];
B:=C * E[I];
If Abs(F) >= Abs(G) Then
begin
C:=G / F;
R:=Sqrt(Sqr(C) + 1 );
E[I + 1]:=F * R;
S:=1 / R;
C:=C * S;
end
Else
begin
S:=F / G;
R:=Sqrt(Sqr(S) + 1 );
E[I + 1]:=G * R;
C:=1 / R;
S:=S * C;
end;
G:=D[I + 1] - P;
R:=(D[I] - G) * S + 2 * C * B;
P:=S * R;
D[I + 1]:=G + P;
G:=C * R - B;
//Omit lines from here ...
For K:=1 To N do
begin
F:=Z[K, I + 1];;
Z[K, I + 1]:=S * Z[K, I] + C * F;
Z[K, I]:=C * Z[K, I] - S * F;
end;
//to here when finding only eigenvalues.
end;
D[L]:=D[L] - P;
E[L]:=G;
E[M]:=0;
GoTo 1;
end;
end;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -