【Python】数列の極限をsympy.limit()で解き、グラフに図示する

■数列の極限

数列の極限とは、数列に対して、1番目の値→2番目の値・・・100番目の値と、項数を増やしていったとき、明確な結果が出る場合を「極限がある」と呼び、明確な結果が出ない場合を「極限がない」と表す。

▼極限の種類

・数列an:1、2、3、・・・、n、・・・
・数列bn:-3、-6、-9、・・・、-3n、・・・
・数列cn:-5、25、-125、・・・、-5n、・・・
・数列dn:1/4、1/16、1/64、・・・、(1/4)n、・・・


数列anは、徐々に数が大きくなり、キリがなく無限に増加している。
この状態を正の無限大に発散すると呼び、以下の式で表すことができる。

また、数列anは、明確な結果(+∞)が出ているため、「極限がある」に分類される。


数列bnは、徐々に数が小さくなり、キリがなく無限に減少している。
この状態を負の無限大に発散すると呼び、以下の式で表すことができる。

また、数列bnは、明確な結果(-∞)が出ているため、「極限がある」に分類される。


数列cnは、交互に正負の値となり、一定の値に収束することがない。この状態のことを振動と呼ぶ。

また、数列bnは、明確な結果が出ないため、「極限がない」に分類される。


数列dnは、徐々に数が小さくなり、限りなく0に近づいている。
この状態をを0に収束すると呼び、以下の式で表すことができる。

数列dnは、明確な結果(0)が出ているため、「極限がある」に分類される。
また、一定の値(数列dnでは0)に近く場合、その値を極限値と呼ぶ。

▼極限の種類(まとめ)

極限について、数列anからdnまでをまとめた表を以下に示す。

数列極限の有無収束/発散極限値
an極限がある発散
bn極限がある発散
cn極限がない発散
dn極限がある収束0

■例題

pythonのsympy.limit()を使用して極限を求める。

▼sympy.limit()の使い方

Pythonのsympy.limit()を使用することで、極限の有無・極限値を算出してくれる。

▼使い方

limの式について、それぞれ引数を設定していく。

sympy.limit(求める式, 任意の変数(n), 無限(∞))

▼問題1

・問題


・サンプルコード

import sympy

# 文字列をセット
n = sympy.Symbol('n')

# 無限をセット
oo = sympy.oo

# 問題1を解く
ans1 = sympy.limit((n**3) - (4 * (n**2)), n, oo)

# 結果を表示
print(ans1)

・実行結果

oo

・補足:グラフに図示して確認

import numpy as np
from matplotlib import pyplot as plt

# 便宜上、第1から100項までの値を設定
n_min = 1
n_max = 100
n_interval = 1
n = np.arange(n_min, n_max, n_interval)

# 数列a(n)について、第1から100項までの値を算出
an = (n**3) - (4 * (n**2))

# グラフを作成
plt.plot(n, an)

# グラフにx軸,y軸(0)を図示
# 補助線(0)を作成 [axhline:水平 axvline:垂直]
plt.axhline(y=0, color="gray")
plt.axvline(x=0, color="gray")

# グラフを表示
plt.show()

∞に増加し続けていることがわかる。

▼問題2

・問題


・サンプルコード

import sympy

# 文字列をセット
n = sympy.Symbol('n')

# 無限をセット
oo = sympy.oo

# 問題2を解く
ans2 = sympy.limit((1 - (n**2))/((3 * n) + 1), n, oo)

# 結果を表示
print(ans2)

・実行結果

-oo

・補足:グラフに図示して確認

import numpy as np
from matplotlib import pyplot as plt

# 便宜上、第1から100項までの値を設定
n_min = 1
n_max = 100
n_interval = 1
n = np.arange(n_min, n_max, n_interval)

# 数列b(n)について、第1から100項までの値を算出
bn = (1 - (n**2))/((3 * n) + 1)

# グラフを作成
plt.plot(n, bn)

# グラフにx軸,y軸(0)を図示
# 補助線(0)を作成 [axhline:水平 axvline:垂直]
plt.axhline(y=0, color="gray")
plt.axvline(x=0, color="gray")

# グラフを表示
plt.show()

∞に減少し続けていることがわかる。

▼問題3

・問題


・サンプルコード

import sympy

# 文字列をセット
n = sympy.Symbol('n')

# 無限をセット
oo = sympy.oo

# 問題3を解く
ans3 = sympy.limit(((3**n) - (2**n))/((2**n) + (3**n)), n, oo)

# 結果を表示
print(ans3)

・実行結果

1

・補足:グラフに図示して確認

import numpy as np
from matplotlib import pyplot as plt

# 便宜上、第1から30項までの値を設定
n_min = 1
n_max = 30
n_interval = 1
n = np.arange(n_min, n_max, n_interval)

# 数列c(n)について、第1から30項までの値を算出
cn = ((3**n) - (2**n))/((2**n) + (3**n))

# グラフを作成
plt.plot(n, cn)

# グラフにx軸,y軸(0)を図示
# 補助線(0)を作成 [axhline:水平 axvline:垂直]
plt.axhline(y=0, color="gray")
plt.axvline(x=0, color="gray")

# グラフを表示
plt.show()

1に収束していることがわかる。

▼問題4

・問題


・サンプルコード

import sympy

# 文字列をセット
n = sympy.Symbol('n')

# 無限をセット
oo = sympy.oo

# 問題4を解く
ans4 = sympy.limit((-1)**n, n, oo)

# 結果を表示
print(ans4)

・実行結果

nan

極限がない場合は「nan」が返される。


・補足:グラフに図示して確認

import numpy as np
from matplotlib import pyplot as plt

# 便宜上、第1から10項までの値を設定
n_min = 1
n_max = 10
n_interval = 1
n = np.arange(n_min, n_max, n_interval)

# 数列d(n)について、第1から10項までの値を算出
dn = (-1)**n

# グラフを作成
plt.plot(n, dn)

# グラフにx軸,y軸(0)を図示
# 補助線(0)を作成 [axhline:水平 axvline:垂直]
plt.axhline(y=0, color="gray")
plt.axvline(x=0, color="gray")

# グラフを表示
plt.show()

1と-1を行きき(振動)しており、収束していないことがわかる。

タイトルとURLをコピーしました