数値微分積分

sub dx(){ 1.0e-4 }

=head3 integral

  integral( func, from, to )

funcを積分範囲fromからtoで積分

=cut
sub integral{
    my( $func, $f, $t ) = @_;
    my $x = $f;
    my $r = 0;
    while( $x <= $t ){ # r = Sigma(x=f->t)f(x)dx
	$r += $func->($x);
	$x += dx;
    }
    return $r * dx;
}

=head3 differential

  differential( func, x )

funcをx近傍で微分

=cut
sub differential{
    my( $func, $x ) = @_;
    my $r = ( $func->($x + dx) - $func->($x - dx) ) / 2*dx;
    return $r;
}