台形公式で積分の値を求めるプログラムを書きました。
use strict; use warnings; main(sub { my $x = shift; return $x * $x; }, 100000); sub main { my ($f, $N) = @_; my (@x, @y); my $a = 0.0; my $b = 3.0; my $h = ($b-$a)/$N; for my $i (0..$N) { $x[$i] = $a + $i*$h; } my $S = 0.0; for my $i (0..$N) { $y[$i] = $f->($x[$i]); $y[$i+1] = $f->($x[$i+1]); $S = $S + $h*($y[$i] + $y[$i+1])/2.0; } print "N=$N, S=$S\n"; }
積分をする関数と分割数を渡せるようなサブルーチンにしました。