function cruncher(sm,bg,nums,nums2,myfl) %the function is either iterating n/sm (if mod(n,sm)=0) or bg*n+ad (ad the min factor to make a multiple of sm) %usually sm=2 bg=3 ad=1 to give n/2 and 3n+1 %nums and nums2 give start and finish integers %blue chart shows orbit length to get to first repeat %green chart shows period length %if myfl=1 instead does scatter plot of maxima newplot huge=100000000000; %huge2=10000; myv=zeros(2,nums2-nums); %loopv=zeros(1,huge2); for i=nums:nums2 iter=i; loop=1; loopf=0; loopv(loop)=iter; while loopf==0 loop=loop+1; loopj=0; if mod(iter,sm)~=0 iter=bg*iter+sm-mod(bg*iter,sm) if abs(iter)>huge loopf=1; loopj=1; end else iter=iter/sm end loopv(loop)=iter; j=1; while loopj==0 if iter~=loopv(j); j=j+1; else loopf=1; loopj=1; end if j==loop loopj=1; end end %iter end myv(1,i-nums+1)=loop; if iter>huge myv(2,i-nums+1)=0; else myv(2,i-nums+1)=loop-j; end end mym=myv'; mym=mym(:,1); if myfl scatter(linspace(nums,nums2,length(mym)),mym,1); else s=size(myv); plot(linspace(nums,nums2,length(mym)),myv'); end