ISSN 1349-127X (Online)
ISSB 1349-1261 (Paper)
http://www.math.kobe-u.ac.jp/raj

Risa/Asir Journal
Volume 2 (2007)

Editors
Nobuki Takayama (Managing editor)
Toshinori Oaku (Advisory editor)

Risa/Asir Journal will be a step to “Journal of Free Mathematical Software”.
We welcome not only articles related to Computer algebra system Risa/Asir,but also any articles on free mathematical software.
Please visit http://www.math.kobe-u.ac.jp/raj. All articles and attachedsoftware systems will be reviewed.

Risa/Asir Journal Vol 2 (2007), 1--32
http://www.math.kobe-u.ac.jp/raj

1 変数代数的局所コホモロジー類に対するRisa/Asir 用パッケージ taji alc
庄司卓夢, 田島慎一

まえがき

taji alc は, 1 変数有理関数に関する諸計算 (部分分数分解, ローラン展開, 留数計算) やその応用(剰余公式, 有理数係数の線形常微分方程式のコーシー問題) に対してこれまで設計してきたアルゴ
リズムを, Asir 言語でプログラム化し, Asir のモジュール構造を使ってパッケージ化したものである. 本稿はそのチュートリアルである. パッケージの使用法がその主な内容となっているが, 数学的な説明も少し含まれている.

taji alc の関数は, 全て exact な計算であり, 計算は高速である. メインは留数計算であるが, それ以外にも例えば, フーリエ・ボレル変換など珍しい機能も扱っている.
数学的には, 代数的局所コホモロジー類とネーター作用素が重要な役割を果たしているが, アル
ゴリズムは剰余体上での多項式演算と微分演算のみで構成されている. ユーザ側からは見えないが,アルゴリズムはこれまでにない新しいものである. その辺りの数学的な詳細については, 参考文献
を参照して欲しい.

1

目次
1

taji alc パッケージ
1.1 使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 主な関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
33

数学的な詳細について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.3
2

用語の説明

2.1
2.2
2.3

2.4
2.5
2.6
3

5

整数係数化リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
代数的局所コホモロジー類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5
6

ネーター作用素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 ネーター作用素と D 加群 . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 ネーター作用素とローラン展開 . . . . . . . . . . . . . . . . . . . . . . . .

788

2.3.3 ネーター作用素と留数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
剰余公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1011指数多項式リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1213

フーリエ・ボレル変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

プログラムの使用例

3.1
3.2

cpfd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
snoether . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14
14
16

3.3
3.4

laurent expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
residue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18
20

3.5
3.6
3.7

invpow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rem formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
solve ode cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22
23
25

3.8
3.9

solve ode cp ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27
29

3.10 invfbt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2

1

taji alc パッケージ

1.1

使い方

taji alc の各関数を使うには, Asir を起動しパッケージを読み込む必要がある. コマンドライン
で読み込む場合は,import("taji_alc.rr");と入力する.

1.2

主な関数• taji alc.cpfd
有理関数の部分分数分解を求める.

• taji alc.snoether
有理関数が定める代数的局所コホモロジー類のネーター作用素を求める.

• taji alc.laurent expansion有理関数の極におけるローラン展開の主要部の係数を求める.
• taji alc.residue
有理関数の極における留数を求める.
• taji alc.invpow
剰余体上での逆冪を求める.
• taji alc.rem formula
多項式を与えたときの剰余公式を求める.

• taji alc.solve ode cp
有理数係数の線形常微分方程式のコーシー問題の解を求める.

• taji alc.solve ode cp ps
有理数係数の線形常微分方程式のコーシー問題の特殊解を求める.
• taji alc.fbt
有理関数が定める代数的局所コホモロジー類のフーリエ・ボレル変換を行う.
• taji alc.invfbt
指数多項式の逆フーリエ・ボレル変換を行う.
• taji alc.diﬀ rat
有理関数の n 階の導関数を求める.

3

taji alc の関数は有機的であり, モジュール内の関数を呼び出して計算を行う.
関数

呼び出す関数

cpfd

invpow

snoether

invpowlaurent expansion

snoetherresidue

invpow

invpow

標準ライブラリの”gr”と”sp”の諸機能

rem formula

cpfd, snoether

solve ode cp

fbt, solve ode cp ps

solve ode cp ps

fbt, invfbt

fbt

residue

invfbtdiﬀ rat

1.3

数学的な詳細について

taji alc の関数の内部的な情報 (アルゴリズムの構成法や数学的な理論背景) については, 次の文
献に説明がある.
関数

文献

cpfd

[17]

snoether[17, 18]

laurent expansion[17, 18]

residue[18, 16]

invpow[15]

rem formula[19]

solve ode cp[14, 20]solve ode cp ps[14, 20]fbt[1, 14, 20]

invfbt[1, 14, 20]

論文 [2, 5] は, D 加群を用いた留数計算の研究の出発点となる論文である. 代数的局所コホモロ
ジーの概念と微分方程式を用いることで留数計算が可能となることを示し, 論文 [3, 4] で留数値を計算するアルゴリズムを与えた. 現在採用しているアルゴリズムは, [2, 5] の結果にさらにネーター作用素の概念を用いて導出したものである. ネーター作用素の構成法は, 論文 [14] で 3 通りの方法を提示した. プログラムではその中で最も効率がよい方法を採用している.

4

2

用語の説明

2.1

整数係数化リスト

taji alc で扱う有理関数の各演算は, 有理数係数多項式の四則演算が中心となるが, そこにはまず解決すべき問題がある.
それは何かと言うと, 例えば, 有理数係数多項式同士の積

2
1
7 2
1
1
( x2 − x + )( x2 − x + )
3
5
8 7
11
3
を計算したいとする. Asir では,[0] (2/3*x^2-1/5*x+7/8)*(2/7*x^2-1/11*x+1/3);
4/21*x^4-136/1155*x^3+971/1980*x^2-193/1320*x+7/24
といったように, 各係数ごとに gcd を計算し, 約分を完全に行って結果を返す. しかし, 計算効率を考えるとこれは問題である. というのは, gcd は速い部類の計算であるものの, 頻繁に行われたり,
係数が大きくなったりすれば話は別になり, この gcd 計算がボトルネックとなりうるからである.
そこで, 次のような対策をとる.

2 2 1
7
1
x − x+ =(80x2 − 24x + 105)
3
5
8
120
2 2
1
1
1
x − x+ =(66x2 − 21x + 77)
7
11
3
231
といったように, lcm を計算し係数部分を通分する. こうすることで gcd の計算回数が減るだけでなく, プログラム内で途中の計算を主体的に操作しやすくなる. 係数が大きくなるが, gcd を毎回計算するよりは効率的である. taji alc のプログラムでは, 整数係数多項式と分母の整数を 2 つのプロ
グラム変数に分けて, 別々に計算を進行させる.
この考え方で上記の積を計算すると,[11] 120*231;
27720[12] (80*x^2-24*x+105)*(66*x^2-21*x+77);
5280*x^4-3264*x^3+13594*x^2-4053*x+8085
より,

1(5280x4 − 3264x3 + 13594x2 − 4053x + 8085)
27720
となる.

taji alc のプログラムでは, 出力の際にはこれを[5280*x^4-3264*x^3+13594*x^2-4053*x+8085,27720]
なるリストで表現する. これを 整数係数化リスト と呼ぶことにする. プログラム間で有理数係数多項式を受け渡しする際には, この整数係数化リストを用いる.

5

2.2

代数的局所コホモロジー類

f (x) を Q[x] 上で既約, ` ∈ N とする. このとき, Z = {x|f (x) = 0} に台をもつ代数的局所コホモロジー群 (algebraic local cohomology groups) は, ホモロジー代数の言葉では,
H1[Z] (Q[x]) = lim Ext1Q[x] (Q[x]/hf (x)` i, Q[x])`→∞と定義される.
h(x)しかし, ここでは別の定義を採用する. h(x) ∈ Q[x] とし, f (x)` なる形の有理関数の間に次のような同値関係

h1 (x)
h2 (x)
h1 (x)
h2 (x)≡⇐⇒−∈ Q[x]
`
`
`
1
2
1
f (x)
f (x)
f (x)
f (x)`2h(x)h(x)

を入れる. この同値関係による f ` (x) の同値類を, [ f ` (x) ] で表す. 別の表現をするなら,

[

h(x)
h(x)
]=
+ Q[x]
f (x)`
f (x)`
h(x)と書いてもよい. この同値類は H1[Z] (Q[x]) の元とみなせるので, これを有理関数 f (x)` が定める代数的局所コホモロジー類と呼ぶ. これは, 有理関数の特異性に注目した同値類 (極でローラン展開
した時に主要部が一致するような有理関数の集合) である.
例 2.1

(1) 次の 2 つの有理関数
2x4 − 3x3 + x + 7 x5 + 3x4 − 2x3 − x2 + 6,(x2 + x + 1)2(x2 + x + 1)2
は, その差が −x + 1 となり, 多項式であるから, 代数的局所コホモロジー類として等しい. 即ち,[

2x4 − 3x3 + x + 7
x5 + 3x4 − 2x3 − x2 + 6]≡[](x2 + x + 1)2(x2 + x + 1)2である. この代数的局所コホモロジー類の代表元としては, 例えば, proper な有理関数−7x3 − 6x2 − 3x + 5(x2 + x + 1)2を選べる.

(2) 次の 2 つの有理関数
1(x3 − x − 1)2,

x+1(x3 − x − 1)2−xは, その差が (x3 −x−1)
2 となり, 多項式ではないので, 代数的局所コホモロジー類として等しくない.

特異点の位置と重複度が同じでも, 特異性は異なっている.

6

2.3

ネーター作用素f (x) を Q[x] 上で既約, h(x) ∈ Q[x], ` ∈ N とする. このとき, 代数的局所コホモロジー類 [ fh(x)
]
(x)`
は,
d
d
d
T = (− )`−1 t0 (x) + (− )`−2 t1 (x) + · · · + (− )t`−2 (x) + t`−1 (x)dxdxdx
なる ` − 1 階の微分作用素を用いて,[

h(x)f 0 (x)]]=T[f (x)`
f (x)と表せる. この T を代数的局所コホモロジー類のネーター作用素と呼ぶ.
d `−1−i(− dx)
ti (x) のように, 微分作用素にマイナスをつけ, 多項式を微分作用素の左側でなく右側につけて表現しているが, これは意図的にそうしている. この形の方が, ローラン展開との関係やネーター作用素の形式的随伴作用素を考える際に便利であるだけでなく, 計算効率の面でもよいのである.
なお, t0 (x), . . . , t`−1 (x) は, 多項式ではなく, 多項式倍するという作用素 (零階の微分作用素) でdある. 従って例えば, (− dx)t`−2 (x) を −t0`−2 (x) とはできないので注意.

例 2.2
−2x−2
] のネーター作用素表示は,代数的局所コホモロジー類 [ 2x −2x(x2 +1)23[

2

2x3 − 2x2 − 2x − 2d2x] = {(− )x + (x + 1)}[ 2](x2 + 1)2
dx
x +1

となる.
ちなみに, 有理関数 x22x
+1 にこの微分作用素を施すと,

{(−

d
2x
)x + (x + 1)}( 2
)
dx
x +1

=
=

2x4 + 2x3 + 2x2 − 2x(x2 + 1)23
2x − 2x2 − 2x − 2+2(x2 + 1)2となるので, 有理関数としては

2x3 − 2x2 − 2x − 2d2x6= {(− )x + (x + 1)}( 2)(x2 + 1)2
dx
x +1
である.

7

2.3.1

ネーター作用素と D 加群

D 加群の理論を使えば, ネーター作用素の数学的構造が見えてくる. 結論のみを述べると, ネーター作用素 T の各右係数 t0 (x), . . . , t`−1 (x) は,• 漸化式で逐次的に計算できる.
• 共通因子があったり, 逆冪の並びがあるなど, 規則的な構造をもつ.
• 剰余体 Q[x]/hf (x)i 上で四則演算が行える.
といった性質がある.
中でも 3 番目の性質を利用することで, 計算を著しく高速化させることができる. 剰余体 Q[x]/hf (x)i
上で四則演算が行えるということは, t0 (x), . . . , t`−1 (x) を求める計算過程で次数が deg f 以上になった場合, f (x) で割り算を行い剰余を求めることで, 常に次数を deg f − 1 次以下に保つことができるということである. 計算機上での多項式の四則演算は, 多項式の次数が低い程速くなる.

2.3.2

ネーター作用素とローラン展開

これまで説明したネーター作用素表示[

f 0 (x)
h(x)
]
=
T
[
]
f (x)`f (x)とローラン展開との関係を具体的に式を追って説明する.

f (x) をモニックな 3 次多項式とし, その零点集合を Z = {α, β, γ} とする. (ここでは 3 次の場合で説明するが, 一般の m 次の場合でも議論は同様である.) まず, f (x) を C 上で因数分解すると[

f 0 (x)] =f (x)(x − β)(x − γ) + (x − γ)(x − α) + (x − α)(x − β)](x − α)(x − β)(x − γ)
1
1
1
= [
]+[
]+[
]
x−α
x−β
x−γ
[

となる.
両辺を t(x) 倍すると,t(x)[f 0 (x)
t(x)
t(x)
t(x)
]=[
]+[
]+[
]
f (x)
x−α
x−β
x−γ

となる.

t(x) の α, β, γ におけるテイラー展開
1 00
t (α)(x − α)2 + · · ·2!
1= t(β) + t0 (β)(x − β) + t00 (β)(x − β)2 + · · ·2!
1= t(γ) + t0 (γ)(x − γ) + t00 (γ)(x − γ)2 + · · ·2!

t(x) = t(α) + t0 (α)(x − α) +を代入すると,t(x)[f 0 (x)
t(α)
t(β)
t(γ)
]=[
]+[
]+[
]
f (x)
x−α
x−β
x−γ

となる.

8

d k
両辺に微分作用素 (− dx) を施すと,(−f 0 (x)d k) t(x)[
]
dx
f (x)

=
=

k! t(α)k! t(β)k! t(γ)]+[]+[](x − α)k+1(x − β)k+1(x − γ)k+1
X k! t(z)[](x − z)k+1[z∈Zとなるから, ネーター作用素をT = (−d `−1
dd) t0 (x) + (− )`−2 t1 (x) + · · · + (− )t`−2 (x) + t`−1 (x)
dx
dx
dx

とおくと,

X X i! t`−1−i (z)f 0 (x)
]=
[
]
f (x)
(x − z)i+1
i=0
`−1

T[

z∈Z

が導かれる.
有理関数の ` 位の極 z ∈ Z におけるローラン展開の主要部の係数を,a−(`−1)a−(i+1)
a−`
a−2
a−1
+
+ ··· +
+ ··· ++(x − z)`(x − z)`−1(x − z)i+1(x − z)2(x − z)
とおくと, ネーター作用素の係数とローラン展開の係数を見比べれば, i = 0, . . . , ` − 1 に対して,

a−(i+1) = i! t`−1−i (z)なる対応関係が得られる. この関係より, ネーター作用素は, 極におけるローラン展開の主要部を表現する微分作用素とみなせることがわかる.

9

2.3.3

ネーター作用素と留数

既に述べたように, 極におけるローラン展開の主要部を求める問題は, 代数的局所コホモロジー
類のネーター作用素を求める問題に帰着される.
留数はローラン展開の一部であるから, これまで述べてきたようなネーター作用素 T[h(x)f 0 (x)]=T[]f (x)`
f (x)を利用することで留数値も求めることができる.
しかし, 留数のみを求めたい場合には, より効率的な計算法がある. それは, 分母はそのままで分1
1
子を 1 にした有理関数 f (x)` が定める代数的局所コホモロジー類 [ f (x)` ] のネーター作用素 U[1
f 0 (x)]]=U[f (x)`f (x)をまず計算し, 求めた U の形式的随伴作用素を分子 h(x) に施して留数を求める方法である. 式で書くと, 極 α ∈ {x|f (x) = 0} における留数は,h(x)Resα (dx)
f (x)`

=
=
=
=
=
=
=

1
√

I

h(x)
dx
f (x)`
2π −1
I
1
h(x)
√
]dx
[
f (x)`
2π −1
I
1
1
√
h(x)[
]dx
f (x)`
2π −1
I1
f 0 (x)√h(x)U [
]dx
f (x)
2π −1
I
f 0 (x)1√(U ∗ h)(x)[
]dx
f (x)
2π −1
I
1
f 0 (x)√(U ∗ h)(x)
dx
f (x)
2π −1
(U ∗ h)(α)となる.
留数計算において, T を計算する方法と, U を計算しその随伴作用素を分子に施す方法では, 後者の方が速い. その差は分子の多項式 h(x) が大きいほど広がる.

10

2.4

剰余公式

任意の多項式 p(x) を f (x) で割った商を q(x), 余りを r(x) とすると,

p(x) = q(x)f (x) + r(x), deg r < deg fと表せる. Z を f (x) の零点集合とするとき, 剰余 r(x) は, Z と, Z における p(x) の値と, Z における p(x) の導関数の値を用いて表せる. これを, 剰余公式と呼ぶことにする.
例 2.3 f (x) = (x − α)(x − β) を与えたときの剰余公式を求めよ.

r(x) は 1 次以下の多項式であるから, r(x) = Ax + B とおける. 連立方程式 p(α) = r(α) = Aα + B,
p(β) = r(β) = Aβ + B を解くと, 剰余公式は,
r(x) =

p(α) − p(β)αp(β) − βp(α)
x+
α−β
α−β

で与えられる.

例 2.4 f (x) = (x − α)2 を与えたときの剰余公式を求めよ.

p0 (x) = q 0 (x)(x − α)2 + 2q(x)(x − α) + r0 (x) を用いて, 上の例と同じように連立方程式を解くと,剰余公式は,
r(x) = p0 (α)x + p(α) − αp0 (α)
で与えられる.
このように, 多項式 f (x) を与えたときの剰余公式を求めるプログラムが rem formula である. た
だし rem formula で採用しているアルゴリズムは, 上記の例のように, 連立方程式を解く方法ではなく, エルミートの補間積分

r(x) =

Zf (y) − f (x) 1p(y)dyy−xf (y)2π −1 C1√を使う方法である. ここで, C は全ての極 {y|f (y) = 0} の周りを一周する閉曲線とする.

11

指数多項式リスト

2.5

次のような (多項式) × (指数関数) の形をしている関数の線形結合

X

c1 (α1 , z)eα1 z + · · · +α1 ∈Z1X

cn (αn , z)eαn z

αn ∈Znを指数多項式 (exponential polynomials) と呼ぶ. ここで, z を独立変数, f1 (x), . . . , fn (x) を Q 上で
既約な多項式, Z1 = {x|f1 (x) = 0}, . . . , Zn = {x|fn (x) = 0} とする. 指数多項式は, 有理数係数の線形常微分方程式などに登場する.
プログラム上では, この指数多項式を[[f_1(x),c_1(x,z)],...,[f_n(x),c_n(x,z)]]なるリストで表現する. これを 指数多項式リスト と呼ぶことにする.
リストの f_1(x),...,f_n(x) は Q 上で既約な多項式 f1 (x), . . . , fn (x) である.
リストの c_1(x,z),...,c_n(x,z) は eα1 z , . . . , eαn z の係数となる多項式 c1 (α1 , z), . . . , cn (αn , z)であるが, αi の多項式は留数表示すると x の多項式となるので, 便宜上 αi を fi (x) と同じ変数である x に変えて入力する.
例えば,
指数多項式

指数多項式リスト

1[[x,1]]

z[[x,z]]ze[[x-1,1]]3z

2z2e + (3z + 1)eP
eα1 z , Z = {x|x3 − x − 1 = 0}Pα1 ∈Z 2
α1 z, Z = {x|x4 + 1 = 0}α1 ∈Z ((z + 1)α1 + 2z + 1)eといったようになる.

12[[x-3,2],[x-1,3*z^2+1]][[x^3-x-1,1]][[x^4+1,(z^2+1)*x+2*z+1]]

2.6

フーリエ・ボレル変換

n(x), d(x) ∈ Q[x] とする. 代数的局所コホモロジー類 [ n(x)d(x) ] のフーリエ・ボレル変換 (Fourier-Borel
transformation; FBT と略記) を,
F B([

n(x)
n(x) zx])(z) = Res([]e dx)d(x)d(x)Zn(x) zx
1√[=]e dx.
2π −1 C d(x)で定める. ここで, C は全ての極 {x|d(x) = 0} の周りを一周する閉曲線とする.
zxの留数) は, 指数
FBT による代数的局所コホモロジー類の像 (言い換えれば, 有理形関数 n(x)d(x) en(x)多項式となる. 有理形関数 d(x) ezx の留数計算は, 有理関数の場合とほとんど同じであり, residue
を少し細工したプログラムで計算される.

FBT は, 代数的局所コホモロジー類を指数多項式に変換するが, その逆変換, 即ち, 指数多項式から代数的局所コホモロジー類を求める変換を, 逆フーリエ・ボレル変換 (inverse FBT; invFBT と略記) と呼ぶことにする.

FBT は, 有理数係数の線形常微分方程式のコーシー問題の解を求める際に役に立ち, invFBT は,
有理数係数の線形常微分方程式のコーシー問題の特殊解を求める際に役に立つ. どちらも変換テーブルを必要とせず, 統一的なアルゴリズムで計算される.

13

3

プログラムの使用例

3.1

cpfd

cpfd は, 有理関数
n(x)
h(x)
=
d(x)
f1 (x)`1 · · · fm (x)`mの部分分数分解を求めるプログラムである.
ここで, n(x), d(x) ∈ Q[x]. h(x) ∈ Q[x], f1 (x), . . . , fm (x) は Q 上で既約な多項式, `1 , . . . , `m ∈ Nとする.
入力は, 左辺の形と右辺の形の両方に対応している. 右辺の形で入力する場合は, 分母はリストにする.
入力

taji_alc.cpfd(n(x), d(x));
taji_alc.cpfd(h(x), [[f1 (x), `1 ], . . . , [fm (x), `m ]]);

部分分数分解には, 分母を冪展開する complete な部分分数分解 (Complete Partial Fraction

Decomposition){h1,`1 (x)h1,1 (x)hm,`m (x)hm,1 (x)+ ··· +
} + ··· + {+ ··· +}
f1 (x)`1f1 (x)
fm (x)`mfm (x)と, 分母を冪展開しない部分分数分解

h1 (x)
hm (x)+ ··· +
f1 (x)`1
fm (x)`mの 2 つがある. default では, complete な部分分数分解を返す. 分母を冪展開しない部分分数分解がほしい場合は, オプションで switch=10 とする.
出力 (default)[[[h1,`1 (x), [f1 (x), `1 ]], . . . , [h1,1 (x), [f1 (x), 1]]], . . . , [[hm,`m (x), [fm (x), `m ]], . . . , [hm,1 (x), [fm (x), 1]]]]

出力 (switch=10)[[h1 (x), [f1 (x), `1 ]], . . . , [hm (x), [fm (x), `m ]]]

14

−x−1
例 3.1 有理関数 x4 +2xx3 +2x
2 +2x+1 の部分分数分解を求めよ.
3[312] taji_alc.cpfd(x^3-x-1,x^4+2*x^3+2*x^2+2*x+1);[[[1/2*x-1,[x^2+1,1]]],[[-1/2,[x+1,2]],[1/2,[x+1,1]]]][313] taji_alc.cpfd(x^3-x-1,x^4+2*x^3+2*x^2+2*x+1|switch=10);[[1/2*x-1,[x^2+1,1]],[1/2*x,[x+1,2]]]x3 − x − 1
x4 + 2x3 + 2x2 + 2x + 1=

x3 − x − 1(x2 + 1)(x + 1)2

=

1
1
− 12
2x − 1
+
+ 2
2
2
x +1
(x + 1)
x+1

(1)

=

1
1
2x − 12x+x2 + 1(x + 1)2(2)

cpfd では, 先に (1) の部分分数分解が求まる. (2) のように分母を冪展開しない部分分数分解は,(1) の部分分数分解の結果をホーナー法で足し上げて求める. (1) の部分分数分解の方が, (2) よりも多くの情報をもっている.

15

3.2

snoethersnoether は, 代数的局所コホモロジー類
[

n(x)
h(x)
]=[
]
d(x)
f1 (x)`1 · · · fm (x)`mのネーター作用素を求めるプログラムである.
ここで, n(x), d(x) ∈ Q[x]. h(x) ∈ Q[x], f1 (x), . . . , fm (x) は Q 上で既約な多項式, `1 , . . . , `m ∈ Nとする.
入力は, 左辺の形と右辺の形の両方に対応している. 右辺の形で入力する場合は, 分母はリストにする.
入力

taji_alc.snoether(n(x), d(x));
taji_alc.snoether(h(x), [[f1 (x), `1 ], . . . , [fm (x), `m ]]);

出力では, 上記の代数的局所コホモロジー類のネーター作用素表示

f 0 (x)f 0 (x)T1 [ 1] + · · · + Tm [ m]
f1 (x)
fm (x)
における各既約因子に対するネーター作用素

T1

= (−

d
d
d `1 −1)t1,0 (x) + (− )`1 −2 t1,1 (x) + · · · + (− )t1,`1 −2 (x) + t1,`1 −1 (x)
dx
dx
dx

..
.
Tm

= (−

d `m −1dd)tm,0 (x) + (− )`m −2 tm,1 (x) + · · · + (− )tm,`m −2 (x) + tm,`m −1 (x)
dx
dx
dx

をリストで返す.
出力 (default)[[f1 (x), [t1,0 (x), . . . , t1,`1 −1 (x)]], . . . , [fm (x), [tm,0 (x), . . . , tm,`m −1 (x)]]]16

例 3.2 次の代数的局所コホモロジー類のネーター作用素 T[

1
3x2 − 1]=T[](x3 − x − 1)3x3 − x − 1を求めよ.
ネーター作用素の戻り値をどう表現するかは考える必要がある. snoether では, 4 通りの表現方
法を用意し, Asir のオプション指定という機能を使って選択式とした. どの表現がいいかは一長一短がある.

[330] taji_alc.snoether(1,[[x^3-x-1,3]]);[[x^3-x-1,[9/529*x^2-27/1058*x+11/1058,-81/529*x^2-9/529*x+135/529,-4905/12167*x^2+4563/12167*x+3270/12167]]][331] taji_alc.snoether(1,[[x^3-x-1,3]]|switch=1);[[x^3-x-1,[[18*x^2-27*x+11,1058],[-81*x^2-9*x+135,529],[-4905*x^2+4563*x+3270,12
167]]]][332] taji_alc.snoether(1,[[x^3-x-1,3]]|switch=10);[[x^3-x-1,[[414*x^2-621*x+253,-3726*x^2-414*x+6210,-9810*x^2+9126*x+6540],24334]]][333] taji_alc.snoether(1,[[x^3-x-1,3]]|switch=20);[[x^3-x-1,[[[18*x^2-27*x+11,529],[-162*x^2-18*x+270,529],[-9810*x^2+9126*x+6540,
12167]],2]]]
ネーター作用素は,T

d 2 9 2
27
11
d
81 2
9
135
) (
x −
x+
) + (− )(−x −x+)dx 529
1058
1058
dx
529
529
529
4905 2
4563
3270
+(−
x +
x+
)}
12167
12167
12167

= {(−

d 2 1
d 1
)
(18x2 − 27x + 11) + (− )(−81x2 − 9x + 135)
dx 1058
dx 5291+(−4905x2 + 4563x + 3270)}
12167

= {(−

=

=

d
d
1
{(− )2 (414x2 − 621x + 253) + (− )(−3726x2 − 414x + 6210)
24334
dx
dx
+(−9810x2 + 9126x + 6540)}
1
d
1
d 1
{(− )2(18x2 − 27x + 11) + (− )(−162x2 − 18x + 270)2dx 529dx 5291+(−9810x2 + 9126x + 6540)}
12167

で与えられる.
1
1
switch=20 の表現で先頭の 12 は 2!の意味であり, 重複度が ` ならこの部分は (`−1)!
となる. 階乗部分をあえて約分しないで残しておくと, 数学的な構造が綺麗に見えてよいこともある.

17

3.3

laurent expansion

laurent expansin は, 有理関数
n(x)
h(x)
=
d(x)
f1 (x)`1 · · · fm (x)`mの極におけるローラン展開の主要部の係数を求めるプログラムである.
ここで, n(x), d(x) ∈ Q[x]. h(x) ∈ Q[x], f1 (x), . . . , fm (x) は Q 上で既約な多項式, `1 , . . . , `m ∈ Nとする.
入力は, 左辺の形と右辺の形の両方に対応している. 右辺の形で入力する場合は, 分母はリストにする.
入力

taji_alc.laurent_expansion(n(x), d(x));
taji_alc.laurent_expansion(h(x), [[f1 (x), `1 ], . . . , [fm (x), `m ]]);

出力では, 各極 α1 ∈ {x|f1 (x) = 0}, . . . , αm ∈ {x|fm (x) = 0} におけるローラン展開の主要部

a1,`1 (α1 )a1,1 (α1 )am,`m (αm )am,1 (αm )+ ··· +,...,
+ ··· +(x − α1 )`1(x − α1 )(x − αm )`m(x − αm )の係数を与える多項式の組をリストで返す.
ただし, 各 ai,j (αi ) は, 便宜上, 入力の変数と同じ x の多項式 ai,j (x) として返す.
出力 (default)[[f1 (x), [a1,`1 (x), . . . , a1,1 (x)]], . . . , [fm (x), [am,`m (x), . . . , am,1 (x)]]]18

x
例 3.3 有理関数 (x−1)
3 の極におけるローラン展開の主要部を求めよ.

[289] taji_alc.laurent_expansion(x,(x-1)^3);[[x-1,[1,1,0]]]極 α = 1 における主要部は,

1
1+(x − 1)3(x − 1)2である.
1
例 3.4 有理関数 (x3 −x−1)
3 の極におけるローラン展開の主要部を求めよ.

[290] taji_alc.laurent_expansion(1,[[x^3-x-1,3]]|switch=1);[[x^3-x-1,[[18*x^2-27*x+11,529],[-81*x^2-9*x+135,529],[-4905*x^2+4563*x+3270,121
67]]]]
極 α ∈ {x|x3 − x − 1 = 0} における主要部は,
1
1
1
2
2
2
529 (18α − 27α + 11)
529 (−81α − 9α + 135)
12167 (−4905α + 4563α + 3270)++(x − α)3(x − α)2(x − α)である.
−x−1
例 3.5 有理関数 (x−1)x3 (x2 −x+3)2 の極におけるローラン展開の主要部を求めよ.
3[291] taji_alc.laurent_expansion(x^3-x-1,(x-1)^3*(x^2-x+3)^2|switch=1);[[x^2-x+3,[[23*x-6,297],[8*x-15,99]]],[x-1,[[-1,9],[8,27],[2,9]]]]極 α = 1 における主要部は,
8
2
− 19
27
9
+
+
(x − 1)3(x − 1)2(x − 1)

であり, 極 β ∈ {x|x2 − x + 3 = 0} における主要部は,
1
1297 (23β − 6)
99 (8β − 15)+(x − β)2(x − β)である.
ちなみに, 留数はローラン展開の一部であるから, laurent expansion でも留数が求まる. 例 3.3
1(−4905α2 + 4563α + 3270) である. しなら極における留数は 0, 例 3.4 なら極における留数は 12167

かし, 留数のみが欲しい場合には, residue を使う方がよい. residue の方が laurent expansion よりもずっと速いからである.

19

3.4

residue

residue は, 有理関数
n(x)
h(x)
=
`
1
d(x)
f1 (x) · · · fm (x)`mの極における留数を求めるプログラムである.
ここで, n(x), d(x) ∈ Q[x]. h(x) ∈ Q[x], f1 (x), . . . , fm (x) は Q 上で既約な多項式, `1 , . . . , `m ∈ Nとする.
入力は, 左辺の形と右辺の形の両方に対応している. 右辺の形で入力する場合は, 分母はリストにする.
入力

taji_alc.residue(n(x), d(x));
taji_alc.residue(h(x), [[f1 (x), `1 ], . . . , [fm (x), `m ]]);

出力では, 各極 α1 ∈ {x|f1 (x) = 0}, . . . , αm ∈ {x|fm (x) = 0} における留数

Resα1 (n(x)n(x)) = r1 (α1 ), . . . , Resαm () = rm (αm )
d(x)
d(x)

を表す多項式の組をリストで返す.
ただし, r1 (α1 ), . . . , rm (αm ) は, 便宜上, 入力の変数と同じ x の多項式 r1 (x), . . . , rm (x) として返す.
出力 (default)[[f1 (x), r1 (x)], . . . , [fm (x), rm (x)]]20例 3.6 有理関数 R(x) = x41+1 の留数を求めよ.

[306] taji_alc.residue(1,x^4+1);[[x^4+1,-1/4*x]]
この戻り値は, α ∈ {x|x4 + 1 = 0} とおいたとき,

1Resα (R(x)) = − α4を表している.

residue で採用しているアルゴリズムでは, C 上の 1 点に注目するのではなく, Q 上での既約因子自体に注目して留数を求める. 戻り値の留数は, その因子の全ての零点が共通に満たす留数多項式である. 従って, 1 点ごとの留数値をさらに求めたい場合には, 求めた留数多項式に因子の零点 (即ち特異点) の値を代入する必要がある.
この例で言うと, 求めた留数多項式 − 14 α に, x4 + 1 の 4 つある零点

1
1
11{ √ (1 + i), √ (−1 + i), √ (−1 − i), √ (1 − i)}2222をそれぞれ代入したものが個別の留数値である. 例えば, α1 = √12 (1 + i) での留数は,1
1
Resα1 (R(x)) = − α1 = − √ (1 + i)
4
4 2
である.

3

x +1
例 3.7 有理関数 R(x) = x18 −2x14 +x
10 −x8 +2x4 −1 の留数を求めよ.

簡約化すると, R = (x4 +x3 +x2 +x+1)(x4 −x3x+x−x+1
2 −x+1)(x2 +1)2 (x+1)2 (x−1)3 となる.
2[307] taji_alc.residue(x^3+1,x^18-2*x^14+x^10-x^8+2*x^4-1|switch=1);[[x^4+x^3+x^2+x+1,[-2*x^2-x-2,50]],[x^4-x^3+x^2-x+1,[-2*x^3+4*x^2-x-2,50]],[x^2+
1,[8*x+5,32]],[x+1,[-39,320]],[x-1,[67,320]]]
switch を 1 に指定して留数を整数係数化リストで返している. α ∈ {x|x4 + x3 + x2 + x + 1 = 0},
β ∈ {x|x4 − x3 + x2 − x + 1 = 0}, γ ∈ {x|x2 + 1 = 0} とおくと, 答えは,Resα (R) =11(−2α2 − α − 2), Resβ (R) =(−2β 3 + 4β 2 − β − 2),5050Resγ (R) =1
3967(8γ + 5), Res−1 (R) = −, Res1 (R) =
32
320
320

である.

residue は, snoether と密接な関係があり, アルゴリズムの 8 割ぐらいが同じである. 主な違いは,
留数のみを求めたい場合には, ネーター作用素の随伴作用素を分子に施すだけでよいというところにある. なお, residue では部分分数分解 cpfd を経由せず直接ネーター作用素を求めている.

21

3.5

invpow

invpow は, 剰余体 Q[x]/hf (x)i における g(x) の逆冪 (逆元の m 乗)a(x) = g(x)−m(mod f (x))

を求めるプログラムである.
ここで, g(x) ∈ Q[x], f (x) は Q 上で既約な多項式, m ∈ N, g(x) と f (x) は互いに素とする.
入力

taji_alc.invpow(g(x), f (x), m);

出力

a(x)

例 3.8 剰余体 Q[x]/hx3 − x − 1i における 3x2 − 1 の逆元の 30 乗を求めよ.

[329] taji_alc.invpow(3*x^2-1,x^3-x-1,30|switch=1);[1857324483*x^2-2100154824*x-477264412,266635235464391245607]
剰余体 Q[x]/hx3 − x − 1i 上で, 3x2 − 1 の逆元の 30 乗は,

1(1857324483x2 − 2100154824x − 477264412)
266635235464391245607
である.
1
ここで注目すべきこととして, 3x2 − 1 の逆元である 23(−6x2 + 9x + 4) の 30 乗は, 単純に考えれば, 分母の整数は 2330 になると予想される. しかし実際は, 266635235464391245607 = 2315 で済んでいる. これは, 多項式部分に共通因数 2315 が現れて, キャンセレーションが起きているから
である.

22

3.6

rem formula

rem formula は, 多項式f (x) = f1 (x)`1 · · · fm (x)`mを与えたときの剰余公式を求めるプログラムである.
ここで, f1 (x), . . . , fm (x) は Q 上で既約な多項式, `1 , . . . , `m ∈ N とする.
入力は, 各既約因子の零点を α1 ∈ Z1 = {x|f1 (x) = 0}, . . . , αm ∈ Zm = {x|fm (x) = 0} とおい
たとき, 既約分解したリストの各成分に, 零点の symbol を追加した形で行う.
入力

taji_alc.rem_formula([[f1 (x), `1 , α1 ], . . . , [fm (x), `m , αm ]]);

出力では, 剰余公式

r(x) =

X{r1,`1 −1 (x, α1 )p(`1 −1) (α1 ) + · · · + r1,0 (x, α1 )p(α1 )}α1 ∈Z1+··· +

X{rm,`m −1 (x, αm )p(`m −1) (αm ) + · · · + rm,0 (x, αm )p(αm )}αm ∈Zmを返す. ここで, r(x) は p(x) を f (x) で割ったときの余りを意味する.
出力 (default)[[r1,`1 −1 (x, α1 ), . . . , r1,0 (x, α1 )], . . . , [rm,`m −1 (x, αm ), . . . , rm,0 (x, αm )]]23

例 3.9 f (x) = (x − 1)(x − 2) を与えたときの剰余公式を求めよ.

[583] taji_alc.rem_formula([[x-1,1,z1],[x-2,1,z2]]);[[-x+2],[x-1]][584] taji_alc.rem_formula([[x-1,1,z1],[x-2,1,z2]]|switch=20);(-p^(0)(z1)+p^(0)(z2))*x+2*p^(0)(z1)-p^(0)(z2)剰余公式は,r(x)=(−x + 2)p(z1 ) + (x − 1)p(z2 )= (−p(z1 ) + p(z2 ))x + 2p(z1 ) − p(z2 )で与えられる.
例 3.10 f (x) = (x − 1)2 を与えたときの剰余公式を求めよ.

[587] taji_alc.rem_formula([[x-1,2,z1]]);[[x-1,1]][588] taji_alc.rem_formula([[x-1,2,z1]]|switch=20);p^(1)(z1)*x-p^(1)(z1)+p^(0)(z1)剰余公式は,

r(x) ==(x − 1)p0 (z1 ) + p(z1 )p0 (z1 )x − p0 (z1 ) + p(z1 )で与えられる.
重複度をもつ場合は, p(x) の導関数が現れる.
例 3.11 f (x) = x3 − x − 1 を与えたときの剰余公式を求めよ.

[284] taji_alc.rem_formula([[x^3-x-1,1,z1]]);[[(-6/23*z1^2+9/23*z1+4/23)*x^2+(9/23*z1^2-2/23*z1-6/23)*x+4/23*z1^2-6/23*z1+5/2
3]]
剰余公式は,

r(x)

=

X
z1 ∈Z

((−

9
4
9
2
6
4
6
5
6 2
z + z1 + )x2 + ( z12 − z1 − )x + z12 − z1 + )p(z1 )23 1 23
23
23
23
23
23
23
23

で与えられる.

f (x) が 2 次以上の場合は, 零点 (代数的数) が現れる. この場合, 全ての零点に関する和をとらな
いといけない.

24

3.7

solve ode cp

solve ode cp は, 線形常微分方程式 (liner Ordinary Diﬀerential Equations; ODE と略記) のコーシー問題 (Cauchy Probrem; CP と略記)(
P u(z) = f (z)u(0) = c0 , u0 (0) = c1 , . . . , u(n−1) (0) = cn−1の解を求めるプログラムである.
n

n−1

d
d
d
ここで, P を有理数係数の n 階の線形常微分作用素 P = an dz
n + an−1 dz n−1 + · · · + a1 dz + a0 ,f (z) を指数多項式とする.
P の特性多項式を Q 上で既約分解しp(x) = p1 (x)`1 · · · pm (x)`mとおく. 入力は, 左辺の形と右辺の形の両方に対応している.
引数は, 第 1 引数は特性多項式, 第 2 引数は関数の独立変数, 第 3 引数は f (z) の指数多項式リスト

f (z) : [[f1 (x), c1 (x, z)], . . . , [fm (x), cm (x, z)]]を入力する. 斉次形の場合は, 第 3 引数に 0 を入力してもよい.
入力

taji_alc.solve_ode_cp(p(x), z, f (z));
taji_alc.solve_ode_cp([[p1 (x), `1 ], . . . , [pm (x), `m ]], z, f (z));

コーシー問題の一般解は, コーシー問題の基本解 u0 (z), . . . , un−1 (z) とコーシーデータ c0 , . . . , cn−1の線形結合にコーシー問題の特殊解 v(z) を加えた

u(z) = c0 u0 (z) + · · · + cn−1 un−1 (z) + v(z)なる形をしている.
出力では, コーシー問題の基本解 u0 (z), . . . , un−1 (z) は指数多項式となるので, 指数多項式リスト

u0 (z) : [[p1 (x), c1,0 (x, z)], . . . , [pm (x), cm,0 (x, z)]]..
.
un−1 (z) : [[p1 (x), c1,n−1 (x, z)], . . . , [pm (x), cm,n−1 (x, z)]]で返す. また, コーシー問題の特殊解 v(z) も指数多項式となるので, 指数多項式リストで返す. 特
殊解については, 3.8 節で詳しく述べている.
出力 (default)[u0 (z), . . . , un−1 (z), v(z)]25例 3.12 次のコーシー問題を解け.

((D2 − 4)u(z) = 0
u(0) = 1, u0 (0) = −1[449] taji_alc.solve_ode_cp(x^2-4,z,0);[[[x+2,1/2],[x-2,1/2]],[[x+2,-1/4],[x-2,1/4]]]
戻り値は指数多項式リストであるが, これは一般解が,

1111u(z) = c0 ( e−2z + e2z ) + c1 (− e−2z + e2z )2244で与えられることを表している.
この例の場合, コーシーデータも具体的に c0 = 1, c1 = −1 と与えられているので, Asir のオプ
ションリスト機能を使ってデータを与えると,[450] taji_alc.solve_ode_cp(x^2-4,z,0|data=[1,-1]);[[x+2,3/4],[x-2,1/4]]
u(z) =

3 −2z 1 2z
e
+ e
4
4

のように指数関数で整理した形で返される.
また, オプションリストのデータを未知数にすることもできて, その場合も指数関数で整理した形で返される.

[451] taji_alc.solve_ode_cp(x^2-4,z,0|data=[c0,c1]);[[x+2,1/2*c0-1/4*c1],[x-2,1/2*c0+1/4*c1]]1111u(z) = ( c0 − c1 )e−2z + ( c0 + c1 )e2z2424

例 3.13 次のコーシー問題を解け.
((D3 − 2D + 1)u(z) = 0

u(0) = 3, u0 (0) = 0, u00 (0) = 9[479] taji_alc.solve_ode_cp(x^3-2*x+1,z,0|data=[3,0,9],switch=1);[[x^2+x-1,[-3*x-3,1]],[x-1,[6,1]]]
コーシー問題の解は,

u(z) =X(−3α − 3)eαz + 6ez

α∈{x|x2 +x−1}

で与えられる.

26

3.8

solve ode cp ps

solve ode cp ps は, 線形常微分方程式 (liner Ordinary Diﬀerential Equations; ODE と略記) のコーシー問題 (Cauchy Probrem; CP と略記)(
P u(z) = f (z)u(0) = c0 , u0 (0) = c1 , . . . , u(n−1) (0) = cn−1の特殊解 (Particular Solution; PS と略記) を求めるプログラムである. solve ode cp の中で部品として呼び出されるが, 単独で使うこともできる.
n

n−1

d
d
d
ここで, P を有理数係数の n 階の線形常微分作用素 P = an dz
n + an−1 dz n−1 + · · · + a1 dz + a0 ,f (z) を指数多項式とする.
P の特性多項式を Q 上で既約分解しp(x) = p1 (x)`1 · · · pm (x)`mとおく. 入力は, 左辺の形と右辺の形の両方に対応している.
引数は, 第 1 引数は特性多項式, 第 2 引数は関数の独立変数, 第 3 引数は f (z) の指数多項式リスト

f (z) : [[f1 (x), c1 (x, z)], . . . , [fm (x), cm (x, z)]]を入力する.
入力

taji_alc.solve_ode_cp_ps(p(x), z, f (z));
taji_alc.solve_ode_cp_ps([[p1 (x), `1 ], . . . , [pm (x), `m ]], z, f (z));

出力では, コーシー問題の特殊解を指数多項式リストとして返す. ただし, p1 (x), . . . , pm (x) とf1 (x), . . . , fm (x) に同じ因子がある場合は一つにされる.
出力 (default)[[p1 (x), cp1 (x, z)], . . . , [pm (x), cpm (x, z)], [f1 (x), cv1 (x, z)], . . . , [fm (x), cvm (x, z)]]27

例 3.14 次のコーシー問題の特殊解を求めよ.
((D − 2)(D + 3)u(z) = ez

u(0) = c0 , u0 (0) = c1[445] taji_alc.solve_ode_cp_ps((x-2)*(x+3),z,[[x-1,1]]);[[x-1,-1/4],[x+3,1/20],[x-2,1/5]]
コーシー問題の特殊解は,v(z) =

1 −3z 1 z 1 2ze
− e + e20
45で与えられる.
この特殊解は, 微分方程式の解であると同時に, コーシー条件 v(0) = 0, v 0 (0) = 0 も満たしている. ”コーシー問題の”と修飾している理由は, そのためである.
「コーシー条件は満たしてなくてもいいから, 簡単な形の特殊解が欲しい」という要求もあるかもしれない. その場合は, オプションで switch2=1 と指定する.

[446] taji_alc.solve_ode_cp_ps((x-2)*(x+3),z,[[x-1,1]]|switch2=1);[[x-1,-1/4]]
簡単な形の特殊解は,

1v(z) = − ez4で与えられる.
この特殊解は, 微分方程式の解であるが, コーシー条件は満たしていない.

例 3.15 次のコーシー問題の特殊解を求めよ.
((D − 2)(D + 3)u(z) = e2z

u(0) = c0 , u0 (0) = c1[467] taji_alc.solve_ode_cp_ps((x-2)*(x+3),z,[[x-2,1]]);[[x+3,1/25],[x-2,1/5*z-1/25]]
コーシー問題の特殊解は,v(z) =1 −3z
11e+ ( z − )e2z25525で与えられる.

28

3.9

fbt

例 3.16 次の代数的局所コホモロジー類のフーリエ・ボレル変換を求めよ.

3x3 − 11x2 + 19x − 23
1
1
]
(3) [
(1) [ 2 ]
(2) [
]
x
x−1
(x − 3)(x − 1)3
4x11 + 8x10 − 4x8 + 8x7 − 96x6 − 8x4 + 4x3 + 24x2 − 4(5) [](x4 + 1)3

3x2 − 1]
(4) [ 3x −x−1解(1)[638] taji_alc.fbt(1,[[x,2]],z);[[x,z]]
1
1
F B([ 2 ])(z) = Res( 2 ezx dx) = z.
xx(2)[639] taji_alc.fbt(1,x-1,z);[[x-1,1]]
F B([

1 zx
1
])(z) = Res(e dx) = ez .
x−1
x−1

(3)
[640] taji_alc.fbt(3*x^3-11*x^2+19*x-23,[[x-3,1],[x-1,3]],z);[[x-1,3*z^2+1],[x-3,2]]
F B([

3x3 − 11x2 + 19x − 23
3x3 − 11x2 + 19x − 23 zx])(z) = Res(e dx) = 2e3z + (3z 2 + 1)ez .
3(x − 3)(x − 1)
(x − 3)(x − 1)3(4)[641] taji_alc.fbt(3*x^2-1,[[x^3-x-1,1]],z);[[x^3-x-1,1]]X
3x2 − 1 zx
3x2 − 1])(z) = Res( 3e dx) =
ex1 z .
F B([ 3x −x−1x −x−1x1 ∈Z(5)[642] taji_alc.fbt(4*x^11+8*x^10-4*x^8+8*x^7-96*x^6-8*x^4+4*x^3+24*x^2-4,[[x^4+1,3]],z);[[x^4+1,(z^2+1)*x+2*z+1]]
F B([

X
4x11 + 8x10 − 4x8 + 8x7 − 96x6 − 8x4 + 4x3 + 24x2 − 4])(z) =((z 2 +1)x1 +2z+1)ex1 z .
4
3(x + 1)
x1 ∈Z

29

3.10

invfbt例 3.17 次の指数多項式の逆フーリエ・ボレル変換を求めよ.

(2) ez

(1) z
(5)

X

(3) 2e3z + (3z 2 + 1)ez

(4)X

ex1 z , Z = {x|x3 − x − 1 = 0}x1 ∈Z((z 2 + 1)x1 + 2z + 1)ex1 z , Z = {x|x4 + 1 = 0}

x1 ∈Z

解

(1) z の指数多項式リスト [[x,z]] を入力して求める.
[688] taji_alc.invfbt([[x,z]],z|switch=1);[1,[[x,2]]]
1
F B −1 (z)(x) = [ 2 ].
x(2) ez の指数多項式リスト [[x-1,1]] を入力して求める.
[689] taji_alc.invfbt([[x-1,1]],z|switch=1);[1,[[x-1,1]]]F B −1 (ez )(x) = [

1
].
x−1

(3) 2e3z + (3z 2 + 1)ez の指数多項式リスト [[x-3,2],[x-1,3*z^2+1]] を入力して求める.
[690] taji_alc.invfbt([[x-3,2],[x-1,3*z^2+1]],z|switch=1);[3*x^3-11*x^2+19*x-23,[[x-3,1],[x-1,3]]]F B −1 (2e3z + (3z 2 + 1)ez )(x) = [(4)

3x3 − 11x2 + 19x − 23].
(x − 3)(x − 1)3P

x1 zの指数多項式リスト [[x^3-x-1,1]] を入力して求める.
x1 ∈Z e[691] taji_alc.invfbt([[x^3-x-1,1]],z|switch=1);[3*x^2-1,[[x^3-x-1,1]]]F B −1 (

X
x1 ∈Z

(5)

P

x1 ∈Z ((z23x2 − 1ex1 z )(x) = [ 3].
x −x−1+ 1)x1 + 2z + 1)ex1 z の指数多項式リスト [[x^4+1,(z^2+1)*x+2*z+1]] を入力して求める.

[692] taji_alc.invfbt([[x^4+1,(z^2+1)*x+2*z+1]],z|switch=1);[4*x^11+8*x^10-4*x^8+8*x^7-96*x^6-8*x^4+4*x^3+24*x^2-4,[[x^4+1,3]]]F B −1 (X

x1 ∈Z((z 2 +1)x1 +2z+1)ex1 z )(x) = [4x11 + 8x10 − 4x8 + 8x7 − 96x6 − 8x4 + 4x3 + 24x2 − 4].
(x4 + 1)3

30

参考文献
[1] 森本光生 : 佐藤超函数入門, 共立出版, 1976.
[2] 田島慎一, 中村弥生 : 微分作用素を用いた有理関数の留数計算と Horowitz’s algorithm,
京都大学数理解析研究所講究録 1038 「数式処理における理論と応用の研究」(1998), 23-30.
[3] 田島慎一, 中村弥生 : D-加群を用いた留数計算アルゴリズムの局所化, 数式処理 7 (1999), 2-10.
[4] Tajima, S. and Nakamura, Y. : An algorithm for computing the residue of a rational function
via D-Modules, Jasai Mathematical Monographes 2 - Computer Algebra - (2000), 149-158.
[5] Nakamura, Y. and Tajima, S. : Residue calculus with diﬀerential operator, Kyushu Journalof Mathematics Vol.54 No.1 (2000), 127-138.
[6] 田島慎一 : 多変数補間問題とホロノミック D-加群,
千葉大学数学講究録 3 「代数解析学の諸問題」 (1999), 73-94.
[7] 田島慎一 : 代数的局所コホモロジー類のローラン展開と L.Ehrenpreis の Noether 作用素,
京都大学数理解析研究所講究録 1138「数式処理における理論と応用の研究」(2000), 87–95.

[8] Tajima, S. : Grothendieck duality and Hermite-Jacobi formulas, Proc. Seventh International
Conference on Several Complex Variables, in Finite or Inﬁnite Dimensional Complex Analysis, (eds by Kajiwara, Li and Shon) Dekker, 503-509 (2000).
[9] Tajima, S. : An algorithm for computing the Noetherian operator representations and its
applications to constant coeﬃcients holonomic PDE’s, Tools for Mathematical Modellings,(2001) St. Petersbourg, 154-160.
[10] Tajima, S. : Exponential polynomials and the Fourier-Borel transforms of algebraic local
cohomology classes, in Microlocal Analysis and Complex Fourier Analysis, eds by T. Kawai
and K. Fujita, World Scientiﬁc (2002), 284-296.
[11] 田島慎一 : 確定特異点型ホロノミック系の零次元代数的局所コホモロジー解,
京都大学数理解析研究所講究録 1336「双曲形方程式と非正則度」(2003), 121-132.
[12] Tajima, S. : On Noether diﬀerential operators attached to a zero-dimensional primary ideal- shape basis case -, in Finite or Inﬁnite Dimensional Complex Analysis and Applications(2005), Kyushu Univ. Press, 357-366.
[13] Tajima, S. : An algorithm for computing exponential polynomial solutions of constantcoeﬃcients holonomic PDE’s -generic case-, in Methods of Complex and Cliﬀord Analysis,
eds Le Hung Son, W. Tutschke and S. Jain, SAS International Pub. (2006), 335-344.
[14] 田島慎一 : Holonomic な定数係数線形偏微分方程式系と Grothendieck duality,
京都大学数理解析研究所講究録 1509 「積分核の代数解析的研究」(2006), 1–23.
[15] 田島慎一 : 剰余体 Q[x]/hf (x)i における逆冪計算,
京都大学数理解析研究所講究録 1514 「Computer Algebra-Design of Algorithms, Implementations and Applications」(2006), 171–175.
31

[16] 田島慎一 : 一変数留数計算アルゴリズムについて,
京都大学数理解析研究所講究録 1509 「積分核の代数解析的研究」(2006), 24–50.
[17] 加藤涼香, 田島慎一 : 有理関数のローラン展開アルゴリズムと代数的局所コホモロジー,
京都大学数理解析研究所講究録 1395 「Computer Algebra-Design of Algorithms, Implementations and Applications」(2004), 50–56.
[18] 庄司卓夢, 田島慎一 : 高速留数計算アルゴリズム,
京都大学数理解析研究所講究録 1456 「Computer Algebra-Design of Algorithms, Implementations and Applications」(2005), 133–143.
[19] 庄司卓夢, 田島慎一 : 多項式剰余公式の計算アルゴリズム,
京都大学数理解析研究所講究録 1514 「Computer Algebra-Design of Algorithms, Implemen-tations and Applications」(2006), 108–114.
[20] 庄司卓夢, 田島慎一 : コーシー問題の解法とアルゴリズム,
京都大学数理解析研究所講究録 1568 「Computer Algebra-Design of Algorithms, Implemen-tations and Applications」(2007), 67-73.
[21] 庄司卓夢, 田島慎一 : ネーター作用素計算におけるモニックでない多項式による割り算の効率化, 京都大学数理解析研究所講究録 「数式処理研究の新たな発展」掲載予定.
[22] Noro, M. et al : 計算機代数システム Risa/Asir, http://www.math.kobe-u.ac.jp/Asir32