09/11/27 11:23:07
>>130
>>127のコードですが、シンプソンの公式を使ったほうが精度良く、すっきりかけたので
こちらのほうを使ってください。
sub calc_integral {
my ( $a, $h, $precision, $fx ) = @_;
my $s = 0;
my $n = 0;
while (1) {
my $y1 = $fx->( $a + $n*$h );
my $y2 = $fx->( $a + ($n+1)*$h );
my $y3 = $fx->( $a + ($n+2)*$h );
my $ds = $h/3 * ($y1 + 4*$y2 + $y3);
$s += $ds;
last if $ds < $precision;
$n += 2;
}
return $s;
}