#***************************/ # 台形則 */ # coded by Y.Suganuma */ #***************************/ #***************/ # 関数値の計算 */ #***************/ snx = Proc.new { |x| Math.sin(x) } #*****************************************************/ # 数値積分(台形則) */ # x1 : 下限 */ # x2 : 上限 */ # n : 分割数 */ # fun : 関数名(f) */ # return : 積分値 */ #*****************************************************/ def daikei(x1, x2, n, &fun) s = 0.0 h = (x2 - x1) / n x = x1 for i1 in 0 ... n-1 x += h s += fun.call(x) end s = 0.5 * h * (fun.call(x1) + fun.call(x2) + 2.0 * s) return s end pi2 = 2.0 * Math.atan(1.0) y = daikei(0.0, pi2, 100, &snx) printf("result %f\n", y)