/** This file tests the routines in correlation.frink. */ use correlation.frink /** Calculate the autocorrelation in a repeating list with sub-patterns. This should obtain an offset of 6 being the highest correlation. */ println[autocorrelation[[1,2,1,4,1,8,1,2,1,4,1,8,1,2,1,4,1,8]]] println[] // The previous list with a bit of noise. Hopefully the period will still be 6 println[autocorrelation[[1,2,1,4,1,8,1,2,3,4,1,8,1,2,1,5,1,8]]] println[] // Find when the digits in a number repeat themselves. The precision may have // to be increased for larger denominators, as 1/n may repeat after as many as // n-1 digits. for b = 1 to 200 { setPrecision[b*2+10] r = autocorrelation[array[chars[toString[1./b]]]] // println[r] println["1/\$b appears to repeat most strongly after " + r@0@0 + " terms."] } println[] // Calculate the autocorrelation of a sinewave. The period should be close // to the number divided by in the "step" below, although if the step is // small, then the offsets near 1 will be the strongest (as the sine wave is // shifted very slightly relative to itself.) setPrecision[15] c = new array for i = 0 to 10 pi step (2 pi / 17.1) c.push[sin[i]] println[autocorrelation[c]]