高校数学をプログラミングで解く(数学III編)「7-2 定積分の置換積分法」
マガジンリスト > 数学Ⅲ編 7.積分法 > 7-2 定積分の置換積分法
はじめに
今回は、数学IIIで学ぶ「定積分の置換積分法」について、そのままでは数値積分が難しい定積分を、置換積分法を用いて数値計算できるような形にして計算することを考えてみます。
置換積分法
まず、不定積分、定積分の置換積分法について解説しておきます。
置換積分に関する公式(不定積分)
以下、$${C}$$は積分定数とします。
① $${F'(x) = f(x), \ \ a \neq 0}$$とするとき
$$
\int f(ax+b) dx = \frac{1}{a} F(ax+b) + C
$$
②
$$
\int f(x) dx = \int f(g(t))g'(t)dt \ \ \mathrm{ただし、} x=g(t)
$$
③
$$
\int f(g(x))g'(x)dx = \int f(u) du \ \ \mathrm{ただし、} g(x) = u
$$
④
$$
\int \frac{g'(x)}{g(x)} dx = \log |g(x)| + C
$$
定積分の置換積分法
$${\alpha < \beta}$$のとき、区間$${[\alpha, \beta]}$$で微分可能な関数$${x=g(t)}$$に対し、$${a=g(\alpha), \ \ b=g(\beta)}$$ならば
$$
\int_a^b f(x) dx = \int_{\alpha}^{\beta} f(g(t))g'(t)dt
$$
よく用いられる置き換え
①
$$
f(ax+b) \rightarrow ax+b=t
$$
②
$$
f'(x) \{f(x) \}^{\alpha}, \ \ \frac{f'(x)}{f(x)} \rightarrow f(x)=t
$$
③
$$
\sqrt{a^2-x^2} \rightarrow x = a \sin \theta \mathrm{または} x = a \cos \theta
$$
④
$$
\frac{1}{x^2+a^2} \rightarrow x = a \tan \theta
$$
偶関数・奇関数の定積分
① 偶関数$${f(-x) = f(x)}$$のとき
$$
\int_{-a}^a f(x) dx = 2 \int_0^a f(x) dx
$$
② 奇関数$${f(-x)=-f(x)}$$のとき
$$
\int_{-a}^a f(x) dx = 0
$$
定積分の数値計算を行うための置換積分の応用
今回は、定積分の数値計算を行うための置換積分法の応用として、次の定積分を計算することを考えてみます。
$$
\int_0^1 \frac{1}{\sqrt{x}} dx
$$
定積分の解析的な計算
この定積分の計算は、解析的に行うことができます。つまり、
$$
\int_0^1 \frac{1}{\sqrt{x}} dx = \left[ 2 \sqrt{x} \right]_0^1 = 2
$$
となります。
数値計算を行うための問題点
上記のように、この定積分は解析的に簡単な計算で求めることができます。一方で、この定積分を数値的に計算しようとした場合、一つ問題がおこります。それは、$${x \to +0}$$で被積分関数$${1/\sqrt{x}}$$が発散してしまうことです。
記事『高校数学をプログラミングで解く(数学II編)「5-6 定積分(1)」』で解説した台形公式は、定積分を
$$
\int_a^b f(x) dx = \sum_{i=0}^{n-1} \left[ \frac{1}{2} ( f(x_i) + f(x_i+1) ) \Delta x \right]
$$
と、台形の面積の和で置き換えて計算するものでした。ところが今回の定積分では、$${x_0=0}$$で被積分関数$${f(x) = 1/\sqrt{x}}$$が発散してしまうので、台形公式を用いた定積分の数値計算はできないように見えます。
置換積分法を用いて数値計算できるようにする
この定積分は数値計算しようとすると計算できないように見えますが、実際は定積分の解析的な計算の節で見たように、解析的に定積分の値を計算できます。このような定積分は、置換積分法を用いて定積分を書き換えてみると数値計算ができるような形に変形することがよくあります。
今回の定積分では、$${x = \cos^2 \theta}$$の式で置き換えを行うと、
$$
\int_0^1 \frac{1}{\sqrt{x}} dx = \int_{\frac{\pi}{2}}^0 \frac{1}{\cos \theta} (-2 \sin \theta \cos \theta ) d \theta = \int_0^{\frac{\pi}{2}} 2\sin \theta d \theta
$$
と書き換えることができます。この右辺の式は、積分範囲$${[0, \pi/2]}$$で被積分関数$${\sin \theta }$$は発散することはないので、台形公式による定積分の数値計算を行うことができます。
数値計算を行うためのプログラム
記事『高校数学をプログラミングで解く(数学II編)「5-6 定積分(1)」』で解説した台形公式やそのとき作成したスケッチ「calc_definite_integral」を再利用して、今回の定積分の値を数値計算するためのプログラムを作成していきます。以下の zip ファイルをダウンロードして展開または解凍してください。
そして、スケッチの名前(フォルダ名)を「calc_definite_integral2」と変更し、またスケッチ「calc_definite_integral2」内の「calc_definite_integral.pde」ファイルの名前を「calc_definite_integral2.pde」に変更します。そして、pdeファイル「calc_definite_integral2.pde」をダブルクリックしてスケッチ「calc_definite_integral2」の開発環境ウィンドウを立ち上げ、そのテキストエリアのソースコードを以下で書き換えます。
// 定積分を台形公式を利用して計算するプログラム
void setup(){
// 定積分を計算して結果をコンソールに出力
float l = 0.0; // 積分領域の下限
float r = PI/2.0; // 積分領域の上限
float res = trapezoidal_rule(l,r);
println(res);
}
// 被積分関数
float f(
float x
){
return 2.0*sin(x);
}
// 被積分関数 f に対する定積分を計算する関数
float trapezoidal_rule(
float l, // 積分領域の下限
float r // 積分領域の上限
){
float dx = 0.01;
int division_num = (int)((r-l)/dx);
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 置換積分法適用後の定積分を数値計算するためのプログラム
ソースコード1を、スケッチ「calc_definite_integral2」のテキストエディタ部分に書いて実行すると、図1のように、開発環境ウィンドウのコンソールに、
1.9983908
と出力されます。これは、定積分の解析的な計算結果と多少の誤差があるものの近い結果が得られていることがわかります。
まとめ
今回は、数学IIIで学ぶ「定積分の置換積分法」について、そのままでは数値積分が難しい定積分を、置換積分法を用いて数値計算できるような形にして計算することを考えてみました。
実際、被積分関数が$${1/\sqrt{x}}$$の場合、$${x=0}$$のところで被積分関数は発散してしまいますが、変数を$${x = \cos^2 \theta}$$と置き換えることで、被積分関数が$${2 \sin \theta}$$に置き換わるため、この定積分が数値計算できる形に書き換えることができました。
置換積分法は、定積分の解析的な計算をよりやりやすくするだけでなく、今回のように、そのままでは数値計算が難しいような定積分も計算できるような形に書き換えるときにも有用な方法です。今後、このような積分を計算する機会もあるかもしれませんので、頭の片隅に記憶しておいてください。
読んだ感想などをお寄せください
本記事を読んだ感想や質問などを以下のお問い合せフォームからお寄せください。感想、質問をいただいた方には本記事の演習問題の解答をプレゼントします。(お問合せフォームの本文に、本記事のタイトルを入れてください。)
参考文献
改訂版 教科書傍用 スタンダード・オリジナル 数学III(数研出版、ISBN9784410209567)
演習問題
次の定積分を数値計算するプログラムを作成してください。
$$
\int_0^3 \frac{1}{\sqrt{3-x}} dx
$$
演習問題の解答例
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?