perl

My Perl Scripts Collection
git clone https://fab.ddns.me.uk/stagit/perl
Log | Files | Refs | README

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;