correlationTest.frink

View or download correlationTest.frink in plain text format


/** This file tests the routines in correlation.frink. */

use correlation.frink

list = [1,2,1,4,1,8,1,2,1,4,1,8,1,2,1,4,1,8]

/** Calculate the autocorrelation in a repeating list with sub-patterns.
    This should obtain an offset of 6 being the highest correlation. */

println["List:  Perfect repetition with period 6"]
println[formatTable[autocorrelation[list]]]
println[]
println["List:  Partial autocorrelation, perfect repetition with period 6"]
println[formatTable[partialAutocorrelation[list]]]
println[]

// The previous list with a bit of noise.  Hopefully the period will still be 6
println["List2:  imperfect repetition with period 6"]
list2 = [1,2,1,4,1,8,1,2,3,4,1,8,1,2,1,5,1,8]
println[formatTable[autocorrelation[list2]]]
println[]

// The list made very noisy because each point is perturbed by Gaussian noise
// centered around the true value with standard deviation = 1
// (Note that results will vary between runs.)
// Hopefully the strongest period will still be detected at 6.
list3 = new array
for a = list
   list3.push[randomGaussian[a, 1]]
println["List3:  noisy list with gaussian noise, period 6"]
//println["Noisy list is $list3"]
println["Results:"]
println[formatTable[autocorrelation[list3]]]
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 of sinewave"]
println[formatTable[autocorrelation[c]]]

println["\nPartial Autocorrelation of sinewave"]
println[formatTable[partialAutocorrelation[c]]]


View or download correlationTest.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19092 days, 8 hours, 10 minutes ago.