第 2 章 Maxima のデータとその操作
2.3 式について
2.3.8 変数
Maximaで利用可能な変数名は,基本的にアルファベットの大文字や小文字,幾つかの記号と
alphabetic属性を与えた文字です. 0から9の数値の様に変数の先頭以外ならば利用可能な文字も
あります.この変数に関しては,逆アルファベット順を基礎とした変数順序>mが組込まれていま す. 詳細は,1.1節を参照して下さい.
Maximaには式に指定した変数が含まれているかどうかを判別する述語函数freeofがあります.
変数の述語函数
¶ ³
freeof(⟨変数1⟩,· · ·,⟨変数n⟩,⟨式⟩) ⟨変数i⟩が⟨式⟩に存在しない場合 lfreeof([⟨変数1⟩,· · ·,⟨変数n⟩], ⟨式⟩) ⟨変数i⟩が⟨式⟩に存在しない場合
µ ´
このfreeof函数は ⟨変数i⟩が⟨式⟩の中に現われなければtrueを返し,それ以外はfalseを返し ます.ここで,⟨変数i⟩は変数アトム,添字付けられた名前,函数,或いは二重引用符””で括られた演 算子が扱えます.
尚,freeof函数は,sum函数やproduct函数の内部で利用される疑似変数に対して適用する事は出 来ません.疑似変数を⟨変数i⟩に指定した場合,式に疑似変数が含まれていても,trueを返します.
lfreeof函数も動作はfreeofと殆ど同じものです.但し,変数をリストで与える点と演算子が扱え
ない点で異なります.
次に,Maxima上で値が割当てられた変数は大域変数valuesに登録されます.
Maximaに含まれる変数一覧
¶ ³
大域変数名 初期値 概要
values [] 利用者設定のアトム変数の一覧
µ ´
この大域変数valuesには,Maximaの大域変数を除いて,演算子:,演算子::や函数的な束縛のある 変数名を含むリストが割当てられます.
(%i1) a:1;
(%o1) 1
(%i2) b::sin(a);
(%o2) sin(1)
(%i3) x;
(%o3) x
(%i4) values;
(%o4) [a, b]
この例ではaとbには値を割当てていますが,単純にxは入力しただけです. すると,大域変数
valuesには値が束縛された変数a,bが登録されています.
大域変数valuesに登録された変数は,次のremvalue函数を用いてMaximaから削除する事が出
来ます.
変数値の削除を行う函数
¶ ³
remvalue(⟨変数1⟩,⟨変数2⟩,· · ·) remvalue (all)
µ ´
remvalue函数は指定した大域変数valuesの変数リストに登録された変数をMaximaから削除し
ます.変数は添字されていても構いません.
remvalue(all)で,全ての利用者変数が削除されます.
(%i10) b1:sin(y);
(%o10) sin(y)
(%i11) x:1;
(%o11) 1
(%i12) c1:b1*x;
(%o12) sin(y)
(%i13) values;
(%o13) [b1, c1, x]
(%i14) remvalue(x);
(%o14) [x]
(%i15) c1;
(%o15) sin(y)
(%i16) values;
(%o16) [b1, c1]
(%i17) remvalue(all);
(%o17) [b1, c1]
(%i18) values;
(%o18) []
この例では,変数b1,x,c1に値を割当て,最初に変数xを削除し,最後にallで全ての変数を削除し ています.変数c1の割当では変数xを利用していますが,入力直後に評価された値が変数c1に割 当てられている為,変数xを削除しても問題はありません.
Maximaには式中の変数を取出したりする函数が幾つか用意されています.
式中の変数を扱う函数
¶ ³
args(⟨式⟩) listofvars(⟨式⟩)
µ ´
args函数は⟨式⟩が函数の場合,函数の引数を返します. 但し,多項式のCRE表現から変数を取
出すshowratvars函数とは異なり,内部表現の先頭の成分をMaximaのリストに変換したもの,具
体的には, substpart(”[”,⟨式⟩,0)と同じ結果となります. その為,複雑な式になると部分式のリス
(%i21) args(sin(x));
(%o21) [x]
(%i22) args(sin(x+y));
(%o22) [y + x]
(%i23) expand((sin(x)+y)^2);
2 2
(%o23) y + 2 sin(x) y + sin (x)
(%i24) args(%);
2 2
(%o24) [y , 2 sin(x) y, sin (x)]
尚,args函数とsubstpart函数の両方は大域変数inflagの設定に依存します.
listofvars函数は⟨式⟩の変数リストを生成します.ここで,大域変数listconstvarsがtrueであれ
ば,⟨式⟩にMaximaの数学定数%e,%pi,%iや定数として宣言した変数で含まれているものがあれ
ば, listofvars函数が返すリストに,これらの定数が含められます.但し,デフォルトのfalseの場合, 定数を除外したリストを返却します.
listofvarsの動作を制御する大域変数
¶ ³
変数名 初期値 概要
listconstvars false Maximaの定数を与式の変数リストに加えるかどうかを制御
listdummyvars true 疑似変数を与式の変数リストに加えるかどうかを制御
µ ´
大域変数listconstvarsがtrueであれば,定数として宣言した変数とMaximaの数学定数%e,%pi,%i が式に含まれていると,listofvars函数はこれらの定数も変数として加えたリストを返します.
大域変数listconstvarsがfalseの場合,数学定数と定数として宣言された変数は除外され,listvars が返すリストには含まれません.
(%i6) listofvars(x^2*y+aa+%e);
(%o6) [x, y]
(%i7) listconstvars:true;
(%o7) true
(%i8) listofvars(x^2*y+aa+%e);
(%o8) [%e, aa, x, y]
大域変数listdummyvarsがfalseであれば,式の疑似変数はlistofvars函数が出力するリストの中 に含まれません.尚,疑似変数はsum函数やproduct函数等の添字や極限変数や定積分変として利 用される変数です.