見出し画像

高校数学をプログラミングで解く(数学B編)「3-3 等比数列とその和」


はじめに

今回は、数学Bで学ぶ「等比数列とその和」について、等比数列や等比数列の和を計算してその値を出力するプログラムを作成します。

等比数列

まず、等比数列とその性質についてまとめておきます。

初項$${a}$$、公比$${r}$$、項数$${n}$$の等比数列$${\{a_n\}}$$の和を$${S_n}$$とする。
定義 $${a_{n+1}=a_nr}$$
一般項 $${a_n=ar^{n-1}}$$
等比数列の和

$$
r \neq 1 \mathrm{のとき} S_n = \frac{a(1-r^n)}{1-r} = \frac{a(r^n-1)}{r-1}, \ \ r = 1 \mathrm{のとき} S_n=na
$$

 等比数列をなす3数
 $${a,b,c}$$は$${0}$$でないとする。数列$${a,b,c}$$が等比数列$${\Leftrightarrow b^2=ac}$$

以下で、等比数列についての問題をプログラミングして考えてみます。

等比数列の第n項の値を計算する

まず、等比数列の第$${n}$$項を計算して、開発環境ウィンドウの下部のコンソールにその値を表示するプログラムを作成します。その際、等比数列の一般項を関数として準備します。

問題1
初項$${5}$$、公比$${2}$$の等比数列の第$${8}$$項の値を求めよ。

問題1の値を求めるプログラムは以下のようになります。

// 等比数列の第n項の値を求めてコンソールに出力
void setup(){
  
  float a = 5.0; // 初項
  float r = 2.0; // 公比
  int n = 8; // 第n項
  
  float a_n = calc_geometrical_progression(a,r,n);
  println(a_n);
}

// 初項a,公比dの等比数列の第n項を求める関数(一般項)
float calc_geometrical_progression(
  float a, // 初項
  float r, // 公比
  int n // 第n項
){
  return a * pow(r,n-1);
}

ソースコード1 等比数列の第$${n}$$項を求めるプログラム

今回は、等比数列の一般項を利用して、初項$${a}$$,公比$${r}$$の等比数列の第$${n}$$項を求める関数 calc_geometrical_progression を作成しました。calc_geometrical_progression 関数は引数として、
a:初項 float型
r:公比 float型
n:第$${n}$$項 int型
の3つを取ります。また、返り値は等比数列の第$${n}$$項の値を返します。

ソースコード1を、Processingの開発環境ウィンドウを開いて(スケッチ名を「geometrical_progression」としています)、テキストエディタ部分に書いて実行すると、開発環境ウィンドウのコンソール部分に「640.0」と出力されます(図1)。

図1 スケッチ「geometrical_progression」の実行結果

等比数列を第n項まで求める

次に、等比数列を第$${n}$$項まで計算して、開発環境ウィンドウの下部のコンソールにそれらの値を表示するプログラムを作成します。その際、スケッチ「geometrical_progression」(ソースコード1)で作成した、初項$${a}$$,公比$${r}$$の等比数列の第$${n}$$項を求める関数 calc_geometrical_progression を再利用します。

問題2
初項$${5}$$、公比$${2}$$の等比数列を第$${10}$$項まで求めよ。

問題2の等比数列を求めるプログラムは以下のようになります。

// 等比数列の第n項まで求めてコンソールに出力
void setup(){
  
  float a = 5.0; // 初項
  float r = 2.0; // 公比
  int n = 10; // 第n項
  
  for(int i=1; i<=n; i++){
    println(calc_geometrical_progression(a,r,i));
  }
}

// 初項a,公比dの等比数列の第n項を求める関数(一般項)
float calc_geometrical_progression(
  float a, // 初項
  float r, // 公比
  int n // 第n項
){
  return a * pow(r,n-1);
}

ソースコード2 等比数列を第$${n}$$項まで求めるプログラム

今回は、forループを利用して calc_geometrical_progression 関数を繰り返し呼び出すことで、第$${1}$$項から第$${10}$$項までの等比数列の値を順に計算し、コンソールに出力するようにしています。

ソースコード2を、Processingの開発環境ウィンドウを開いて(スケッチ名を「geometrical_progression2」としています)、テキストエディタ部分に書いて実行すると、開発環境ウィンドウのコンソール部分に

5.0
10.0
20.0
40.0
80.0
160.0
320.0
640.0
1280.0
2560.0

と出力されます(図2)。

図2 スケッチ「geometrical_progression2」の実行結果

等比数列の和を計算する

最後に、下記の問題3について、等比数列の和を計算して、開発環境ウィンドウの下部のコンソールにその値を表示するプログラムを作成します。その際、等比数列の各項を単純に足し上げていく方法と等比数列の和の公式③を利用する方法の2つの方法で計算します。

問題3
初項$${5}$$、公差$${2}$$、項数$${10}$$の等比数列の和を求めよ。

単純に足し上げる方法

まず、等比数列の各項を単純に足し上げる方法で計算するプログラムを作成します。

// 等比数列の第n項までの和を求める(単純に和を取る)
void setup(){
  
  float a = 5.0; // 初項
  float r = 2.0; // 公比
  int n = 10; // 第n項
  
  float sum = 0.0; // 等比数列の和
  for(int i=1; i<=n; i++){
    sum += calc_geometrical_progression(a,r,i);
  }
  println(sum);
}

// 初項a,公比dの等比数列の第n項を求める関数(一般項)
float calc_geometrical_progression(
  float a, // 初項
  float r, // 公比
  int n // 第n項
){
  return a * pow(r,n-1);
}

ソースコード3 等比数列を足し上げて和を計算するプログラム

ソースコード3は、等比数列の各項を calc_geometrical_progression 関数を用いて計算し、順に変数 sum に足しこんでいくことで等比数列の和を算出しています。

ソースコード3を、Processingの開発環境ウィンドウを開いて(スケッチ名を「sum_geometrical_progression」としています)、テキストエディタ部分に書いて実行すると、開発環境ウィンドウのコンソール部分に「5115.0」と出力されます(図3)。

図3 スケッチ「sum_geometrical_progression」の実行結果

等比数列の和の公式を利用する

次に、等比数列の和の公式③を利用して、問題3の等比数列の和を計算するプログラムを作成します。

// 等比数列の第n項までの和を求める(等比数列の和の公式)
void setup(){
  
  float a = 5.0; // 初項
  float r = 2.0; // 公比
  int n = 10; // 第n項
  
  // 等比数列の和
  float sum = sum_geometrical_progression(a,r,n);
  println(sum);
}

// 初項a,公比r,項数nの等比数列の和を求める関数
float sum_geometrical_progression(
  float a, // 初項
  float r, // 公比
  int n // 項数
){
  return a * (pow(r,n)-1.0)/(r-1.0); 
}

ソースコード4 等比数列の和の公式③を利用したプログラム

今回は、等比数列の和の公式③を利用して、初項$${a}$$,公比$${r}$$,項数$${n}$$の等比数列の和を求める関数 sum_geometrical_progression を作成しました。sum_geometrical_progression 関数は引数として、
a:初項 float型
r:公比 float型
n:項数 int型
の3つを取ります。また、返り値は等比数列の和の公式③で計算した和の値を返します。

ソースコード4を、Processingの開発環境ウィンドウを開いて(スケッチ名を「sum_geometrical_progression2」としています)、テキストエディタ部分に書いて実行すると、開発環境ウィンドウのコンソール部分に「5115.0」と出力されます(図4)。これは、単純に足し上げる方法で計算したもの(ソースコード3)と同じ結果になっています。

図4 スケッチ「sum_geometrical_progression2」の実行結果

まとめ

今回は、数学Bで学ぶ「等比数列とその和」について、等比数列や等比数列の和を計算してその値を出力するプログラムを作成しました。
まず、等比数列の第$${n}$$項を計算してその値をコンソールに出力するプログラム、次に等比数列を第$${n}$$項まで計算してそれらの値をコンソールに出力するプログラムを作成しました。そして、等差数列の和の計算は、等比数列を算出して単純に足し上げる方法と等比数列の和の公式③を利用する方法との2つの方法でプログラムを作成しました。

今回作成したプログラムは、記事『高校数学をプログラミングで解く(数学B編)「3-1 数列と一般項、等差数列」』や記事『高校数学をプログラミングで解く(数学B編)「3-2 等差数列の和」』で紹介したプログラムを等差数列から等比数列に変えただけということに気付いた方もいらっしゃるのではないでしょうか。実際、等差数列で利用したスケッチをコピーして必要な部分を等比数列に書き換えてプログラムを作成した方が簡単です。プログラミング能力を高めるためにも一度試してみることをお勧めします。

最後に、一点今回作成したプログラムは公比や項数をあまりに大きくすると、オーバーフローを起こす可能性があります。実際に公比や項数を大きくとってオーバーフローを起こさせてみてください。オーバーフローのことを知っているだけでなく、実際に経験することも勉強になるでしょう。

参考文献

改訂版 教科書傍用 スタンダード 数学B(数研出版、ISBN9784410209468)


この記事が気に入ったらサポートをしてみませんか?