Chebyshev coefficients

func chebft (callback, a, b, n) {

    var bma = (0.5 * b-a)
    var bpa = (0.5 * b+a)

    var pi_n = ((^n »+» 0.5) »*» (Num.pi / n))
    var f = (pi_n »cos()» »*» bma »+» bpa «call« callback)
    var sums = (^n «run« {|i| f »*« ((pi_n »*» i) »cos()») «+» })

    sums »*» (2/n)
}

for v in (chebft(func(v){v.cos}, 0, 1, 10)) {
    say ("%+.10e" % v)
}

Output:

+1.6471694754e+00
-2.3229937162e-01
-5.3715114622e-02
+2.4582352670e-03
+2.8211905743e-04
-7.7222291558e-06
-5.8985564522e-07
+1.1521427333e-08
+6.5963000351e-10
-1.0022591709e-11