【Python】階差数列:第n項の値と合計値を算出する

■階差数列

任意の数列anにおいて、
bn = an+1 – an (n = 1, 2, 3, …)
と表記できる数列bnを数列anの階差数列という。

▼イメージ

■例題

以下の数列anについて、第10項の値と第10項までの合計値を求める。

an = 2, 4, 8, 14, 22, 32, ・・・

▼階差数列bnを調べる

数列anについて、an+1 – anの値(bn)を調べる。


・サンプルコード

# 初期値をセット
a_array = [2, 4, 8, 14, 22, 32]
b_array = []
i = 0

# 配列(a_array)の要素数-1回分繰り返し
while i < len(a_array) - 1:
    # 配列(a_array)の[i+1]番目の要素 - [i]番目の要素の結果を配列(b_array)に格納
    b_array.append(a_array[i+1] - a_array[i])
    # インクリメント処理
    i += 1

print('an:', a_array)
print('bn:', b_array)

・実行結果

an: [2, 4, 8, 14, 22, 32]
bn: [2, 4, 6, 8, 10]

実行結果より、数列bnは、初項2、公差2の等差数列であることがわかった。

▼数列anの第10項を求める

数列bnが、初項2、公差2の等差数列であることより、数列anの第n項の値は、初項a1と数列bn-1までの和を足し合わせた値であることがわかる。

a1 = a1 + (b0) = 2
a2 = a1 + (b1) = 2 + 2 = 4
a3 = a1 + (b1 + b2) = 2 + (2 + 4) = 6
a4 = a1 + (b1 + b2 + b3) = 2 + (2 + 4 + 6) = 14

したがって、数列anの第10項は、
a10 = a1 + (b1 + b2 + b3 + … + b9)
より、数列anの初項+数列bnの第9項までの和で求めることができる。

▼等差数列の和の求め方の参照先。


・サンプルコード

# 初期値:項数[N:10項]
a_array = [2, 4, 8, 14, 22, 32]
b_array = [2, 4, 6, 8, 10]
N = 10

# 配列(b_array)関係の値
# 初項(b1)と公差(d)を変数に格納
# 数列(an)の第10項-1(=第9項)
b1 = b_array[0]
d = b_array[1] - b_array[0]
n = N - 1

# a1と配列(b_array)の値を加算する(等差数列の和の公式)
a10 = a_array[0] + ((n * (2 * b1 + (n - 1) * d)) / 2)

print('階差数列の第10項:', a10)

・実行結果

階差数列の第10項: 92.0

▼数列anの第10項までの合計値を求める

数列anの第10項を求めることが可能となったため、次は合計値を求める。
求め方は、先ほどの算出方法を第1項から第10項まで繰り返し処理を行い、合算する。


・サンプルコード

# 初期値:項数[N:10項]
a_array = [2, 4, 8, 14, 22, 32]
b_array = [2, 4, 6, 8, 10]
N = 10

# 配列(b_array)関係の値
# 初項(b1)と公差(d)を変数に格納
# 数列(an)の第10項-1(=第9項)
b1 = b_array[0]
d = b_array[1] - b_array[0]
n = N - 1

sum = 0
j = 0

# 10回繰り返し
for j in range(N):
    sum = sum + a_array[0] + ((j * (2 * b1 + (j - 1) * d)) / 2)

print('階差数列の第10項までの和:', sum)

・実行結果

階差数列の第10項までの和: 350.0
タイトルとURLをコピーしました