数値積分(台形則)

#***************************/
# 台形則                   */
#      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)