ベキ級数展開
ある関数
で表すことを 関数の 級数展開 といいます。無限に項をとることによって、理論上は関数と級数展開は厳密に一致しますが、実用のために有限項で打ち切っても、適切な数の項をとることによって、ベキ級数は
などは級数展開の代表的な例の1つです。
sympy.series()
SymPy パッケージ の sympy.series() を使うと任意の関数をベキ級数展開できます。
以下のコードは Jupyter notebook の使用を前提に記述されています。
最初に必要な関数をまとめてインポートしておきます。
# SYMPY_SERIES
# In[1]
from sympy import init_printing, var, series, poly, cos, sin
# 数式をLaTeX表示
init_printing()
# シンボルxを定義
var('x')
# In[2]
# sinxをx=0の周りで級数展開
series(sin(x), x)
デフォルト設定では、
# In[3]
# sinxをx=0の周りで級数展開
series(sin(x), x, n=8)
オプション引数 x0 で展開の中心点を指定できます (デフォルトは 0)。
# In[4]
# sinxをx=1の周りで級数展開
series(sin(x), x, x0=1)
sympy.series() で得た式を sympy.poly() で多項式クラス (sympy.polys.polytools.Polyクラス) のオブジェクトに変換しておくと、色々なメソッドが使えるようになって便利です。
# In[5]
# cosxをx=0の周りで級数展開
f = series(cos(x), x, n=10)
# 級数展開された多項式fを表示
display(f)
# fを多項式オブジェクトに変換
g = poly(f)
# 級数の係数をすべて取得
c = g.coeffs()
c.reverse()
# 級数の係数を表示
display(c)
母関数の級数展開
級数
の母関数は
で与えられることが知られています。
# In[6]
# フィボナッチ数列の母関数
p = 1/(1 - x - x**2)
# フィボナッチ数列の母関数を級数展開
f = series(p, x, n=10)
display(f)
係数は確かにフィボナッチ数列となっていることがわかります。
# In[7]
# fを多項式オブジェクトに変換
g = poly(f)
# フィボナッチ級数のすべての係数を取得
c = g.coeffs()
c.reverse()
display(c)
コメント
お尋ねしますが,
オーダーの記号の設定をすることは可能でしょうか?
例えば,上記であれば,
sin xのx=1のまわりのテイラー展開で最後の項が
O((x-1)^6;x→1)
となっていますが,これを
O((x-1)^5)
等に変更できるのでしょうか?できればOも\mathcal{O}ではなく小文字のoに変更できればなおよいのですが.
sympy.sereis() はオプション引数 n で展開打ち切り次数を設定できます。
デフォルトで n=6 に設定されていますが、たとえば
series(sin(x), x, x0=1, n=5)
とすれば、最後の項が O((x-1)^5) となります。
O を小文字にする方法はわかりません。申し訳ないです。
遅れましたがどうもありがとうございました.