daikei.pl (1148B)
1 #!/usr/bin/env perl 2 # 3 # 4 # f(x) = 1 / (1 +x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積 5 # 6 # 閉区間[0,1] で積分すると、∫ f(x) = [log(1 +x)] = log2 ( 0.693147...) 7 # 8 # [a,b]をn等分して、h = (1/n) * (b-a)とし、x_i = a + hi, y_i = f(x_i) ( i = 0,1,...,n)とする 9 # 面積 S = h(1/2 * y_0 + y_1+ y_2 + ...+ y_n-1 + 1/2 * y_n) 10 # 11 12 13 use v5.40; 14 use autodie; 15 use utf8; # ソースコード内に日本語を直接書く場合 16 binmode(STDOUT, ":utf8"); # 標準出力をUTF-8に設定 17 binmode(STDIN, ":utf8"); # 標準入力をUTF-8に設定 18 19 my $n = 5000; 20 my $a = 0; 21 my $b = 1; 22 23 say "f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。"; 24 say "この区間を何等分しますか? : n = $n"; 25 26 my $h = (1 / $n) * ($b - $a); 27 my $s = 0; 28 29 for (my $i = 0; $i <= $n; $i++) { 30 my $x_i = $a + $h * $i; 31 my $y_i = 1 / ( 1 + $x_i); 32 if ($i == 0) { 33 $s = $h * (1 / 2) * $y_i; 34 } 35 36 if (($i > 0 ) && ($i < $n)) { 37 $s = $s + $h * $y_i; 38 } 39 40 if ($i == $n) { 41 $s = $s + $h * (1 / 2) * $y_i; 42 } 43 } 44 45 46 say "求める面積をSとすると S = ", $s;