fab

Simpson's rule

home

Integration

f(x) = 1 / (1 +x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積

方形公式


#!/usr/bin/perl
#
# 
# f(x) = 1 / (1 +x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積
#
# 閉区間[0,1] で積分すると、∫ f(x) = [log(1 +x)] = log2 ( 0.693147...)
#
# [a,b]をn等分して、h = (1/n) * (b-a)とし、x_i = a + hi, y_i = f((x_i-1 + x_i / 2) ) ( i = 1,2,...,n)とする
#  面積 S = h(y_1+ y_2 + ...+ y_n)
#


use feature ':5.16';
use autodie;

my $n = 5000;
my $a = 0;
my $b = 1;

say "f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。";
say "この区間を何等分しますか? : n = $n";

my $h = (1 / $n) * ($b - $a); 
my $s = 0;

for (my $i = 1; $i <= $n; $i++) {
	my $x_i = $a + $h * $i;
	my $y_i = 1 / ( 1 + $x_i);
		$s = $s + $h * $y_i;	
}

say "求める面積をSとすると S = ", $s;

実行結果は以下のようになりました。


f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。
この区間を何等分しますか? : n = 5000
求める面積をSとすると S = 0.693097183059945

台形公式


#!/usr/bin/perl
#
# 
# f(x) = 1 / (1 +x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積
#
# 閉区間[0,1] で積分すると、∫ f(x) = [log(1 +x)] = log2 ( 0.693147...)
#
# [a,b]をn等分して、h = (1/n) * (b-a)とし、x_i = a + hi, y_i = f(x_i) ( i = 0,1,...,n)とする
#  面積 S = h(1/2 * y_0 + y_1+ y_2 + ...+ y_n-1 + 1/2 * y_n)
#


use Modern::Perl;
use autodie;

my $n = 5000;
my $a = 0;
my $b = 1;

say "f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。";
say "この区間を何等分しますか? : n = $n";

my $h = (1 / $n) * ($b - $a); 
my $s = 0;

for (my $i = 0; $i <= $n; $i++) {
	my $x_i = $a + $h * $i;
	my $y_i = 1 / ( 1 + $x_i);
	if ($i == 0) {
		$s = $h * (1 / 2) * $y_i; 
	}
	
	if (($i > 0 ) && ($i < $n)) {
		$s = $s + $h * $y_i;	
	}
	
	if ($i == $n) {
		$s = $s + $h * (1 / 2) * $y_i;
	}
}


say "求める面積をSとすると S = ", $s;

実行結果は以下のようになりました。


f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。
この区間を何等分しますか? : n = 5000
求める面積をSとすると S = 0.693147183059945

シンプソンの公式


#!/usr/bin/perl
#
# 
# f(x) = 1 / (1 +x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積
#
# 閉区間[0,1] で積分すると、∫ f(x) = [log(1 +x)] = log2 ( 0.693147...)
#
# [a,b]を2n等分して、h = (1/2n) * (b-a)とし、x_i = a + hi, y_i = f(x_i) ( i = 0,1,...,n)とする
#  面積 S = h/3{y_0 + 4(y_1+ y_3 + ...+ y_(2n-1)) + 2(y_1 + y_4 + ...+ y_(2n-2)) + y_2n}
#


use Modern::Perl;
use autodie;

my $n = 2500;
my $a = 0;
my $b = 1;

say "f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。";
say "この区間を何等分しますか? : n = ", $n * 2;

my $h = (1 / (2 * $n)) * ($b - $a); 
my $s = 0;

for (my $i = 0; $i <= 2 * $n; $i++) {
	my $x_i = $a + $h * $i;
	my $y_i = 1 / ( 1 + $x_i);
	if ($i == 0) {
		$s = ($h / 3) * $y_i;
	}
	
	if (($i > 0 ) and ($i < 2 * $n)) {
		if ($i % 2) {
			$s = $s + ($h / 3) * 4 * $y_i;		
		} else  {
			$s = $s + ($h / 3) * 2 * $y_i;
		}
	}
	
	if ($i == 2 * $n) {
		$s = $s + ($h / 3) * $y_i;
	}
}

say "求める面積をSとすると S = ", $s;

実行結果は以下のようになりました。


f(x) = 1 / (1 + x)とx軸とで囲まれた図形のうち閉区間[0,1]の範囲の面積を求めます。
この区間を何等分しますか? : n = 5000
求める面積をSとすると S = 0.693147180559948