[SymPy] 無限大記号と関数の極限

[SymPy] 無限大記号と関数の極限

無限大記号

 SymPy では oo という記号で無限大 (∞) を扱います。

# sympyから無限大記号をインポート
from sympy import oo

# 無限大記号の演算
print("oo + 1 =", oo + 1)
print("oo - oo =", oo - oo)
print("oo / oo =", oo / oo)
oo + 1 = oo
oo - oo = nan
oo / oo = nan

 oo から oo を引いても 0 にはならず、nan という記号が返っています。
 nan は not a number (非数) を意味する記号です。
 このように、oo の演算は普通の数の演算とは異なる結果を返します。
 

関数の極限

 sympy.limit()は、関数の極限操作を行ないます。
 $\displaystyle\lim_{x\rightarrow a}f(x)$ は次のように記述します。

 sympy.limit(f(x), x, a)

関数の極限サンプルコード

 解析学で有名な極限公式
 
\[\lim_{x\rightarrow 0}\frac{\sin x}{x}=1\]
を確認してみましょう。

# 関数の極限サンプルコード①

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# f(x) = sinx / x
fx = sympy.sin(x)/x

# x → 0
lim_fx = sympy.limit(fx, x, 0)

print(lim_fx)
1

 
 微分積分学では次の極限公式もよく登場します。
 
\[\begin{align*}
&\lim_{x\rightarrow 0}\frac{\tan x}{x}=1\\[6pt]
&\lim_{x\rightarrow 0}\frac{1-\cos x}{x^2}=\frac{1}{2}\end{align*}\] 

# 関数の極限サンプルコード②

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# f(x)とg(x)を定義
fx = sympy.tan(x)/x
gx = (1-sympy.cos(x)) / x**2

# x → 0
lim_fx = sympy.limit(fx, x, 0)
lim_gx = sympy.limit(gx, x, 0)

print(lim_fx, ",", lim_gx)
1, 1/2

 
 $x\sin (1/x)$ は振動しながら原点に収束する関数です。
 
\[\lim_{x\rightarrow 0}x\sin\frac{1}{x}=0\] 

# 関数の極限サンプルコード③

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# f(x) = sin(1/x)
fx = x * sympy.sin(1/x)

# x → 0
lim_fx = sympy.limit(fx, x, 0)

print(lim_fx)
0

 

極限値が存在しない場合

 $\sin x$ は $x\rightarrow \infty$ の極限値をもちませんが、その場合でも $-1$ から $1$ の間で振動することを <-1, 1> という記号で表示します。

# 関数の極限サンプルコード④

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# 無限大の定義
oo = sympy.oo

# f(x) = sinx
fx = sympy.sin(x)

# x → 0
lim_fx = sympy.limit(fx, x, oo)

print(lim_fx)
<-1, 1>

 

右側極限と左側極限

 解析学では関数 $f(x)$ がある値 $a$ に $x$ 軸の正の方向から近づくときの極限値を右側極限、負の方向から近づくときの極限値を左側極限とよび、それぞれ $\displaystyle\lim_{x\rightarrow a+0}f(x)$, $\displaystyle\lim_{x\rightarrow a-0}f(x)$ と表します。たとえば $\tan x$ は右側から $\pi/2$ に近づくと $-\infty$ 、左側から $\pi/2$ に近づくと $\infty$ という極限値をとります。sympy.limit() の第 4 引数に '+' を渡すと右側極限を、'-' を渡すと左側極限を返します。

# 関数の極限サンプルコード⑤

# tanxの右側極限と左側極限

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# 無限大の定義
oo = sympy.oo

# 円周率の定義
pi = sympy.pi

# f(x) = tan(x)
fx = sympy.tan(x)

# x → pi/2+0
lim_fx_right = sympy.limit(fx, x, pi/2, '+')

# x → pi/2-0
lim_fx_left = sympy.limit(fx, x, pi/2, '-')

print("右側極限 :", lim_fx_right)
print("左側極限 :", lim_fx_left)
右側極限 : -oo
左側極限 : oo