#!/usr/bin/ruby func chebft1 (callback, a, b, n) { var bma = (b-a)/2 var bpa = (b+a)/2 var pi_n = (@^n |>> (:add, 0.5) |>> (:mul, Num.pi / n)) var f = (pi_n |>> :cos |>> (:mul, bma) |>> (:add, bpa) |>> callback) var sums = (@^n |>> {|i| pi_n |>> (:mul, i) |>> :cos ~Z* f |> :sum }) sums |>> (:mul, 2/n) } func chebft2 (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 } assert_eq( chebft1(func(v){v.cos}, 0, 1, 10).map{ .round(-40) } chebft2(func(v){v.cos}, 0, 1, 10).map{ .round(-40) } ) say "** Test passed!"