数値計算プログラム

2009年04月19日

高速フーリエ変換

dim r(n),j(n);
for i:=1 to n;
r(i):=0:
j(i):=0:
next i;
for i:=1 to 10
r(i):=20:
next i:
gosub l1:

for i:=1 to 40;
r(i):=sqr(r(i)*r(i)+j(i)*j(i));
next i;

j:=0;
k:=0;
for i:=1 to 40;
if r(i)>j then j:=r(i);
if r(i) next i;
for i:=1 to 40;
print i,spc$(int(0.5+25*(r(i)-k)/(j-k)));
next i;
end

label l1;
n1:=1;
n2:=n;
p:=6.28318/n;
n2:=n2/2;
k1:=0;
label l2;
x:=0;
k2:=k1+n2-1;
for i:=k1 to k2;
h:=i+n2;
v:=cos(p*x);
w:=sin(p*x);
if f=1 then w:=-w;
r1:=r(i+1);
j1:=j(i+1);
r(i+1):=r1+r(h+1);
j(i+1):=j1+j(h+1);
q:=(r1-r(h+1))*v+(j1-j(h+1))*w;
j(h+1):=(j1-j(h+1))*v-(r1-r(h+1))*w;
r(h+1):=q;
x:=x+n1;
next i;
k1:=k1+n2+n2;
if k1 if n2:=1 then l3;
n1:=n1+n1;
goto l4;
label l3;
for i:=0 to n-1;
n2:=1;
h:=0;
n3:=n*0.5;
x:=1;
label l7;
n1:=x-n3;
if n1<0 then l5;
h:=h+n2;
x:=n1;
label l5;
if n3=1 then l6;
n3:=n3/2;
n2:=n2+n2;
goto l7;
label l6;
if i>=h then l8;
r1:=r(h+1);
j1:=j(h+1);
r(h+1):=r(i+1);
j(h+1):=j(i+1);
r(i+1):=r1;
j(i+1):=j1;
label l8;
next i;
return;

当サイトでは、第三者配信事業者によるサービスを使用して広告を表示しています。 これらの第三者配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示する目的で、 当サイトや他のサイトへのアクセスに関する情報を使用することがあります (氏名、住所、メール アドレス、電話番号は含まれません)。 このプロセスの詳細や、第三者配信事業者にこれらの情報が使用されないようにする方法については、 ここをクリックしてください。