第 9 章 多項式について
15.3 属性値の指定
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が名前として使える様になります.
(%i38) put(Mike,"10[Kg]",Weight);
(%o38) 10[Kg]
(%i39) put(Mike,"White-Black-Red",Color);
(%o39) White-Black-Red
(%i40) properties(Mike);
(%o40) [[user properties, Color, Weight, birthday]]
(%i41) get(Mike,Color);
(%o41) White-Black-Red
属性値の削除はrem函数やremove函数で行えます.この場合はアトムと属性を指定すると,ア トムに設定した属性と属性値が一緒に削除されます.
函数の値の設定も実際は属性を用いて行っています.Maximaではatvalue函数で指定した点での 値を設定します.
具体的には,atvalue(h式i,hリストi,h境界値i)で与えます.この函数で値を指定すると,atvalue 属性に座標と函数値が対応付けられ,h函数iのpropertiesリストにatvalueが追加されます.
但し,atvalueの値はget函数で取出せず,削除もrem函数では行えません.
(%i1) put(f,C-inf,type);
(%o1) C - inf
(%i2) atvalue(f(x),x=0,0);
(%o2) 0
(%i3) properties(f);
(%o3) [atvalue, [user properties, type]]
(%i4) get(f,type);
(%o4) C - inf
(%i5) rem(f,atvalue);
(%o5) false
(%i6) remove(f,atvalue);
(%o6) done
(%i7) properties(f);
(%o7) [[user properties, type]]
但し,属性値は他のものと同様にprintprops函数で,函数名と属性を指定する事で表示されます.
(%i19) atvalue(f(x),x=0,0);
(%o19) 0
(%i20) atvalue(g(x),x=0,1);
(%o20) 1
(%i21) atvalue(g(x),x=1,2);
(%o21) 2
158 第15章 属性 (%i22) printprops(all,atvalue);
f(0) = 0
g(0) = 1
g(1) = 2
(%o22) done
get
get (hアトムi,hキーワードi)
put函数でhアトムiにhキーワードiに対して与えた属性を取出します.
props
Maximaが持つ属性の一覧のリスト.infolistsで明示的に言及されたものの他の任意の属性,例え
ば,atvalue,matchdeclares等々で,declare関数で指定された属性と同様のものです.
properties
properties (hアトムi)
hアトムiに関連する全ての属性を記載したリストを生成します.
propvars
propvars (h属性i)
h属性iリストのアトムのリストを生成し,propによって指定された属性を持ちます. その為,prop-vars(atvalue)はatvalueを持つアトムのリストを生成します.
put
put (hアトムi,h属性値i,h属性i)
hアトムiにh属性iで指定したh属性値iを加えます.これは利用者がアトムに任意の属性を与 える事が可能になります.
尚,put函数で与えた属性はget函数で取出せます.
qput
qput (hアトムi,h属性値i,h属性i)
putに似ていますが,その引数は評価されません.
printprops
printprops(hアトムi,h属性i)
printprops([hアトム1i,· · ·,hアトムni],h属性i) printprops(all,h属性i)
hアトムiとh属性iに対応する属性値を表示します. hアトムiのリストも指定可能ですが,h属 性iは一つだけです.
アトムにallを指定すると,指定した属性を持つ全てのアトムや函数の値が表示されます.
rem
rem (hアトムi,h属性i)
hアトムiからh属性iで指定された属性と属性値を削除します.
160 第15章 属性 remove
remove(hアトム1i,h属性1i,· · ·,hアトムni,h属性ni) remove([hアトム1i,· · ·,hアトムni], [h属性1i,· · ·,h属性ni]) remove (”hアトムi”,operator)
remove (hアトムi,transfun) remove (all,h属性i)
変数や関数に関連した属性の一部や全てを削除します.この属性は,システム側が定義したもの でも,利用者が与えたもの,function, mode declareでも構いません.
remove(hアトム1i,h属性1i,· · ·,hアトムni,h属性ni)でh属性iiをhアトムiiから削除します.
ここで指定するアトムと属性は各々が対応するリストでも構いません. 属性がtransfunの場 合,translate函数で変換されたLISP函数が削除されます. この後は,Maxima版の函数が用いられ ます.
属性にoperatorやopを指定した場合,declare等で宣言した,prefix(前置式), infix(内挿式),nary(内 挿式),postfix(後置式),matchfixやnofix(無演算子)といった演算子の属性が削除されます.尚,演算 子には必ず二重引用符で括る必要がある事に注意して下さい.
アトムではなくallを指定した場合,指定された属性を持つアトムから,その属性が削除されます.
removeは与えられた属性が存在しない時でもエラーを返しません.返却値は常にdoneです.
atvalue
atvalue (h式i,hリストi,h境界値i)
利用者がhリストiで指定した点でのh境界値iをh式iに割当てます.
h式iは函数f(v1,v2,...)か,導函数diff(f(v1,v2,...),vi,ni,vj,ni,...) (niはviによる微分の階数)で, その引数の中ではっきりと現れるものでなければなりません.
等式のリストが境界を定めます.hリストiは方程式のリスト,或いは上述の様に単一の方程式 vi=exprでも構いません.atvalueが表示された時に,記号@@1,@@2,...は函数変数v1,v2,....を表現 する為に用いられます.
at
at (h式i,hリストi)
atvalue函数と対で用います.h式iをatvalue函数に対して与えられるものと同じ方程式のリス
ト,方程式中に含まれる変数に対し, atvalueで指定した値を入れて評価します.
部分式がatvalueで指定された値を持たない為に,評価出来ない場合, その部分式に作用するat
の名詞型が返されます. 又,その部分式は二次元的書式で表示されます.
gradef
gradef(hf(x1,· · ·, xm)i,hg1i,· · ·,hgni) gradef(hfi,hxi,h式i)
函数hfiのn個の引数に対する微分を, d<f >
dxi =< giiで定めます.
もしも変数の総数数mn個の勾配nよりも小さい場合,最初のhfiのi番目の引数が参照されま す.xiは函数定義で用いるダミー変数と同類で,函数hfiのi番目の変数を指定する為に用います.
最初の引数を除く全てのgradefの引数はhgiが定義された函数ならば, その函数が呼出され,結 果が用いられます.勾配は函数が第一階微分を除いて正確に判らない場合で,より高階の微分を得 たい時に必要となります.
gradef(hfi,hxi,h式i)はhxi によるh函数iの微分がh式iとなる事を宣言します. この時 に,depends(hfi,hxi)が実行されます. このdependsによって属性dependencyが付加されます.
gradefはMaximaの既に定義された函数の微分を再定義する事にも使えます. 例えば,gradef(sin(x),sqrt(1-sin(x)ˆ 2))の様に出来ます.但し,添字された函数にgradefは使えません.
尚,gradefで勾配を定義すると,大域変数gradefsにその函数の名前が蓄えられます.
使えます.
depends
depends (h函数1i,h変数1i,· · ·,h函数ni,h変数ni)
函数の変数に対する従属性(dependency)を宣言します. 即ち,depends(f,x)でfはxの値に従属 する性質を付加します.
(%i41) depends(neko,[tama,mike]);
(%o41) [neko(tama, mike)]
(%i42) diff(neko,tama);
dneko
(%o42)
---dtama (%i43) diff(diff(neko,tama),tama);
2 d neko
(%o43)
---2 dtama (%i44) depends([rat1,rat2],[cheese,milk]);
(%o44) [rat1(cheese, milk), rat2(cheese, milk)]
(%i45) depends([rat1,rat2],[cheese,milk],neko,[tama,mike]);
(%o45) [rat1(cheese, milk), rat2(cheese, milk), neko(tama, mike)]
勿論,dependsを実行していなければ,diffで0になります.dependsでnekoがtamaとmikeを変 数とする函数と宣言した為に,微分を行っても零になりません. 最初の例では函数nekoが1成分し かない為に,リストの大括弧を外しています.
函数の変数に対する従属性はdependenciesに登録された函数の情報から調べる事が出来ます.
次の例では,fとgがxとyに,rとsがu,vとwに依存し,uがtに従属する事をdiffに報せる為 に, depends([f,g],[x,y],[r,s],[u,v,w],u,t)としています
(%i11) dependencies;
162 第15章 属性
(%o11) []
(%i12) depends([f,g],[x,y],[r,s],[u,v,w],u,t);
(%o12) [f(x, y), g(x, y), r(u, v, w), s(u, v, w), u(t)]
(%i13) dependencies;
(%o13) [f(x, y), g(x, y), r(u, v, w), s(u, v, w), u(t)]
(%i14) diff(r.s,u);
dr ds
(%o14) . s + r .
--du du
(%i15) diff(r.s,t);
dr du ds du
(%o15) s . + r .
--du dt du dt
この例では,dependsを実行する事で,dependenciesにdependsで従属性を宣言した函数が変数と 一緒にリストに加えられている事に注目して下さい. 又,微分では合成函数の微分も出来ます.
dependsで設定した従属性は,remove函数を使って削除する事が出来ます. 上の例の(%i11)で
宣言したrのuに対する従属性を削除したければ, remove(r,dependency) と入力します.
(%i16) remove(r,dependency);
(%o16) done
(%i17) ’’%i15;
ds du
(%o17) r .
--du dt
diffはdependenciesに設定された情報を用います.積分,laplace変換等での引数は, integrate(f(x),x) の様に,従属性を函数内部ではっきりと与えなければなりません.
nounify
nounify (h函数i)
h函数iの名詞型を返します.動詞函数を名詞型であるかの様に参照したい場合に必要です.幾つ かの動詞型函数は,ある引数に対して評価が出来なかった場合,それらの名詞型を返す事に注意し て下さい.函数の呼出で単引用符’を頭に置いた場合も,その名詞型か返されます.
verbify
verbify (h函数i)
h函数iを動詞型で返します.