
高校数学10分プログラミング(数学Ⅱ編 5.微分法と積分法)8日目「定積分を計算する1」
マガジンリスト > 数学Ⅱ編 5.微分法と積分法 > 8日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学II編 5.微分法と積分法)の8日目です。
本日の課題は、定積分を台形公式を用いて数値計算するプログラムを作成することです。
定積分
$${k,l}$$は定数とする。
① 定義 関数$${f(x)}$$の不定積分の1つを$${F(x)}$$とするとき
$$
\int_a^b f(x) dx = \left[ F(x) \right]_a^b = F(b)-F(a)
$$
②
$$
\int_a^b \{ kf(x)+lg(x) \} dx = k \int_a^b f(x) dx + l \int_a^b g(x) dx
$$
③
$$
\int_a^b f(x) dx = \int_a^b f(t) dt, \ \ \int_a^a f(x) dx = 0, \ \ \int_b^a f(x) dx = - \int_a^b f(x) dx
$$
④
$$
\int_a^b f(x) dx = \int_a^c f(x) dx + \int_c^b f(x) dx
$$
台形公式(定積分の数値計算)
定積分をコンピュータで数値的に計算する方法のひとつである 台形公式 について解説します。
台形公式は、図1のように関数$${f(x)}$$の$${a}$$から$${b}$$までの積分領域を$${n}$$個の部分に分割し、分割した各部分の面積を台形の面積で近似して足し合わせることで定積分の値を計算する方法です。

具体的には、まず$${\Delta x}$$を積分範囲の大きさ$${b-a}$$と比較して十分小さな値をもつ定数で、かつ
$$
n= \frac{b-a}{\Delta x}
$$
が整数となるように、調整して決めます。このようにして決めた$${\Delta x}$$を用いると、$${x_i}$$は、
$$
x_i = a +i\Delta x \ \ (i=0,1,2,\cdots,n)
$$
となります。なお、$${x_0 = a, \ \ x_n = b}$$となります。このとき、図1の分割した各部分を台形で近似したときの面積は
$$
\frac{1}{2} (f(x_i)+f(x_{i+1})) \Delta x \ \ (i=0,1,2,\cdots,n-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]
$$
で計算することができます。
課題
次の2次関数を被積分関数とする定積分を台形公式を用いて数値計算するプログラムを作成してください。
(1) $${ \int_0^2 (6x^2-1)dx }$$
(2) $${ \int_1^2 (-3) dx }$$
(3) $${ \int_0^1 (3x^2+2x-1) dx }$$
ヒント
プログラム
上記の台形公式(定積分の数値計算)をもとに、課題についての2次関数を被積分関数とする定積分を数値計算するプログラム(未完成)を示します(ソースコード1)。
// 定積分を台形公式を利用して計算するプログラム
void setup(){
// (1)
float a = 6.0; // x^2の係数
float b = 0.0; // x の係数
float c = -1.0; // 定数項
float l = 0.0; // 積分領域の下限
float r = 2.0; // 積分領域の上限
float res1 = trapezoidal_rule_quadratic_function(a,b,c,l,r);
println("(1):", res1);
// (2)
a = 0.0; // x^2の係数
b = 0.0; // x の係数
c = -3.0; // 定数項
l = 1.0; // 積分領域の下限
r = 2.0; // 積分領域の上限
float res2 = trapezoidal_rule_quadratic_function(a,b,c,l,r);
println("(2):", res2);
// (3)
a = 3.0; // x^2の係数
b = 2.0; // x の係数
c = -1.0; // 定数項
l = 0.0; // 積分領域の下限
r = 1.0; // 積分領域の上限
float res3 = trapezoidal_rule_quadratic_function(a,b,c,l,r);
println("(3):", res3);
}
// 2次関数
float f(
float a, // x^2の係数
float b, // xの係数
float c, // 定数項
float x
){
return a*x*x + b*x + c;
}
// 2次関数に対する定積分を計算する関数
float trapezoidal_rule_quadratic_function(
float a, // x^2の係数
float b, // x の係数
float c, // 定数項
float l, // 積分領域の下限
float r // 積分領域の上限
){
}
ソースコード1 2次関数を被積分関数とする定積分を数値計算するプログラム(未完成)
ソースコード1では、2次関数$${y=ax^2+bx+c}$$を関数 f として、2次関数の係数$${a,b,c}$$を引数とする関数として準備しています。また、積分領域の下限を l 、上限を r として、2次関数に対する定積分を計算する関数 trapezoidal_rule_quadratic_function を準備しています。このtrapezoidal_rule_quadratic_function 関数を setup 関数内で呼び出して、2次関数の係数$${a,b,c}$$と積分領域 l 、r を指定することで、課題の定積分の数値計算を行うことができます。
ただし、trapezoidal_rule_quadratic_function 関数の中身は記述していません。上記の台形公式(定積分の数値計算)で説明したことを参考に、trapezoidal_rule_quadratic_function 関数の中身を追記してプログラムを完成させてください。
なお、 スケッチ名は「calc_definite_integral」とします。
それでは、よろしくお願いします。
MK's papa