<?php /****************************/ /* シンプソン則 */ /* coded by Y.Suganuma */ /****************************/ $pi2 = 2.0 * atan(1.0); $y = simpson(0.0, $pi2, 100, "snx"); printf("result %f\n", $y); /****************/ /* 関数値の計算 */ /****************/ function snx($x) { return sin($x); } /*******************************************************/ /* 数値積分(シンプソン則) */ /* x1 : 下限 */ /* x2 : 上限 */ /* n : 分割数 */ /* fun : 関数名(f) */ /* return : 積分値 */ /*******************************************************/ function simpson($x1, $x2, $n, $fun) { $s1 = 0.0; $s2 = 0.0; $h = ($x2 - $x1) / $n; $h2 = 2.0 * $h; for ($x = $x1+$h; $x < $x2; $x += $h2) $s1 += $fun($x); for ($x = $x1+$h2; $x < $x2-$h; $x += $h2) $s2 += $fun($x); $s = $h * ($fun($x1) + $fun($x2) + 4.0 * $s1 + 2.0 * $s2) / 3.0; return $s; } ?>