数値積分(台形則)

<?php

/****************************/
/* 台形則                   */
/*      coded by Y.Suganuma */
/****************************/

	$pi2 = 2.0 * atan(1.0);

	$y = daikei(0.0, $pi2, 100, "snx");

	printf("result %f\n", $y);

/****************/
/* 関数値の計算 */
/****************/
function snx($x)
{
	return sin($x);
}

/******************************************************/
/* 数値積分(台形則)                                 */
/*      x1 : 下限                                     */
/*      x2 : 上限                                     */
/*      n : 分割数                                    */
/*      fun : 関数名(f)                             */
/*      return : 積分値                               */
/******************************************************/
function daikei($x1, $x2, $n, $fun)
{
	$s = 0.0;
	$h = ($x2 - $x1) / $n;
	$x = $x1;

	for ($i1 = 0; $i1 < $n-1; $i1++) {
		$x += $h;
		$s += $fun($x);
	}

	$s = 0.5 * $h * ($fun($x1) + $fun($x2) + 2.0 * $s);

	return $s;
}

?>