0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

やさしい母関数(Generating Function)(その3)

Last updated at Posted at 2022-11-27

前回までの記事で母関数の作り方をいくつか紹介しました。ただ母関数を展開すると多項式になりその計算は手計算では限度があります。そこでプログラミングの出番なのですが特にSagemathはこの分野では強力なツールとなります。

Sagemathで母関数からべき級数を求める

PowerSeriesRingを使って、基本形の$f=\large \frac{1}{1-x}$を$x^{10}$まで定義して表示します。default_precで何項まで展開するかを指定しています。

x = PowerSeriesRing(QQ, 'x', default_prec=10+1).gen()
f = ((1-x)^(-1))
show(f)

image.png

同様に母関数$f=\large \frac{1}{(1-x)^2}$を多項式及びlist methodを使って数列を表示します。

f = ((1-x)^(-2))
show(f)
f.list()

image.png

Sagemathで例題の母関数からリストを表示

要は母関数を定義すれば数列(及び多項式)は計算してくれるということです。それでは(その1)での例題1~12の数列を一気に表示してみましょう。

print("例題  1:",(4*(1-x)^(-1)).list())
print("例題  2:",(2*(1-x)^(-2)).list())
print("例題  3:",(2*x^3*(1-x)^(-2)).list())
print("例題  4:",(1*(1-5*x)^(-1)).list())
print("例題  5:",(1*(1+3*x)^(-1)).list())
print("例題  6:",(1*(1-5*x^2)^(-1)).list())
print("例題  7:",(x*(1-x^3)^(-2)).list())
print("例題  8:",(4*x*(1-x)^(-1)).list())
print("例題  9:",(1*(1-4*x)^(-1)).list())
print("例題 10:",(x*(1+x)^(-1)).list())
print("例題 11:",(3*x*(1+x)^(-2)).list())
print("例題 12:",((1+x+x^2)*(1-x)^(-2)).list())
# 例題  1: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
# 例題  2: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
# 例題  3: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
# 例題  4: [1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625]
# 例題  5: [1, -3, 9, -27, 81, -243, 729, -2187, 6561, -19683, 59049]
# 例題  6: [1, 0, 5, 0, 25, 0, 125, 0, 625, 0, 3125]
# 例題  7: [0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4]
# 例題  8: [0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
# 例題  9: [1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576]
# 例題 10: [0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1]
# 例題 11: [0, 3, -6, 9, -12, 15, -18, 21, -24, 27, -30, 33]
# 例題 12: [1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

フィボナッチ数列や三角数

フィボナッチ数列や三角数も(その2)で母関数が求まっているので全く同様に数列が求まります。

print("フィボナッチ数列:",(x*(1-x-x^2)^(-1)).list())
print("三角数:",(1*(1-x)^(-3)).list())
#フィボナッチ数列: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
# 三角数: [1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66]

今回は$x^{10}$までの係数を表示しましたが、default_precの値を増やせばより長い数列を扱うことが出来ます。さらに関数は多項式の形で保持されているので、その後の色々な演算を行うことが可能です。

次回の記事では例題を示しながらそのような応用例を紹介したいと思います。

(開発環境:CoCalc)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?