DFT

学部3年生がCで頑張ってる所。

scala> def dft(xs: List[Double]) = {
     |   import java.lang.Math._
     |   val N = xs size;
     |   for (k <- 0 until N) yield {
     |     val as = for (n <- 0 until N) yield {
     |       xs(n) * cos(2 * PI * n * k / N)
     |     }
     |     val bs = for (n <- 0 until N) yield {
     |       xs(n) * sin(2 * PI * n * k / N)
     |     }
     |     val a = (0. /: as)(_ + _)
     |     val b = (0. /: bs)(_ + _)
     |     sqrt(a * a + b * b)
     |   }
     | }
dft: (List[Double])RandomAccessSeq.Projection[Double]

scala> dft(List(1, -1, 1, -1)) foreach(printf("%.4f ", _))
0.0000 0.0000 4.0000 0.0000