📄 fourn.txt
字号:
Procedure FOURN(var DATA:array of real;
NN:array of integer; NDIM,ISIGN:integer);
Label 1,2;
var
NTOT,IDIM,NPREV,N,I2,I1,IP1,IP2,IP3,IPREW,I3REV,I2REW,NREM:integer;
II2,II1,II3,I2REV,I3,IBIT,IFP1,IFP2,K1,K2:integer;
WRR,WII,TEMPR,TEMPI:real;
WR,WI,WPR,WPI,WTEMP,THETA:double;
begin
NTOT:=1;
For IDIM:=1 To NDIM do
NTOT:=NTOT * NN[IDIM];
NPREV:=1;
For IDIM:=1 To NDIM do
begin
N:=NN[IDIM];
NREM:=NTOT div (N * NPREV);
IP1:=2 * NPREV;
IP2:=IP1 * N;
IP3:=IP2 * NREM;
I2REV:=1;
For II2:=0 To ((IP2-1) div IP1) do
begin
I2:= 1 + II2 * IP1;
If I2 < I2REV Then
begin
For II1:=0 To ((IP1 - 2) div 2) do
begin
I1:= I2 + II1*2;
For II3:=0 To ((IP3-I1) div IP2) do
begin
I3:= I1 + II3 * IP2;
I3REV:=I2REV + I3 - I2;
TEMPR:=Data[I3];
TEMPI:=Data[I3 + 1];
DATA[I3]:=Data[I3REV];
DATA[I3 + 1]:=Data[I3REV +1];
DATA[I3REV]:=TEMPR;
DATA[I3REV + 1]:=TEMPI;
end;
end;
end;
IBIT:=IP2 div 2;
1: If (IBIT >= IP1) And (I2REV > IBIT) Then
begin
I2REV:=I2REV - IBIT;
IBIT:=IBIT div 2;
GoTo 1;
end;
I2REV:=I2REV + IBIT;
end;
IFP1:=IP1;
2: If IFP1 < IP2 Then
begin
IFP2:=2 * IFP1;
THETA:=ISIGN * 6.28318530717959 / (IFP2 / IP1);
WPR:=-2 * Sqr(Sin(0.5 * THETA));
WPI:=Sin(THETA);
WR:=1;
WI:=0;
For II3:=0 To ((IFP1-1) div IP1) do
begin
I3:= 1 + II3*IP1;
For II1:=0 To ((IP1 - 2) div 2) do
begin
I1:= I3 + II1*2;
For II2:=0 To ((IP3-I1) div IFP2) do
begin
I2:=I1 + II2*IFP2;
K1:=I2;
K2:=K1 + IFP1;
TEMPR:=WR * DATA[K2] - WI * DATA[K2 + 1];
TEMPI:=WR * DATA[K2 + 1] + WI * DATA[K2];
DATA[K2]:=DATA[K1] - TEMPR;
DATA[K2 + 1]:=DATA[K1 + 1] - TEMPI;
DATA[K1]:=DATA[K1] + TEMPR;
DATA[K1 + 1]:=DATA[K1 + 1] + TEMPI;
end;
end;
WTEMP:=WR;
WR:=WR * WPR - WI * WPI + WR;
WI:=WI * WPR + WTEMP * WPI + WI;
end;
IFP1:=IFP2;
GoTo 2;
end;
NPREV:=N * NPREV;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -