メメメモモ

プログラミング、筋トレ、ゲーム、etc

台形公式

台形公式で積分の値を求めるプログラムを書きました。

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";
}


積分をする関数と分割数を渡せるようなサブルーチンにしました。