[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. 式

6.1 式について  
6.2 割当て  
6.3 複素数  
6.4 不等号  
6.5 構文  
6.6 式に関する諸定義  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 式について

変数名として利用してはならない予約語が幾つか存在する。それらを用いると意味不明 な構文エラーの原因となる。以下にその予約語を示す。
 
INTEGRATE            NEXT           FROM                 DIFF            
IN                   AT             LIMIT                SUM             
FOR                  AND            ELSEIF               THEN            
ELSE                 DO             OR                   IF              
UNLESS               PRODUCT        WHILE                THRU            
STEP                                                                     

MAXIMAでは殆どのものが式(expression)である。式の列はコンマで各式に分離され、 それらの回りに括弧を置いたもので作られる。これはCcomma expressionに 似ている。

 
(C29) x:3$
(C30) joe:(x:x+1,x:x*x);
(D30) 16
(C31) joe:(if (x >17) then 2 else 4);
(D31) 4
(C32) joe:(if (x >17) then x:2 else joe:4,joe+x);
(D32) 20

MAXIMAのループでさえも式だが、それの返す値は便利とは言えないDONEである。

 
(C33) joe:(x:1,for i from 1 thru 10 do (x:x*i));
(D33) DONE

ともあれ、本当に必要なものは実際に値を返すコンマ式の第三の項に含まれる。

 
(C34) joe:(x:1,for i from 1 thru 10 do (x:x*i),x);
(D34) 3628800


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 割当て

- MACSYMAには二つの割当て演算子の:と::がある。例えば、A:3は変数Aに3を設定する。 ::は右側の式の値をその左側の値に割当て、その左側は原子の変数か添字付けられた 変数に対して評価しなければならない。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 複素数

- 複素式はMACSYMAでは式の実部と%Iを掛けた虚部との和で指定される。従って、 方程式X^2-4*X+13=0の根は2+3*%Iと2-3*%Iとなる。複素式の積の簡易化では積の拡張に よる効果に注意する。商、根、そして他の複素式の関数の簡易化は通常REALPART、 IMAGPART、RECTFORM、POLARFORM、ABS、CARG関数を用いて行われる。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 不等号

- MACSYMAは通常の不等式演算子を持つ:
 
小さい(less than):               <
大きい(greater than):            >
以上(greater than or equal to):  >=
以下(less than or equal to):     <=

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.5 構文

- MACSYMAに対して新しい演算子(与えられた性質に応じ、中置(infix)、前置(prefix)、 後置(postfix)、unary,又はmatchfix)を追加し、既存の演算子を取り除いたり、既存 の演算子の属性を再定義する事が可能である。

MACSYMAの構文は殆どの通常のアプリケーションにとって適切でありさえすれば利用者 側で新しい演算子の定義やその再定義の消去が可能である。拡張の仕組はより直接的 で、以下の例で明白になるだろう。
 
(C1) PREFIX("DDX")$
(C2) DDX Y$
((C2)は"DDX"(Y)を意味する)
(C3) INFIX("<-")$
(C4) A<-DDX Y$
((C4)は"<-"(A,"DDX"(Y))を意味する)

SPECIALを除いた各々の演算子の型に関連する生成関数がある。この生成関数は 指定された語彙項目に関連する構文解析属性を与える。だから、上の例の "PREFIX("DDX")"で、"DDX"は丁度"-"や"NOT"の様な前置(prefix)演算子になる。 勿論、ある拡張関数はmatchfix演算子向けに照合キーワードの様な追加情報を必要 とする。加えて、羃乗の割当と語の一部は、定義された全てのキーワードに対して 指定されていなければならない。これは拡張関数に追加引数を引渡す事で実行される。 利用者がこれらの追加の助変数を指定しなかった場合、MACSYMAはデフォルト値を指定 する。

羃乗の割当と語の一部(鈎括弧で閉じられている)を伴う6個の拡張関数は以下に纏め られる。

 
PREFIX(operator, rbp[180], rpos[ANY], pos[ANY])
POSTFIX(operator, lbp[180], lpos[ANY], pos[ANY])
INFIX(operator, lbp[180], rbp[180], lpos[ANY], rpos[ANY],pos[ANY])
NARY(operator, bp[180], argpos[ANY], pos[ANY])
NOFIX(operator, pos[ANY])
MATCHFIX(operator, match, argpos[ANY], pos[ANY])
デフォルトでは語の一部や羃乗の割当に関わりたくない利用者が拡張関数に対し単に これらの引数を省略出来る様に与えられている。それ故、以下は全て同値である。
 
PREFIX("DDX",180,ANY,ANY)$
PREFIX("DDX",180)$
PREFIX("DDX")$
演算子の構文的性質の削除はREMOVEやKILL関数を用いる事でも行える。特に、 "REMOVE("DDX",OP)"や"KILL("DDX")"はオペランド状況に対して"DDX"を返す。 しかし、第二の場合は全ての他の"DDX"の属性も削除される。

 
(C20) PREFIX("DDX",180,ANY,ANY)$

(C21) DDXYZ;

(D21) 				    DDX YZ

(C26) "ddx"(u):=u+4;

(D26) 			        DDX u := u + 4
(C27) ddx 8;

(D27) 				      12


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.6 式に関する諸定義

関数: AT (exp, list)
exp(任意の式で良い)をATVALUE関数に対して与えられるものと同じ方程式のリストや 単一の方程式中に含まれる変数に対して指定された値で評価する。部分式がlistに 含まれる任意の変数に依存し、指定されたATVALUEを持たずにそれが評価出来ない場合、 ATの名詞型が返されて二次元的書式で表示される。例はEXAMPLE(AT);を実行せよ。

関数: BOX (expr)
exprを箱で囲んで返す。この箱は式の一部である。
 
BOX(expr,label)
ではexprをラベル付けされた箱で囲む。もし、ラベルがあまりにも長ければ表示の際 に切り捨てられた名前となる。

BOXCHAR["] - この関数や、DPARTやLPART関数で箱を描く時に用いる文字。

 
(*訳者注:要するに、こんな代物。

(C1) box(" This is a pen. ");

                              """"""""""""""""""
(D1)                          " This is a pen. "
                              """"""""""""""""""
*)

変数: BOXCHAR
デフォルト値:["] - BOX関数とDPARTとLPART関数で箱を描く為に用いられる文字。

 
(* 訳者注:これもこんな代物。

(C30) box(" This is a pen. ","MAXIMA");

                              "MAXIMA"""""""""""
(D30)                         " This is a pen. "
                              """"""""""""""""""
(C31) boxchar:X;

(D31)                                  X
(C32) box(" This is a pen. ","MAXIMA");

                              "MAXIMA"XXXXXXXXXX
(D32)                         X This is a pen. X
                              XXXXXXXXXXXXXXXXXX
*)

特殊演算子: CONSTANT
- aiを%PIの様な定数にする。

関数: CONSTANTP (exp)
expが定数(つまり、数と%PI,%E,%Iや定数が指定された任意の変数や定数として宣言さ れたものの合成)であればTRUE、それ以外はFALSEとなる。引数が定数の任意の関数も 定数として考えられる。

関数: CONTRACT (exp)
expでの可能な全ての縮約を実行する。ここで、expは任意の和と積のきちんと構成さ れた組み合わせでも良い。この関数はDEFCON関数に対して与えられた情報を用いる。 全てのテンソルが全ての添字に対して対称性を持つと仮定している為、添字は アルファベット順に並び換えられている。又、可能な限り多くの同値な項を縮約して 正規形式にする事で式の簡易化を行う為に、全ての無効添字は記号!1,!2,...を用いた 名前に変更される。最高の結果の為に、expは完全に展開されていなければならない。 RATEXPANDは各項の分母に変数が無ければ和の積や羃を展開する最も速い方法である。 GCDスイッチは、GCDの除去が不必要であればFALSEにすべきである。

 
(* 訳者注:

CONTRACTは対称式パッケージ(Symmetries)にあるが、本体側には含まれていないら
しい。対称式パッケージのCONTRACTは二引数で、式とその変数リストを必要とする。


*)

関数: DECLARE (a1, f1, a2, f2, ...)
原子aiにフラグfiを与える。aiとfiは各々原子やフラグのリストでも良く、各々の原子 は全ての属性を得る。可能なフラグとその意味は:

DECLARE([var1, var2, ...], BINDTEST)は、任意のvariが計算で不定値の時は何時でも MACSYMAがエラーメッセージを出力する。MACSYMAが現在認識して用いているものは、 以下のオブジェクトの機能である:
 
EVEN, ODD, INTEGER, RATIONAL, IRRATIONAL, REAL, IMAGINARYとCOMPLEX

関数の便利な機能が含むのは:
 
INCREASING,
DECREASING, ODDFUN (奇関数), EVENFUN (偶関数),
COMMUTATIVE (又はSYMMETRIC), ANTISYMMETRIC, LASSOCIATIVEと
RASSOCIATIVE

DECLARE(F,INCREASING)は全ての面で次と同値である。

 
ASSUME(KIND(F,INCREASING))

aiとfiはオブジェクトや機能のリストであっても良い。

次の命令、
 
FEATUREP(object,feature)
を、objectが"feature"を持つとDECLAREで宣言されているかどうかを決定する為に 使っても良い。DESCRIBE(FEATURES); を見よ。

関数: DISOLATE (exp, var1, var2, ..., varN)
ISOLATE(exp,var)(DESCRIBE(ISOLATE);を実行せよ)と似ているが、こちらでは利用者 が一つ以上の変数を同時に孤立させる事が出来る。これは、例えば、重積分での変数 変換、そして積分変数を二つかそれ以上を巻き込んだ変数変換で便利である。 この関数を利用する為にはLOAD(DISOL)$を実行せよ。デモはDEMO("disol");で使える。

関数: DISPFORM (exp)
exp(wrt自身は主演算子)の外部表現を返す。外部表現を扱うPARTと組合せると便利で ある。EXPが-Aであれば、内部表現は"*"(-1,A)となるが、外部表現は"-"(A)である。 DISPFORM(exp,ALL)は式全体(最上層ではない)を外部形式に変換する。

例えば、EXP:SIN(SQRT(X))であれば、 FREEOF(SQRT,EXP)とFREEOF(SQRT,DISPFORM(EXP))はTRUEとなるが、 FREEOF(SQRT,DISPFORM(EXP,ALL))はFALSEとなる。

関数: DISTRIB (exp)
積に対し和を分配する。EXPANDとは式の最上層のみで作用する点で異なる。つまり、 再帰がなくてEXPANDよりも処理が速い。MULTTHRUとは、最上層の全ての和を展開する 点でも異なる。
 
例えば、
DISTRIB((A+B)*(C+D)) -> A C + A D + B C + B D 
MULTTHRU ((A+B)*(C+D)) -> (A + B) C + (A + B) D
DISTRIB (1/((A+B)*(C+D))) ->  1/ ((A+B) *(C+D))
EXPAND(1/((A+B)*(C+D)),1,0) -> 1/(A C + A D + B C + B D)

 
(* 訳者注:

式の層とは内部表現での括弧()の配置に対応する。最上層とはLISP等の
(演算子,式1,式2,...)の事で、各式が原子でなければ、これと同様の構造が入り、
全体的に入れ子の構造(マトリョーシカの様な感じ)となっている。例えば、
x^2+2*x+y*(sin(1/y+2)+1)をLISPのS式で表記するなら、
(+ (^ x 2) (* 2 x) (* y (+ (sin (+ (/ 1 y) 2)) 1)))
となるが、この括弧の階層を図示すれば次の様になるだろう。


(+                                                          )
   (^ x 2)  (* 2 x)  (* y                               )
                           (+                      1)
                              (sin              )   
                                 (+          2)
                                    (/ 1 y)  


ここでEXPANDは各入れ子全てを展開して可能な限り階層を浅くするものと言えるが、
DISTRIBは最上層の演算子の分配に留まると言える。尚、Mathematicaでは、リスト
の階層表示や、Maximaの名詞型に対する式の階層を指定した展開処理や演算子の
入れ換えさえも可能である。

*)

関数: DPART (exp, n1, ..., nk)
PARTとして同じ部分式を選ぶか、その値として、その部分式を返す代りに全体の式を 返し、選択した部分式は箱の中に表示されている。その箱は実際に式の一部である。
 
(C1) DPART(X+Y/Z**2,1,2,1);
                       Y
(D1)                  ---- + X
                         2
                     *****
                     * Z *
                     *****


関数: EXP (X)
指数関数。内部的には%E^Xとして表現されている。

変数: EXPTISOLATE
デフォルト値:[FALSE] - TRUEであれば、ISOLATE(expr,var);がvarに含まれる (%Eの様な)原子の指数項についても調べる。

変数: EXPTSUBST
デフォルト値:[FALSE] - TRUEであれば、%E**(A*X)で%E**XをYで置き換えられる。

関数: FREEOF (x1, x2, ..., exp)
xiがexpの中に現われなければ、TRUEとなり、それ以外はFALSE。xiは原子か、下添字 された名前、関数(例えば、SIN(X))、又は"で閉じられた演算子でも良い。'var'が 'exp'の"無効変数"であればFREEOF(var,exp);はTRUEを返す。"無効変数"は和や積の 添数、極限変数、定積分変数の様な数学的なものである。 例:FREEOF(I,'SUM(F(I),I,0,N));はTRUEを返す。より多くの例はEXAMPLE(FREEOF); を実行せよ。

関数: GENFACT (X, Y, Z)
Xの一般化された階乗で、これは:X*(X-Z)*(X-2*Z)*...*(X-(Y-1)*Z)である。従って、 整数Xに対してはGENFACT(X,X,1)=X!、そしてGENFACT(X,X/2,2)=X!となる。

関数: IMAGPART (exp)
式expの虚部を返す。

関数: INDICES (exp)
二つの元のリストを返す。最初のものはexpで利用されていない添数のリスト (これらは一度だけ現われる);二番目のものはexpの無効添数のリスト(これらは丁度 二度現れる)である。

関数: INFIX (op)
- INFIX(中置)演算子は二つの引数を持つ関数で、引数の一つはその演算子の前、 もう一つは後に、例えばA^2の様に置かれるものの記述に使われる。INFIX("x")関数は 構文拡張関数でxが中置演算子である事を宣言する。より詳細はDESCRIBE(SYNTAX); を実行せよ。

 
(*訳者注:

こんな使い方も出来る;

(C1) infix("tama");

(D1)                                "TAMA"
(C2) x tama y:=sin(x*y);

(D2)                         x TAMA y := SIN(x y)
(C3) plot3d(x tama y,[x,-2,2],[y,-2,2]);

(D3)                                   0

この例では、tamaをinfixとして宣言し、それから関数tamaを定義している。定義した
後は普通に使える。但し、infixである事を忘れると次の例の様な現象で驚く;

(C4) %pi tama 1/2;

(D4)                                  0
(C5) %pi tama (1/2);

(D5)                                  1

(C4)では、(%pi tama 1)/2 <=> sin(%pi*1)/2が計算されているので0となる。
(C5)では、(%pi tama (1/2))<=>sin(%pi*(1/2))を計算する為、望む値が得られている。
*)

変数: INFLAG
デフォルト値:[FALSE] TRUEであれば、成分を取り出す関数はexpの内部形式で探す。 簡易化は式の再並び換えを行う事に注意する。それ故、FIRST(X+Y)はINFLAGがTRUEで あればX、INFLAGがFALSEならYとなる。(FIRST(Y+X)も同じ結果となる)。又、INFLAGを TRUEに設定し、PART/SUBSTPARTの呼び出しはINPART/SUBINPARTの呼出しと同じである。 INFLAGの設定によって影響を受ける関数は:PART,SUBSTPART,FIRST,REST,LAST,LENGTH, FOR ... IN構文,MAP, FULLMAP,MAPLIST,REVEALとPICKAPARTである。

関数: INPART (exp, n1, ..., nk)
PARTと似ているが、表示された書式ではなく式の内部表現に対して作用し、それ故、 表示の為の整形を行わない分、処理が速い。和や積(何故なら、内部書式で変数の 順序は屡々、表示されたものとは異なる)、と単一演算子(unary)のマイナス、減算と 割り算を扱う際(何故なら、これらの演算子は式から除去される為)、部分式の順序に 注意を払わねばならない。PART(X+Y,0)やINPART(X+Y,0)は+となるが、そうであっても、 演算子を参照する為には、それを"で囲まなければならない。 例えば、...IF INPART(D9,0)="+" THEN ...の様にする。

 
(C1)  X+Y+W*Z;
(D1)                  W Z + Y + X
(C2)  INPART(D1,3,2);
(D2)                  Z
(C3)  PART(D1,1,2);
(D3)                  Z
(C4) 'LIMIT(F(X)**G(X+1),X,0,MINUS);
                                      G(X + 1)
(D4)                      LIMIT   F(X)
                          X ->0-
(C5) INPART(%,1,2);
(D5)                            G(X + 1)


関数: ISOLATE (exp, var)
expを部分式で返し、その部分式は和と中間式ラベル(これらはE1,E2,...の様な原子的 記号である)で置き換えられたvarを含まないものである。これは往々にして、注目する 変数を含まない部分式の不必要な展開を避ける為に便利である。中間ラベルには部分式 が設定される為、それらが現われた式を評価する事で、それらを全て戻して代入する事 が可能である。

 
(*訳者注:

(C1) ISOLATE_WRT_TIMES;
(D1)                                 FALSE
(C2) ISOLATE(EXPAND((A+B+C)^2),C);

                                 2            2
(E2)                            B  + 2 A B + A

                                  2
(D2)                        E2 + C  + 2 B C + 2 A C
(C3)  ISOLATE_WRT_TIMES:FALSE;
(D3)                                 FALSE
(C4)  ISOLATE(EXPAND((A+B+C)^2),C);
                                  2
(D4)                        E2 + C  + 2 B C + 2 A C

*)

例題はEXAMPLE(ISOLATE);を実行せよ。

変数: ISOLATE_WRT_TIMES
デフォルト値:[FALSE] - TRUEであれば、ISOLATEはwrt積を孤立させる。例えば、 ISOLATE(EXPAND((A+B+C)^2),C);での両者のスイッチの設定を比較せよ。

 
(* 訳者注:

(C29)  EXPAND((A+B+C)^2);
                      2                    2            2
(D29)                C  + 2 B C + 2 A C + B  + 2 A B + A
(C30) ISOLATE_WRT_TIMES;
(D30)                                FALSE
(C31) ISOLATE(EXPAND((A+B+C)^2),C);

                                 2            2
(E31)                           B  + 2 A B + A

                                  2
(D31)                      E31 + C  + 2 B C + 2 A C
(C32)  ISOLATE_WRT_TIMES:TRUE;
(D32)                                TRUE
(C33)  ISOLATE(EXPAND((A+B+C)^2),C);

(E33)                                 2 A


(E34)                                 2 B

                                                  2
(D34)                      C E34 + C E33 + E31 + C
(C34) 

*)

変数: LISTCONSTVARS
デフォルト値:[FALSE] - TRUEであれば、%E,%PI,%Iと定数として宣言した任意の変数が LISTOFVARSを呼び出した式の中にあれば、LISTOFVARSが返すリストに含める。 デフォルトでこれらを除外する。

変数: LISTDUMMYVARS
デフォルト値:[TRUE] - FALSEであれば、式の"無効変数"はLISTOFVARSで返される リストの中に含まれない。("無効変数"とは、DESCRIBE(FREEOF);で説明されるもので あり、"無効変数"は数学的な物として、和や積での添字、極限変数や定積分変数の 様なものである)。

例:LISTOFVARS('SUM(F(I),I,0,N));はLISTDUMMYVARSがTRUEなら[I,N]、FALSEなら [N]である。

関数: LISTOFVARS (exp)
expの変数のリストを生成する。 LISTCONSTVARS[FALSE] TRUEであれば、%E,%PI,%Iと定数として宣言された任意の変数 がexpに現れれば、LISTOFVARSが返すリストに含められる。デフォルトではこれらを 除外している。

 
(C1) LISTOFVARS(F(X[1]+Y)/G**(2+A));
(D1)                            [X[1], Y, A, G]

関数: LOPOW (exp, v)
expで明示的に現われるvの最も低い指数。 つまり、
 
LOPOW((X+Y)**2+(X+Y)**A,X+Y) ==> MIN(A,2)
となる。

関数: LPART (label, expr, n1, ..., nk)
DPARTに似ているがラベル付けられた箱を用いる。ラベル付けられた箱はDPARTで生成 したものに似ているが上の行に名前がある点で違う。

関数: MULTTHRU (exp)
expの一つの因子(これは和でなければならない)とその他の因子との積を取る。 つまり、expがf1*f2*...*fnであれば、ここで少なくとも一つの因子、ここではfiが項 の和となる。その和の各項は、その他の項の積になっている。(名目上、fiを除く全て の因子となる)。MULTTHRUは羃乗された和の展開は行わない。この関数は和に対する (可換又は非可換)積の分配に関しては最も速い。商は積として表現されるので、 MULTTHRUは積で和の割り算も同様に使える。MULTTHRU(exp1,exp2)はexp2(和か方程式 でなければならない)の各項をexp1倍する。exp1がそれ自身和でなければ、この形式 はMULTTHRU(exp1*exp2)と同値である。

 
(C1) X/(X-Y)**2-1/(X-Y)-F(X)/(X-Y)**3;
               1        X         F(X)
(D1)       - ----- + -------- - --------
             X - Y          2          3
                     (X - Y)    (X - Y)
(C2) MULTTHRU((X-Y)**3,%);
                    2
(D2)       - (X - Y)  + X (X - Y) - F(X)
(C3) RATEXPAND(D2);
                           2
(D3)                    - Y  + X Y - F(X)
(C4) ((A+B)**10*S**2+2*A*B*S+(A*B)**2)/(A*B*S**2);
                         10  2              2  2
                (B  + A )   S  + 2 A B S + A  B
(D4)            --------------------------------
                                   2
                              A B S
(C5) MULTTHRU(%);
                                          10
                        2   A B   (B  + A)
(D5)                    - + --- + -------
                        S    2      A B
                            S

(上の式で(B+A)**10が展開されていない事に注意せよ。)

(C6) MULTTHRU(A.(B+C.(D+E)+F));
(D6)                A . F + A . (C . (E + D)) + A . B

(EXPANDの似た例題と比較せよ)

関数: NOUNIFY (f)
関数名fの名詞型を返す。もし、動詞関数の名前を名詞型であるかの様に参照したい 場合に必要とされる。幾つかの動詞型関数は、ある引数に対して評価が出来なかった 場合、それらの名詞型を返す事に注意せよ。関数の呼出しで引用符を頭に置いた場合 も、その名詞型か返される。

関数: NTERMS (exp)
全体的に展開されて、項の消去や結合が無いexpが持つ項の数を与える。SIN(E), SQRT(E),EXP(E)等の式では、Eが幾つ項を持とうが(それが和であっても)、ただ一つの 項として数えられる事に注意せよ。

関数: OPTIMIZE (exp)
expの様に同じ値と副作用を生成するが、共通の部分式の再計算を避ける事で、より 効率的に処理される式を返す。OPTIMIZEは全ての共通部分式を共用する為、その引数 を"潰してゆく"副作用を持つ。例題はEXAMPLE(OPTIMIZE);を実行せよ。

変数: OPTIMPREFIX
デフォルト値:[%] - OPTIMIZE命令によって生成された記号向けに使用される前置詞。

関数: ORDERGREAT (V1, ..., Vn)
変数V1,...,Vnに対し、 V1>V2>...>Vn>引数として言及されていない任意の他の変数となる順序を設定する。 ORDERLESSも見よ。注:幾つかの話題に関しては、EXAMPLE(ORDERGREAT);を実行せよ。

関数: ORDERGREATP (exp1,exp2)
ORDERGREAT関数(DESCRIBE(ORBDERGREAT);を見よ)で設定された順序で、exp2がexp1 よりも上であればTRUEを返す。

関数: ORDERLESS (V1, ..., Vn)
変数V1,...,Vnに対し、V1<V2<...<Vn<引数として言及していない他の変数となる様に 別名を設定する。それ故、完備な順序は、

 
数値定数<宣言された定数<宣言されたスカラー<ORDERLESSの最初の引数<...
<ORDERLESSの最後の引数<Aで始まる変数<...
<Zで始まる変数<ORDERGREATの最後の引数<...
<ORDERGREATの最初の引数<宣言されたMAINVAR
となる。

注:幾つかの話題に関してはEXAMPLE(ORDERLESS);を実行せよ。他の順序に関しては DESCRIBE(MAINVAR);を見よ。

関数: ORDERLESSP (exp1,exp2)
ORDERLESS命令によって設定された順序でexp1がexp2よりも上であればTRUEを返す。

関数: PART (exp, n1, ..., nk)
expの表示された形式を扱う。添字n1,...,nkによって指定されたexpの成分を得る。 expの最初のn1成分を得ると、次は、それのn2成分等々となる。その結果は、expの n1成分、それのn2成分,...,その前のnk成分となる。そこで、PART(Z+2*Y,2,1)は2と なる。PARTはリストの元や行列の行等を得る事にも使える。PART関数の最後の引数が 添字のリストであれば、幾つかの部分式が引掛り、各々がそのリストの添数に関連し たものとなる。それで、PART(X+Y+Z,[1,3])はZ+Xとなる。PIECEはPART関数を用いて 選んだ最後の式を保つ。関数の実行中に設定されると以下で見られる様に、その関数 自身を参照しても良い。PARTSWITCH[FALSE]はTRUEであれば、式の選んだ成分が存在し ない時にENDを返す、さもなければ、エラーメッセージが返される。 例題はEXAMPLE(PART);を実行せよ。

関数: PARTITION (exp, var)
二つの式のリストを返す。それらは(1)(expが積なら)expの因子分解、(expが和であれ ば)expの項か(expがリストならば)リストで各々varを含まないものと(2)因子、項、 リストで、各々varを含むものである。
 
(C1) PARTITION(2*A*X*F(X),X);
(D1)                 [ 2 A , X F(X) ]
(C2) PARTITION(A+B,X);
(D2)                 [ A + B , 0 ]
(C3) PARTITION([A,B,F(A),C],A); 
(D3)                [[B,C],[A,F(A)]]

変数: PARTSWITCH
デフォルト値:[FALSE] - TRUEであれば、式の選んだ部分が存在しなければENDが返さ れる。そうでなければエラーメッセージが与えられる。

関数: PICKAPART (exp,depth)
指定された整数の深さ迄のexpの全ての部分式をEラベルに割当てる。これは大きな 式を扱う場合、PART関数を使わずに式の成分に変数を自動的に指定する事に便利であ る。
 
(C1) EXP:(A+B)/2+SIN(X^2)/3-LOG(1+SQRT(X+1));
                                                 2
                                            SIN(X )   B + A
(D1)               - LOG(SQRT(X + 1) + 1) + ------- + -----
                                               3        2
(C2) PICKAPART(%,1);
(E2)                    - LOG(SQRT(X + 1) + 1)
                                    2
                               SIN(X )
(E3)                           -------
                                  3
                                B + A
(E4)                            -----
                                  2
(D4)                         E4 + E3 + E2


変数: PIECE
- PART関数を用いた時に選ばれた最後の式を保つ。その関数の実行中に設定され、 それ故、その関数自身の中で参照する事が出来る。

関数: POWERS (expr, var)
exprに現われる変数varの羃乗を与える。使う為にはLOAD(POWERS);を実行せよ。 利用法の詳細に関しては、PRINTFILE("powers.usg");を実行せよ。

関数: PRODUCT (exp, ind, lo, hi)
添字indのloからhi迄のexpの値の積を与える。 評価はSUMのそれと似ている。積の簡易化はこの時点では使えない。hiがloより一つで も少ないと"空の積"となり、PRODUCTはエラー出力ではなく1を返す。 DESCRIBE(PRODHACK)も参照せよ。
 
(C1)  PRODUCT(X+I*(I+1)/2,I,1,4);
(D1)             (X + 1) (X + 3) (X + 6) (X + 10)

関数: REALPART (exp)
expの実部を与える。REALPARTとIMAGPARTはSQRT,LOGと指数関数と同様に三角関数と 双曲関数を含む式に作用する。

関数: RECTFORM (exp)
A+B*%Iの形式の式を返す。ここで、AとBは実数である。

関数: REMBOX (expr, arg)
exprからargに沿ってboxを削除する。もしargがUNLABELEDであれば、全てのラベル付け されていないboxが削除される。もし、argがあるラベルの名前であれば、そのラベルを 伴うboxのみが削除される。argが省略されると、全てのラベル付けされたboxとされて いないものも削除される。

関数: SUM (exp, ind, lo, hi)
添字indのloからhi迄の値のexpの和を取る。上限と下限が整数で異なっていれば、和の 各々の項は評価されて互いに加えられる。一方で、SUMPSUM[FALSE]がTRUEであれば、 結果が簡易化される。簡易化は時々、閉形式の生成が可能である。SIMPSUMがFALSEか、 'SUMが用いられた場合には、値はsumの名詞型で、数学のΣ表記による表示が行われる。 hiがloよりも小さければ、"空の総和(empty sum)"となり、SUMはエラー出力ではなく 0を返す。SUMは微分、和、差や積が可能で、それらの自動的簡易化も行われる。 DESCRIBE(SUMHACK)も参照せよ。

@itemized @bullet

  • CAUCHYSUM[FALSE] TRUEであれば、和同士の掛け算で通常の積ではなくCauchy積が 利用される。Cauchy積では内部和の添字が独立に変化するのではなく、外部添数の 関数となる。

  • GENINDEX[I] 和の次の変数を生成するのに利用されるアルファベットの前置詞である。

  • GENSUMNUM[0] 和の次の変数を生成するのに用いられる数値的な修飾子である。 FALSEが設定されていれば、添字は数値の修飾子を持たないGENINDEXのみで構成されて いる。 例題はEXAMPLE(SUM)を実行せよ。SUMCONTRACT,INTOSUM,BASHINDICESとNICEINDICESも 参照せよ。
     
    (* 訳者注:
    
    SIMPSUMスイッチはデフォルトでFALSEである。以下に、SIMPSUMスイッチをFALSEの
    ままの場合とTRUEにした場合の違いを示す:
     
    (C18) SIMPSUM;
    (D18)                                FALSE
    (C19) SUM(x^n,n,0,m);
                                     m
                                       ====
                                       \n
    (D19)                               >x
                                       /
                                       ====
                                 n = 0
    (C20) SIMPSUM:TRUE;
    (D20)                                TRUE
    (C21) SUM(x^n,n,0,m);
                                       m + 1
                                      x      - 1
    (D21)                             ----------
                                        x - 1
    (C22) SUM(x^n,n,0,inf);
    Is  ABS(x) - 1  positive, negative, or zero?
    
    negative;
                                           1
    (D22)                                -----
                                         1 - x
    (C23) 
    
    (C24) SUM(x^n,n,0,inf);
    Is  ABS(x) - 1  positive, negative, or zero?
    
    zero;
    (D24)                              UNDEFINED
    (C25) SUM(x^n,n,0,inf);
    Is  ABS(x) - 1  positive, negative, or zero?
    
    positive;
    (D25)                                 INF
    
    この様にSIMPSUM:FALSEではSUM(x^n,n,0,m)の簡易化は実行されないが、SIMPSUM:TRUE
    で簡易化が実行される。又、SUM(x^n,n,0,inf)とすると、xの絶対値から1を引いた
    ものが正か負か零であるかを利用者が指定する事で簡易化が行える。
    *)
    
  • 特殊記号: VERB
    - "名詞"の逆の動詞型、つまり、"何かを成す"(多くの関数にとって通常の場合の "実行")関数型。例えば、INTEGRATEは"名詞"として宣言されていない時に限って 関数の積分を行い、そうでなければその関数の積分を表現する。NOUN、NOUNIFYと VERBIFYを参照せよ。
    関数: VERBIFY (f)
    関数名fをその動詞型で返す(VERB、NOUNとNOUNIFYも見よ)。

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by Hiroshi Yokota on September, 16 2002 using texi2html