高校数学をプログラミングで解く(数学III編)「8-1 面積」
マガジンリスト > 数学Ⅲ編 8.積分法の応用 > 8-1 面積
はじめに
今回は、数学IIIで学ぶ「面積」について、面積の公式を用いて三角関数と$${x}$$軸で囲まれた領域の面積や円で囲まれた領域の面積を求めるプログラムを作成していきます。
面積
まず、積分を用いた面積の計算方法などについて解説しておきます。
面積の公式
$${a < b, \ c < d}$$とする。
① 曲線$${y=f(x)}$$と$${x}$$軸および2直線$${x=a, \ x=b}$$で囲まれた部分の面積$${S}$$
$$
f(x) \geq 0 \mathrm{ならば}S=\int_a^b f(x)dx, \ \ \ \ f(x) \leq 0 \mathrm{ならば} S = -\int_a^b f(x)dx
$$
② 2曲線$${y=f(x), \ y=g(x)}$$および2直線$${x=a, x=b}$$で囲まれた部分の面積$${S}$$
$$
f(x) \geq g(x) \mathrm{ならば}S=\int_a^b \{f(x)-g(x) \} dx
$$
③ 曲線$${x=g(y)}$$と$${y}$$軸および2直線$${y=c, y=d}$$で囲まれた部分の面積$${S}$$
$$
g(y) \geq 0 \mathrm{ならば} S = \int_c^d g(y) dy
$$
④ 曲線が$${F(x,y)=0}$$の形の場合は、$${y=f(x)}$$または$${x=f(y)}$$の形に変形する。
注意 面積を求めるときは、グラフをかいて、曲線と座標軸、曲線と曲線の共有点や位置関係を明確にする。また、対称性を利用するとよい。
媒介変数表示の場合の面積
$${a < b}$$とする。
曲線$${x=f(t), y=g(t)}$$と$${x}$$軸および2直線$${x=a, x=b}$$で囲まれた部分の面積$${S}$$は、$${a=f(\alpha), \ b=f(\beta)}$$とすると
$$
S=\int_a^b |y| dx = \int_{\alpha}^{\beta} |g(t)|f'(t)dt
$$
三角関数で囲まれた領域の面積
それでは、上記の面積の公式を利用して三角関数と$${x}$$軸で囲まれた領域の面積を定積分の形で表した後、その定積分を台形公式を用いて求めることを考えてみます。なお、台形公式の詳細については、記事『高校数学をプログラミングで解く(数学II編)「5-6 定積分(1)」』をご覧ください。
問題1
次の曲線および$${x}$$軸で囲まれた部分の面積を求めよ。
$$
y= \sin x \ \ (0 \leq x \leq 2 \pi)
$$
アルゴリズム
問題1のグラフを描くと、図1のようになります。
図1のグレーで塗りつぶされた領域の面積を求めることになります。この領域を$${0 \leq x \leq \pi}$$の領域と$${\pi \leq x \leq 2 \pi}$$の領域とに分けて考えます。まず、$${0 \leq x \leq \pi}$$の領域では$${ \sin x \geq 0}$$となるので、面積の公式①を用いると、その面積は
$$
\int_0^{\pi} \sin x dx
$$
となります。一方、$${\pi \leq x \leq 2\pi}$$の領域では$${ \sin x \leq 0}$$となるので、面積の公式①を用いると、その面積は
$$
-\int_{\pi}^{2\pi} \sin x dx
$$
となります。つまり、$${y= \sin x \ \ (0 \leq x \leq 2 \pi)}$$と$${x}$$軸とで囲まれた領域の面積$${S}$$は
$$
S = \int_0^{\pi} \sin x dx-\int_{\pi}^{2\pi} \sin x dx
$$
となります。
今回はこの面積$${S}$$を表す定積分を、台形公式を用いて数値計算します。そのために、面積$${S}$$の式をもう少し変形しておきます。
$$
S = \int_0^{2\pi} | \sin x | dx
$$
なお、$${\sin}$$関数の対称性を考慮して、
$$
S = 2 \int_0^{\pi} \sin x dx
$$
という表し方もできますが、今回の計算では、絶対値を利用したものを採用します。
プログラム
それでは、$${y= \sin x \ \ (0 \leq x \leq 2 \pi)}$$と$${x}$$軸とで囲まれた領域の面積を数値計算するプログラムを作成します。プログラムは記事『高校数学をプログラミングで解く(数学II編)「5-6 定積分(1)」』で作成したスケッチ「calc_definite_integral」をベースにして作成します。以下の zip ファイルをダウンロードして展開または解凍してください。
そして、スケッチの名前(フォルダ名)を「calc_area_trigonometric」と変更し、またスケッチ「calc_area_trigonometric」内の「calc_definite_integral.pde」ファイルの名前を「calc_area_trigonometric.pde」に変更します。そして、pdeファイル「calc_area_trigonometric.pde」をダブルクリックしてスケッチ「calc_area_trigonometric」の開発環境ウィンドウを立ち上げ、そのテキストエリアのソースコードを以下で書き換えます。
// 三角関数とx軸で囲まれた領域の面積を求めるプログラム
void setup(){
// 定積分を計算して結果をコンソールに出力
float l = 0.0; // 積分領域の下限
float r = 2.0*PI; // 積分領域の上限
float res = trapezoidal_rule(l,r);
println(res);
}
// 被積分関数
float f(
float x
){
return abs(sin(x));
}
// 被積分関数 f に対する定積分を計算する関数
float trapezoidal_rule(
float l, // 積分領域の下限
float r // 積分領域の上限
){
int division_num = 200;
float dx = (r-l)/division_num;
float x, y1, y2;
float dintegral = 0.0;
for(int i=0; i<division_num; i++){
x = l + i*dx;
y1 = f(x);
y2 = f(x+dx);
dintegral = dintegral + (y1+y2)*dx/2.0;
}
return dintegral;
}
ソースコード1 三角関数と$${x}$$軸とで囲まれた領域の面積を数値計算するプログラム
ソースコード1では、スケッチ「calc_definite_integral」で作成した3次関数に関する定積分を台形公式を用いて数値計算する関数 trapezoidal_rule_cubic_function を任意の関数 f に対して積分領域$${[l,r]}$$での定積分を数値計算する関数 trapezoidal_rule に修正して利用しています。
ソースコード1を、スケッチ「calc_area_trigonometric」の「calc_area_trigonometric」タブのテキストエディタ部分に書いて実行します。
図2のように、$${y= \sin x \ \ (0 \leq x \leq 2 \pi)}$$と$${x}$$軸とで囲まれた領域の面積の数値計算結果がコンソールに出力されます。
3.9996722
この面積を解析的に求めた結果は$${4}$$となるので、丸め誤差よりも少し大きな誤差はあるものの、ある程度よい精度の数値計算結果が得られていることがわかります。
円で囲まれた領域の面積
次に、上記の面積の公式を利用して円で囲まれた領域の面積を定積分の形で表した後、その定積分を台形公式を用いて求めることを考えてみます。
問題2
次の円で囲まれた部分の面積を求めよ。
$$
x^2+y^2= 25
$$
アルゴリズム
問題2の円を描くと、図3のようになります。
図3のグレーで塗りつぶされた領域の面積を求めることになります。この円で囲まれた領域の面積を求めるために、面積の公式④を考慮して円の方程式$${x^2+y^2=25}$$を変形すると、円の$${x}$$軸よりも上の領域では
$$
y= \sqrt{ 25-x^2 }
$$
円の$${x}$$軸よりも下の領域では
$$
y= -\sqrt{ 25-x^2 }
$$
と表すことができます(図4)。
図4を見るとわかるように、$${-5 \leq x \leq 5}$$の領域で$${ \sqrt{25-x^2} \geq -\sqrt{25-x^2} }$$となっているので、面積の公式②を用いると、その面積$${S}$$は
$$
S = \int_{-5}^{5} \{ \sqrt{25-x^2}-(-\sqrt{25-x^2}) \} dx = \int_{-5}^{5} 2\sqrt{25-x^2} dx
$$
プログラム
それでは、円で囲まれた領域の面積を数値計算するプログラムを作成します。プログラムは上記で作成したスケッチ「calc_area_trigonometric」をベースにして作成します。
スケッチ「calc_area_trigonometric」をフォルダごとコピーして、そのスケッチの名前(フォルダ名)を「calc_area_circle」と変更し、またスケッチ「calc_area_circle」内の「calc_area_trigonometric.pde」ファイルの名前を「calc_area_circle.pde」に変更します。そして、pdeファイル「calc_area_circle.pde」をダブルクリックしてスケッチ「calc_area_circle」の開発環境ウィンドウを立ち上げ、そのテキストエリアのソースコードを以下で書き換えます。
// 円で囲まれた領域の面積を求めるプログラム
void setup(){
// 定積分を計算して結果をコンソールに出力
float l = -5.0; // 積分領域の下限
float r = 5.0; // 積分領域の上限
float res = trapezoidal_rule(l,r);
println(res);
}
// 被積分関数
float f(
float x
){
return 2.0*sqrt(25.0-x*x);
}
// 被積分関数 f に対する定積分を計算する関数
float trapezoidal_rule(
float l, // 積分領域の下限
float r // 積分領域の上限
){
int division_num = 1000;
float dx = (r-l)/division_num;
float x, y1, y2;
float dintegral = 0.0;
for(int i=0; i<division_num; i++){
x = l + i*dx;
y1 = f(x);
y2 = f(x+dx);
dintegral = dintegral + (y1+y2)*dx/2.0;
}
return dintegral;
}
ソースコード2 円で囲まれた領域の面積を数値計算するプログラム
ソースコード2とソースコード1の違いは、被積分関数 f を書き換えたことと、関数 trapezoidal_rule 内の変数 division_num を$${1000}$$に修正したところになります。
ソースコード2を、スケッチ「calc_area_circle」の「calc_area_circle」タブのテキストエディタ部分に書いて実行します。
図5のように、円で囲まれた領域の面積の数値計算結果がコンソールに出力されます。
78.53715
この面積を解析的に求めた結果は
$$
25 \pi = 78.53981\cdots
$$
となるので、こちらも丸め誤差よりも少し大きな誤差はあるものの、ある程度よい精度の数値計算結果が得られていることがわかります。
まとめ
今回は、数学IIIで学ぶ「面積」について、面積の公式を用いて三角関数と$${x}$$軸で囲まれた領域の面積や円で囲まれた領域の面積を求めるプログラムを作成しました。
面積は定積分の形で表すことができますので、定積分を台形公式を用いて数値計算しました。解析的に計算した結果と比較してある程度よい精度の結果が得られていることがわかりました。
読んだ感想などをお寄せください
本記事を読んだ感想や質問などを以下のお問い合せフォームからお寄せください。感想、質問をいただいた方には本記事の演習問題の解答をプレゼントします。(お問合せフォームの本文に、本記事のタイトルを入れてください。)
参考文献
改訂版 教科書傍用 スタンダード・オリジナル 数学III(数研出版、ISBN9784410209567)
演習問題
円の面積をより精度よく数値計算するために、ソースコード2の関数 trapezoidal_rule 内の変数 division_num をもっと大きく$${10000}$$にしてスケッチ「calc_area_circle」を実行したところ、以下の図6のように、コンソールに「NaN」と出力されました。
この「NaN」は計算した結果が数値で表せないものになったことを意味しています。なぜ数値で表せないものになったのか、その原因を考えてみてください。そして、きちんと数値結果が得られるようにプログラムを修正してみてください。
演習問題の解答例
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?