/* 2D Fibonacci U(0,1) Sequence */ /* (excluding zeros at the beginning) */ new; cls; k=10; /* up to k=19 in Light version of GAUSS (i.e. 4180 x 2) */ x=Fibonacci2D(k); /* x=Fibonacci2Ds(k); */ print x; library pgraph; graphset; _plctrl=-1; xtics(0,1,0.1,1); ytics(0,1,0.1,1); xy(x[.,1],x[.,2]); proc Fibonacci2D(k); local Fk_1,Fk,x,i; if k<=2 or k-floor(k)/=0; errorlog "ERROR: Parameter k must be an integer which is greater than 3."; retp("."); endif; Fk_1=fibonacci(k-1); Fk=fibonacci(k); x=zeros(Fk-1,2); i=1; do while i<=Fk-1; x[i,1]=i/Fk; x[i,2]=(i*Fk_1/Fk)-floor(i*Fk_1/Fk); i=i+1; endo; retp(x); endp; proc fibonacci(k); /* This procedure is for Finobacci sequence itself. */ local y,i; y=zeros(k,1); y[1]=1; y[2]=1; i=3; do while i<=k; y[i]=y[i-1]+y[i-2]; i=i+1; endo; retp(y[k]); endp; /* randomized order as you like */ proc Fibonacci2Ds(k); local Fk_1,Fk,x,i,U,index,n; if k<=2 or k-floor(k)/=0; errorlog "ERROR: Parameter k must be an integer which is greater than 3."; retp("."); endif; Fk_1=fibonacci(k-1); Fk=fibonacci(k); x=zeros(Fk,2); i=1; do while i<=Fk; x[i,1]=(i-1)/Fk; x[i,2]=((i-1)*Fk_1/Fk)-floor((i-1)*Fk_1/Fk); i=i+1; endo; x=x[2:Fk,.]; /* exclude 0's at the beginning */ /* randomize the order as a pair */ n=rows(x); U=x; x=zeros(n,2); i=1; do while i<=n-1; index=ceil((n-(i-1))*rndu(1,1)); x[i,.]=U[index,.]; if index==1; U=U[2:rows(U),.]; elseif index==rows(U); U=U[1:rows(U)-1,.]; else; U=U[1:(index-1) (index+1):rows(U),.]; endif; i=i+1; endo; x[n,.]=U; retp(x); endp;