perl

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

commit b8820e275a0d3a588b4d591f727cc3e408aca43e
parent 396d6c2b58f658d97d04c933e56ac51b5c5c8db3
Author: masayoshi <masayoshi@example.com>
Date:   Sun,  8 Mar 2026 07:44:09 +0900

Upload

Diffstat:
Adaikei.pl | 47+++++++++++++++++++++++++++++++++++++++++++++++
Akubun-kyuseki.pl | 34++++++++++++++++++++++++++++++++++
Asimpson.pl | 47+++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 128 insertions(+), 0 deletions(-)

diff --git a/daikei.pl b/daikei.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env 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 v5.40; +use autodie; +use utf8; # ソースコード内に日本語を直接書く場合 +binmode(STDOUT, ":utf8"); # 標準出力をUTF-8に設定 +binmode(STDIN, ":utf8"); # 標準入力をUTF-8に設定 + +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; +\ No newline at end of file diff --git a/kubun-kyuseki.pl b/kubun-kyuseki.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env 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 v5.40; +use autodie; +use utf8; +binmode(STDOUT, ":utf8"); +binmode(STDIN, ":utf8"); + +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; diff --git a/simpson.pl b/simpson.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env 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 v5.40; +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; +\ No newline at end of file