• 検索結果がありません。

属性値の指定

ドキュメント内 , (ページ 163-170)

第 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(hi,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アトムihキーワード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アトムih属性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アトムih属性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属性iihアトムiiから削除します.

ここで指定するアトムと属性は各々が対応するリストでも構いません. 属性がtransfunの場 合,translate函数で変換されたLISP函数が削除されます. この後は,Maxima版の函数が用いられ ます.

属性にoperatorやopを指定した場合,declare等で宣言した,prefix(前置式), infix(内挿式),nary(内 挿式),postfix(後置式),matchfixやnofix(無演算子)といった演算子の属性が削除されます.尚,演算 子には必ず二重引用符で括る必要がある事に注意して下さい.

アトムではなくallを指定した場合,指定された属性を持つアトムから,その属性が削除されます.

removeは与えられた属性が存在しない時でもエラーを返しません.返却値は常にdoneです.

atvalue

atvalue (hi,hリストi,h境界値i)

利用者がhリストiで指定した点でのh境界値ihiに割当てます.

hiは函数f(v1,v2,...)か,導函数diff(f(v1,v2,...),vi,ni,vj,ni,...) (niはviによる微分の階数)で, その引数の中ではっきりと現れるものでなければなりません.

等式のリストが境界を定めます.hリストiは方程式のリスト,或いは上述の様に単一の方程式 vi=exprでも構いません.atvalueが表示された時に,記号@@1,@@2,...は函数変数v1,v2,....を表現 する為に用いられます.

at

at (hi,hリストi)

atvalue函数と対で用います.hiをatvalue函数に対して与えられるものと同じ方程式のリス

ト,方程式中に含まれる変数に対し, atvalueで指定した値を入れて評価します.

部分式がatvalueで指定された値を持たない為に,評価出来ない場合, その部分式に作用するat

の名詞型が返されます. 又,その部分式は二次元的書式で表示されます.

gradef

gradef(hf(x1,· · ·, xm)i,hg1i,· · ·,hgni) gradef(hfi,hxi,hi)

函数hfiのn個の引数に対する微分を, d<f >

dxi =< giiで定めます.

もしも変数の総数数mn個の勾配nよりも小さい場合,最初のhfiのi番目の引数が参照されま す.xiは函数定義で用いるダミー変数と同類で,函数hfiのi番目の変数を指定する為に用います.

最初の引数を除く全てのgradefの引数はhgiが定義された函数ならば, その函数が呼出され,結 果が用いられます.勾配は函数が第一階微分を除いて正確に判らない場合で,より高階の微分を得 たい時に必要となります.

gradef(hfi,hxi,hi)はhxi によるh函数iの微分がhiとなる事を宣言します. この時 に,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を動詞型で返します.

16 Maxima による評価

ドキュメント内 , (ページ 163-170)