use warnings; use strict; # 例 x^2 定積分の近似値 my $a = 0; my $b = 1; my $N = 100; my $Integrand = '$x*$x'; my $Rectangle = &RECTANGLEAPPROXIMATIONMETHOD($a, $b, $N, $Integrand); print "$Rectangle\n"; # 長方形近似 Rectangle Approximation Method # 引数 左端a 右端b 分割数 被積分関数 ($a, $b, $N, $Integrand) # 戻り値 長方形近似 ($RectangleApproximationMethod) sub RECTANGLEAPPROXIMATIONMETHOD{ my ($a, $b, $N, $Integrand) = @_; ($a, $b) = ($b, $a) if($a > $b); my $RectangleApproximationMethod = 0; my $h = ($b - $a) / $N; my $Sum = 0; # 分割数の確認 if($N < 2){ return 0; } # 計算 for(my $i = 0; $i < $N; $i++){ my $x = $a + ($h * $i); my $tmp = &INTEGRAND($x, $Integrand); $Sum += $tmp; } # 長方形近似 Rectangle Approximation Method $RectangleApproximationMethod = $Sum * $h; return $RectangleApproximationMethod; } # 被積分関数 Integrand # 引数 積分変数 被積分関数 (\@Integrand) # 戻り値 被積分関数 ($Integrand) sub INTEGRAND{ my ($x, $Integrand) = @_; my $tmp = eval($Integrand); return $tmp; }