第 9 章 多項式について
15.2 declare 函数
Maximaでは変数や函数に様々な属性を付加する事が出来ます. 演算子のinfixの様に函数を用
いて特定の属性を追加する方法もありますが, Maximaでは,それに加えてdeclare函数を用いて属 性を追加する事が可能です.
¶ ³
declare(ha1i,hf1i,ha2>i,hf2i,· · ·)
µ ´
declareはhaiiに様々な属性hfiiを指定する函数です.ここで,haiiとhfiiはアトムやリストでも 構いません.
この場合,アトムはリストに含まれる全ての属性を持ちます. 尚,declareはassumeと異なり,そ の影響は特定の文脈上に留まらずに大域的です. その一方で,facts()に設定される内容はdeclare を行った文脈上で設定されています.
Maximaが現在認識し,利用可能な変数に与えられる属性を以下の表15.1に示しておきます.
函数の属性を表15.2に示します.
featurep函数でdeclare函数を使って属性が定義されているかどうかを調べる事が可能です.
¶ ³
featurep(h対象i,h属性i)
µ ´
でh対象iがh属性iを持つとdeclareで宣言されているかどうか判ります.
additive
declare(f,additive)で函数fの加法性を宣言します. fが1変数函数の場合,変数内部の和に対し てfが分配されます.例えば, f(x+y)はf(x)+f(y)に簡易化されます. fが多変数函数の場合,加法性 は第一番目の引数に対してのみ設定されます. 例えば,f(h(x)+g(x),x)はf(h(x),x)+f(g(x),x)に簡易
154 第15章 属性
表 15.1: 変数の属性 属性値 概要
even 偶数
odd 奇数
integer 整数
rational 有理数
irrational 非有理数
real 実数
imaginary 虚数
complex 複素数
表 15.2: 函数の属性
属性値 概要
increasing 単調増加函数,x > y→f(x)> f(y) decreasing 単調減少函数,x > y→f(x)> f(y)
oddfun 奇函数,f(-x)=-f(x)
evenfun 偶函数,f(-x)=f(x)
linear 線形性,f(ax+by,· · ·) =af(x,· · ·) +bf(y,· · ·) hline commutative(symmetric 可換性,f(x,y)=f(y,z)
antisymmetric 歪対称,f(x,y)=-f(y,x)
lassociative 左結合律
rassociative 右結合律
化されます. 但し,fをsum(x[i],i,i0,i1)の形式の式に対して作用させる場合, この簡易化は実 行されません.
multiplicative
declare(f,multiplicative)で函数fに乗法性を与えます. ここで,fが単変数であれば,fを積に作用 させる時は何時でもfは積に対して分配されます.即ち,f(x*y)はf(x)*f(y)に簡易化されます.
fが多変数函数の場合,この乗法性はfの最初の引数に対して定義されます. 例えば,fが2変数の 函数の場合,f(g(x)*h(x),x)はf(g(x),x)*f(h(x),x)に簡易化されます.
尚,この簡易化はfをproduct(x[i],i,下限,上限)といった形式の式に作用させる場合には生 じません.
linear
declare(f,linear)で函数fの第一変数に対し,その線形性を宣言します. 単変数函数fがlinearであ ると宣言されている場合,aが定数であれば, f(x+y)はf(x)+f(y)に,f(a*x)はa*f(x)に展開されます.
多変数函数fの場合は最初の変数に対してのみ線形性が付加されます. linearはadditive+outative に相当します.
commutative
declare(h,commutative)で函数hが引数に対して可換函数となります. これはsymmetricと同 値です.
symmetric
declare(f,symmetric)で函数fが対称函数である事を宣言します. これはcommutativeと同値で す.尚,引数を入れ換えて符号が反転する函数は属性antisymmetricを持っています.
antisymmetric
declare(h,antisymmetric)で,函数hは丕対称として簡易化されます. 例えば,h(x,z,y)は-h(x,y,z) に簡易化されます.即ち,symmetricやcommutativeを宣言して得られた結果に,引数同士を互いに n回交換して(−1)n倍したものになります.
lassociative
declare(g,lassociative)で函数gの左分配律性を宣言します. 即ち,g(g(a,b),g(c,d))はg(g(g(a,b),c),d) に簡易化されます.
rassociative
declare(g,rassociative)で函数gが右分配律を満す函数である事を宣言します. 即ち,g(g(a,b),g(c,d)) はg(a,g(b,g(c,d)))に簡易化されます.
outative
declare(f,outative)で定数の積に対するfとの可換性を宣言します. 即ち,fが単変数の場合,fを定 数を含む積に作用させると,定数はfの外に出されます.例えば,aを定数とすると,f(a*x)はa*f(x) に簡易化されます. 但し,非アトムの因子は外に出されません.
fが多変数函数であれば,outativityは’sumや’integrateの様に定義されます.つまり,f(a*g(x),x) は,aが変数xを含まなければa*f(g(x),x)に簡易化されます.
尚,デフォルトで’sum,’integrateと’limitが属性outativeを持つと宣言されています.
scalar
declare(f,scalar)でfがスカラーであると宣言します.
nonscalar
declare(f,nonscalar)でfがスカラーではないと宣言します.
constant
declare(a,constant)でアトムaを定数として宣言します.
156 第15章 属性 noun
declare(f,noun)で函数fを自動的に評価されない名詞型函数として宣言します.
posfun
declare(f,posfun)で函数fが正値函数(positive function)であると宣言します.この場合,is(f(x) 0) の結果はtrueです.
mainvar
declare(x,mainvar)で,変数xを主変数にします.この場合,Maxima内部の順序で,mainvarが変 数の最高位になっています.このmainvarを用いて多項式等の内部表現が決定される為,式の表示 だけではなく,様々な函数を用いた処理も異なる事があります.
(%i22) expand((x+y)^4);
4 3 2 2 3 4
(%o22) y + 4 x y + 6 x y + 4 x y + x
(%i23) (declare(x,mainvar),expand((x+y)^4));
4 3 2 2 3 4
(%o23) x + 4 y x + 6 y x + 4 y x + y
二つの式の計算を行う際に,mainvarを一方の式で宣言しておきながら,もう一方で宣言していな い場合,内部表現が各々異なる可能性がある為, ev函数による簡易化が必要となる場合もあります.
alphabetic
maximaのアルファベット,初期ではaからz迄の小文字と大文字に%と.を加えたものです.そ
れ以外の文字を変数で利用したければ,alphabeticで宣言を行います.
例えば,declare(” ”,alphabetic)で宣言すると,new valueが名前として使える様になります.