珍しく数学も関連する話をする. が, 今回は備忘録なので正確性とかは期待しないで欲しい. 二時間くらいしかいじっていないし.
Weierstrass の 関数というのがあるという話は以前にしたと思う.を格子とし、
が Weierstrass の (ぺー)関数である。
これの の周りでのローラン展開を計算すると, こうなる.*1
ただしここで、
この級数の , , , を計算する場面があったのだけど, 大変.
大変なので, Python とかでできないかなと調べてみたら, Sympy というものを使って簡単にできそうだった.
#!/usr/bin/env python from sympy import * z = Symbol('z') g4,g6,g8,g10 = symbols('g4 g6 g8 g10') pz = 1 / z ** 2 + 3 * g4 * z**2 + 5 * g6 * z**4 + 7 * g8 * z**6 + 9 * g10 * z**8 pz_sq = expand(pz**2) pz_tri = expand(pz**3) pz_diff = diff(pz, z) pz_diff_sq = expand(pz_diff**2) print(pz.series(z)) print(pz_diff.series(z)) print(pz_diff_sq.series(z)) print(pz_sq.series(z)) print(pz_tri.series(z))
実行結果はこんな感じ.
z**(-2) + 5*g6*z**4 + 3*g4*z**2 + O(z**6) -2/z**3 + 42*g8*z**5 + 20*g6*z**3 + 6*g4*z + O(z**6) 4/z**6 + z**2*(36*g4**2 - 168*g8) + z**4*(-288*g10 + 240*g4*g6) - 80*g6 - 24*g4/z**2 + O(z**6) z**(-4) + z**4*(9*g4**2 + 14*g8) + 10*g6*z**2 + 6*g4 + O(z**6) z**(-6) + z**2*(27*g4**2 + 21*g8) + z**4*(27*g10 + 90*g4*g6) + 15*g6 + 9*g4/z**2 + O(z**6)
なんか表示が気に入らない, 読みにくい. うーん……あと合っているのかわからないし*2変なトコでぶつ切りにされている.
まいまはあまり時間がないのでこれくらいにしておこう......読みにくいのでブログには数式表記で書こうかと思ったけどひとつで力尽きた.