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

19. 色々な演算子

19.1 NARY  
19.2 NOFIX  
19.3 演算子  
19.4 POSTFIX  
19.5 PREFIX  
19.6 演算子に関する諸定義  


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

19.1 NARY

- NARY(中置)演算子は任意の個数の引数を持ち、この演算子によって、例えば、 A+BやA+B+Cの"+"の様に、これらの引数が各々分離される関数を記述する為に用い られる。NARY("x")はxをNARY演算子として宣言するものである。より詳細は DESCRIBE(SYNTAX)を参照せよ。関数をNARY(中置演算子)として宣言しても良い。 DECLARE(J,NARY);を実行すればJ(J(A,B),J(C,D))をJ(A,B,C,D)の様に簡易化が行える。


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

19.2 NOFIX

- NOFIX演算子は引数を持たない関数である事を示す為に用いられる。この様な演算子 が命令に存在するだけで関連する関数が評価される事がある。例えば、MACSYMA break から抜ける為に"exit;"と入力すると、"exit"はNOFIX演算子と似た振舞いをする。 関数NOFIX("x")は構文拡張関数でxがNOFIX演算子であると宣言する。詳細は DESCRIBE(SYNTAX);を参照せよ。


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

19.3 演算子

- 色々な演算子を参照せよ。


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

19.4 POSTFIX

- POSTFIX(後置)演算子は単一の引数を持つ関数である事を示すPREFIX(前置)演算子に 似ている、しかし、引数は入力行で3!の様に演算子の前に置かれる。 関数POSTFIX("x")は構文拡張関数であり、xが後置演算子であると宣言する。 詳細はDESCRIBE(SYNTAX);を参照せよ。


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

19.5 PREFIX

- PREFIX(前置)演算子は、その演算子が一個の引数を持ち、引数が演算子の直後に 置かれる事を示す。関数PREFIX("x")は構文拡張関数で、xが前置演算子であると宣言 する。詳細はDESCRIBE(SYNTAX);を参照せよ。


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

19.6 演算子に関する諸定義

演算子: "!"
階乗演算子であり、1から引数までの全ての整数の積を計算する。例えば、5!は 1*2*3*4*5=120となる。オプション変数FACTLIMの値(デフォルト値:[-1])が-1の場合、 全ての整数が自動的に展開されて階乗が計算される。FACTORIAL,MINFACTORIALと FACTCOMB命令も参照せよ。

演算子: "!!"
二重階乗であり、奇数(又は偶数)の引数に対し、1(又は2)から引数迄の全ての奇数 (偶数)の積として定義されている。従って、8!!は2*4*6*8=384となる。

 
(*訳者注:

7の場合

(C1) 7!!;

(D1)                                 105
(C2) 1*3*5*7;

(D2)                                 105

*)

演算子: "#"
この論理演算子は"等しくない"事を示す。

演算子: "."
DOT演算子は行列に対する(非可換)積となる。"."をこの意味で用いる場合、A . Bの様 に両側にspaceを置くべきである。この様にする事で小数点と区別する事が容易になる。 DOT演算子に影響する各種スイッチのリストに関してはAPROPS(DOT);を実行せよ。 DESCRIBE(switch-name);でそれらの説明が読める。

演算子: ":"
割当を行う演算子。例えば、A:3で変数Aに3を割当てる。

演算子: "::"
割当を行う演算子。::は一つの原子変数や下添字付けられた変数に対して評価しなけ ればならない左辺の値として右辺の式の値を割当てる。

演算子: "::="
":="の代りに関数の定義では無く、マクロの定義が続く事を示す為に用いられる。 DESCRIBE(MACROS)を参照せよ。

演算子: ":="
関数定義の演算子。例えば、F(x):=SIN(x)で関数Fを定義する。

演算子: "="
MACSYMAでの等号を示す。MACSYMAのパターン照合機能に対し、等号で結ばれる二つの 式の間に存在する全ての関係が構文的に同一であり、その時に限る事を示す。

特別記号: ADDITIVE
- DECLARE(F,ADDITIVE)が実行されると以下の性質がFに付加される;

但し、FをSUM(X[I],I,下限,上限)の形式の式に対して作用させる場合、上述の(1),(2) の簡易化は実行されない。

キーワード: ALLBUT
PART命令系(つまり. PART,INPARTZ,SUBSTPART,SUBSTINPART,DPART,LPART)と共に動作 する。

 
例えば;

EXPRがE+D+C+B+Aの時、PART(EXPR,[2,5]);を実行すればD+Aが返される。

更に、
 
PART(EXPR,ALLBUT(2,5))を実行するとE+C+Bが返される。

これはKILL命令と一緒に使う事も可能である。

 
KILL(ALLBUT(name1,...,namek))

これはKILL(ALL)を指定した名前を除外して行う。

注意:nameiはU,F,FOOやGの様な関数名でFUNCTIONSを実行して得られるリストでは 無い。

変数: ANTISYMMETRIC
- DECLARE(H,ANTISYMMETRIC);が実行されると、Hは丕対称として簡易化される。例え ば、H(X,Z,Y)は-H(X,Y,Z)へと簡易化される。即ち、SYMMETRICかCOMMUTATIVEで得ら れた結果に対し、その式に合せる為に引数同士を互いにn回交換して(-1)^n倍したもの となる。

関数: CABS (exp)
複素数の絶対値を返す。

宣言: COMMUTATIVE
- DECLARE(H,COMMUTATIVE);が実行された場合、Hは可換関数として簡易化される。 即ち、H(X,Z,Y)はH(X,Y,Z)となる。これはSYMMETRICと同じである。

関数: ENTIER (X)
Xが実数の場合、Xを越えない最大の整数n(>=x)を返す。FIXはこれと同じ物で、 FIX(X);を実行しても同一の結果を返す。

 
(* 訳者注:

(C1) entier(10.1);
(D1)                                  10
(C2) entier(-10.1);
(D2)                                 - 11
(C3) fix(10.1);
(D3)                                  10
(C4) fix(-10.1);
(D4)                                 - 11

この様に、絶対値で越えない数を返すのでは無い事に注意せよ。
*)

関数: EQUAL (expr1,expr2)
"IS"と一緒に使われ、expr1とexpr2が(RATSIMPで指定された)全ての可能な変数値に 対して等しい(又は等しくない)場合、又、その時に限ってTRUE(又はFALSE)を返す。 それ故、Xが不定元であってもIS(EQUAL((X+1)**2,X**2+2*X+1))はTRUEを返す一方で、 IS((X+1)**2=X**2+2*X+1)はFALSEを返す。又、IS(RAT(0)=0)はFALSEだが、 IS(EQUAL(RAT(0),0))はTRUEとなる事にも注意せよ。もし、EQUALで判別出来ない場合、 同値だが簡易化された形式で返されるが、"="を使っていれば常にTRUEかFALSEが返さ れる。式中の全ての変数は実数値であると予め仮定されている。EV(exp,PRED)は IS(exp)と同値である。

 
(C1) IS(X**2 >= 2*X-1);
(D1)                               TRUE
(C2) ASSUME(A>1);
(D2)                               DONE
(C3) IS(LOG(LOG(A+1)+1)>0 AND A^2+1>2*A);
(D3)                               TRUE

関数: EVAL
式の評価を行う。

関数: EVENP (exp)
式expが偶数ならばTRUE、その他はFALSEを返す。

関数: FIX (x)
ENTIER(X)と同じ働きをし、Xが実数の場合はXを越えない最大の整数を返す。

 
(* 訳者注:

(C9) FIX(10);
(D9)                                  10
(C10) FIX(-10);
(D10)                                - 10
(C11) FIX(-10.5);
(D11)                                - 11
(C12) FIX(10.5);
(D12)                                 10
(C13) ENTIER(10);
(D13)                                 10
(C14) ENTIER(-10);
(D14)                                - 10
(C15) ENTIER(-10.5);
(D15)                                - 11
(C16) ENTIER(10.5);
(D16)                                 10
(C17) 
 
この様に、Xを越えない整数が返されているが、負の場合には絶対値に対してでは無く、
通常の大小関係で返される事に注意せよ。

関数: FULLMAP (fn, exp1, ...)
MAPと似ているが、全ての部分式で主演算子が全て以前と同じでなくなる迄fnを式exp に作用させる。ここで使用者はFULLMAPがMACSYMAのある行列操作の簡易化で利用され ている事に注意しなければならない。それ故、たとえFULLMAPが利用者によって明示的 に呼出されていなくても、FULLMAPに関連するエラーメッセージが出る事がある。

 
(C1) A+B*C$
(C2) FULLMAP(G,%);
(D2)              G(B) G(C) + G(A)
(C3)  MAP(G,D1);
(D3)                G(B C) + G(A)

 
(* 訳者注:

尚、利用者が定義した演算子の場合、主演算子とは認めていない。

(C17) NARY("MIKE");
(D17)                               "MIKE"
(C18) A+B*C MIKE D$
(C19) FULLMAP(G,%);
(D19)                     G(B) G(C) MIKE G(D) + G(A)
(C20) MAP(G,D18);
(D20)                        G(B C MIKE D) + G(A)
(C21) x MIKE y := ABS(1-x*y);
(D21)                      x MIKE y := ABS(1 - x y)
(C22) 0.1 MIKE 0.4;
(D22)                                0.96
(C23) FULLMAP(G,D18);
(D23)                     G(B) G(C) MIKE G(D) + G(A)
(C24) 

この例の様にMIKEをNARY命令で単純に中置演算子と宣言してもFULLMAPで置換されない。
又、(C21)で関数として定義していてもFULLMAPでは置換されていない。

関数: FULLMAPL (fn, list1, ...)
FULLMAPに似た働きをするが、リストと行列に対してのみ写像(Mapping)を行う。

 
(C1) FULLMAPL("+",[3,[4,5]],[[A,1],[0,-1.5]]);
(D1)                      [[A + 3, 4], [4, 3.5]]

(* 訳者注:
FULLMAPLは制限付きのFULLMAPであるが、FULLMAP自体がMAXIAのデータの階層構造を利用
している。これはリストの章で述べている様に、MAXIMAのデータは先頭にそのデータの
形式や命令表現を示す演算子等があり、それを単純に取り換える事を行っている。
*)

関数: IS (exp)
exp(述語に対し評価されねばならないもの)が、その時点のデータベースに含まれてい る事象に適合するかどうかを判別する。ISがTRUEと返すのは、述語に含まれる変数に 関してデーターベースに含まれる全ての値で述語がTRUEとなる場合で、そうでない場合 はFALSEを返す。それ以外はPREDERRORスイッチ(デフォルト値:TRUE)の設定に依存する。 ISはPREDERRORがTRUEの場合はエラーを出力を行い、PREDERRORがFALASEであれば UNKNOWNを返す。

関数: ISQRT (X)
一つの整数引数を取り、その整数の絶対値で"整数値の平方根"を返す。

 
(* 訳者注:

(C1) isqrt(-3);

(D1)                                   1
(C2) isqrt(-4);

(D2)                                   2
(C3) isqrt(10);

(D3)                                   3

となっており、 

MYISQRT(x) := BLOCK(LOCAL(a), 
                    a : FIX(BFLOAT(SQRT(ABS(x)))), 
                    RETURN(a));

で表現される関数と同じ動作をする。

関数: MAX (X1, X2, ...)
引数が実数の場合はその最大値を返す(又は、引数中に非実数が含まれている場合は 簡易化した形式を返す)。

関数: MIN (X1, X2, ...)
引数が実数の場合はその最小値を返す(又は、引数中に非実数が含まれている場合は 簡易化した形式で返す)。

関数: MOD (poly)
多項式polyを大域変数MODULUSで指定した値に対し、その剰余を計算する。もし、 大域変数のMODULUSに設定したものとは別の値を用いたければ、MOD(poly,m)で MODULUSにmを指定してpolyの剰余を計算する。DESCRIBE(MODULUS);を参照せよ。

 
(* 訳者注:
MODULUSに3を設定して、剰余の計算を行う。尚、MODULUSのデフォルト値はFALSEで、
MODULUSに値を設定せずにMOD(x+3)の様にMODULUSを設定せずに実行するとエラーが
出るので注意せよ。

(C1) MODULUS:3;

(D1)                                   3
(C2) mod(x^2+3);

                                       2
(D2)                                  x
(C3) mod((x+1)^3);

                                     3
(D3)                                x  + 1
(C4) mod((x+1)^2,2);

                                     2
(D4)                                x  + 1
(C5) MODULUS;

(D5)                                   3

尚、(C4)で剰余環をZ2としたが、MODULUSの値はこの操作によって書換えられないので
安心して使って良い。
*)

関数: ODDP (exp)
もしもexpが奇数であればTRUEを返し、それ以外はFALSEを返す。

演算子: PRED
述語(TRUEかFALSEで評価される式)が評価される原因となるEVFLAGである。

関数: RANDOM (X)
0とX-1の間の整数の乱数を返す。もし、引数が無い場合、-2^(29)から2^(29)の間の 整数の乱数を返す。XがFALSEならば、乱数列は頭から並べなおす。引数を与えなかっ た時の返り値の範囲はPDP-10とMultics上のMACSYMAで異なる。

Multicsの場合、-2^(35)と2^(35)の範囲となる。この範囲はMACSYMAの土台となるLISP のFIXNUMの範囲でもある。

 
(* 訳者注:

少なくとも、GCLとCLISP上のMAXIMA 5.4,5.5及び5.6では引数無しでは使えない。

(C26) RANDOM;
(D26)                               RANDOM
(C27) RANDOM(10);
(D27)                                  1
(C28) RANDOM(10.2);
(D28)                          0.853747594277

*)

関数: SIGN (exp)
指定した式の符号を評価する。この符号はSIGNを実行する迄に入力した事象を基に 評価される。尚、計算結果として返って来る値はPOS(正)、NEG(負)、ZERO、PZ (零以上)、NZ(零以下)、PN(正、又は負)、及びPNZ(正、負又は零、即ち、判別不能) である。
関数: SIGNUM (X)
X<0ならば-1、X>0であれば1、それ以外は0を返す。もしもXが数値でなければ、簡易化 されているが同値な形式で返される。例えば、SIGNUM(-x)の場合は-SIGNUM(x)となる。

関数: SORT (リスト,オプションの述語)
二つの引数の適切なオプションの述語(例えば、"<"やORDERLESSP)を用いてリストの 並び換えを行う。このオプションの述語が与えられていなければ、MACSYMAの組込み 順序述語が用いられる。

関数: SQRT (X)
Xの平方根であり、内部的にはX^(1/2)で表現されている。ROOTCONTRACTも見よ。 RADEXPAND[TRUE] - TRUEであれば、因子のn乗根の積でn乗のものを根号の外に出す。 例えば、SQRT(16*X^2)はRADEXPANDがTRUEの場合に限って4*Xとなる。

変数: SQRTDISPFLAG
デフォルト値: [TRUE] - FALSEであれば、SQRTは1/2乗の形式で表示される。

 
(* 訳者注:

(C1) SQRTDISPFLAG;

(D1)                                 TRUE
(C2) sqrt(x);

(D2)                                SQRT(x)
(C3) SQRTDISPFLAG:FALSE;

(D3)                                 FALSE
(C4) sqrt(x);

                                      1/2
(D4)                                 x

この様にsqrt(x)の表記が代る事に注意。
*)

関数: SUBLIS (list,expr)
式に複数の代入を並行して行なう。

 
構文例:

        SUBLIS([A=B,B=A],SIN(A)+COS(B));
         => SIN(B) + COS(A)

(* 訳者注:

上のSUBLISでは、リスト[A=B,B=A]でSIN(A)+COS(B)の中に現われるAをBに、BをAに相互
に入れ換えている事に注意。

*)
変数SUBLIS_APPLY_LAMBDA[TRUE]はSUBLISを実行した後の簡易化を制御する。 詳細はSHARE2;SUBLISのINFOを参照せよ。

関数: SUBLIST (L,F)
関数FがTRUEを返すリストLの元のリストを返す。例えば、SUBLIST([1,2,3,4],EVENP); は[2,4]を返す。

 
(* 訳者注:

SUBLIST([1,2,3,4],EVENP)の例では、リスト[1,2,3,4]からEVENPに適合する偶数の
リスト[2,4]を返している。ここで、EVENP(X)はXが偶数ならばTRUE、それ以外は
FALSEを返す関数である。

*)

変数: SUBLIS_APPLY_LAMBDA
デフォルト値:[TRUE] - SUBLISを用いた後に簡易化でLAMBDAによる代入を行うかどう か、作用させるべき物を得る為にEVを実行しなければならないかどうかを制御する。 TRUEであれば、この操作の遂行を意味する。

関数: SUBST (a, b, c)
cの中のbをaで置き換える。ここでbは原子か、cに完全に含まれる部分式でなければ ならない。例えば、X+Y+Zは2*(X+Y+Z)/Wに完全に含まれる部分式であるが、X+Yは そうではない。bがこれらの特徴を持たなければ、時にはSUBSTPARTかRATSUBST (以下を参照せよ)を使っても良い。他にbがe/fの様な形式であればSUBST(a*f,e,c) が使え、同様にbがe**(1/f)の形式であれば、SUBST(a**f,e,c)が使える。

このSUBST命令はX^-YでX^Yを認識するので、SUBST(A,SQRT(X),1/SQRT(X))は1/Aとなる。 aとbはまた"で括られた式の演算子や関数名でも良い。微分形式での独立変数に代入を 行う場合、AT関数(以下を見よ)を利用すべきである。

注意: SUBSTはSUBSTITUTEの別名である。SUBST(eq1,exp)やSUBST([eq1,...,eqk],exp) は他の可能な代入形式である。各eqiは指定した代入が実行されるべき等式である。 各々の等式でその右側が式expの左側に代入される。

EXPTSUBST[FALSE] TRUEであれば%E**(A*X)の%E**XをYで置き換える操作が可能になる。

OPSUBST[TRUE]はFALSEであれば、SUBSTは式に含まれる演算子に対して代入を行わない。 つまり、(OPSUBST:FALSE, SUBST(X^2,R,R+R[0]));を実行すると、R+R[0]の左側のRに は代入されるが、R[0]のRには代入されない。

 
(C1) SUBST(A,X+Y,X+(X+Y)**2+Y);
                                 2
(D1)                    Y + X + A
(C2) SUBST(-%I,%I,A+B*%I);
(D2)                             A - %I B

(注:C2の方法は共役複素数を求める一つの方法である)。より多くの例は EXAMPLE(SUBST);を実行した結果を参照。

関数: SUBSTINPART (x, exp, n1, ...)
SUBSTPARTに似ているが、expの内部式に対して作用する。
 
(C1) X.'DIFF(F(X),X,2);
                                   2
                                  d
(D1)                         X . (--- F(X))
                                    2
                                  dX
(C2) SUBSTINPART(D**2,%,2);
                                      2
(D2)                             X . D
(C3) SUBSTINPART(F1,F[1](X+1),0);
(D3)                            F1(X + 1)

              追加情報
PART関数の最後の引数が添字のリストであれば、幾つかの部分式が取り出され、各々
はそのリストの添字に関連するものである。それ故、PART(X+Y+Z,[1,3])はZ+Xとなる。

PIECEはPART関数を用いた時に選ばれた最後の式の値を保つ。その関数の実行中に設定
され、それ故に、その関数でそれ自体を以下に見る様に参照しても良い。

PARTSWITCH[FALSE]がTRUEに設定されていれば、存在しない式の成分を選択した場合、
ENDが返され、それ以外ではエラーメッセジが与えられる。

(C1)  27*Y**3+54*X*Y**2+36*X**2*Y+Y+8*X**3+X+1;
            3         2       2            3
(D1)    27 Y  + 54 X Y  + 36 X  Y + Y + 8 X  + X + 1
(C2)  PART(D1,2,[1,3]);
                  2
(D2)          54 Y
(C3)  SQRT(PIECE/54);
(D3)            Y
(C4)  SUBSTPART(FACTOR(PIECE),D1,[1,2,3,5]);
                          3
(D4)           (3 Y + 2 X) + Y + X + 1
(C5) 1/X+Y/X-1/Z;
                                 1   Y   1
(D5)                           - - + - + -
                                 Z   X   X
(C6) SUBSTPART(XTHRU(PIECE),%,[2,3]);
                                Y + 1   1
(D6)                            ----- - -
                                  X     Z

又、オプションのINFLAGをTRUEに設定してPART/SUBSTPARTを呼出す事は、 INPART/SUBSTINPARTを呼出す事と同じである。

関数: SUBSTPART (x, exp, n1, ..., nk)
PART関数の様に引数の残り(訳者注:n1,...,nkの事)で抜き出した部分式にXを代入 する。expの新しい値を返す。Xはexpの演算子として代入されるべきものでも良い。 場合によっては"で括られていなければならない (例えば、SUBSTPART("+",A*B,0); -> B + A)。

 
(C1) 1/(X**2+2);
                                    1
(D1)                              ------
                                   2
                                  X  + 2
(C2) SUBSTPART(3/2,%,2,1,2);
                                    1
(D2)                             --------
                                  3/2
                                 X    + 2
(C3) A*X+F(B,Y);
(D3)                          A X + F(B, Y)
(C4) SUBSTPART("+",%,1,0);
(D4)                         X + F(B, Y) + A

(* 訳者注:

(C2)の代入では1/(X**2+2)の内部形式を利用し、その内部の2,1,2で指定される要素を
入れ換えている。内部形式はLISPのS式による表現(/ 1 (+ (** x 2) 2 )に似たもので
ある(実際は演算子が例えば、"+"が(mplus)と原子のリストになっている程度で本質的
な構造は同じ)。実例での2,1,2の意味はこの内部形式の階層構造に関連する。

先頭の2が内部形式のリストの2番目の元を意味するが、内部形式で先頭が演算子となる
ので実際は1を加えたものが対応する。従って、3番目の成分(+ (** x 2) 2)となる。
次の1は同様に(** x 2)、2で、このリストの2番目の引数2が対応し、それを3/2に変更
する為、最終的に1/(x**(3/2)+2)となる。ここで0が演算子となるので、0を指定すれば
一番上の"+"が対応する。

(C15) a:1/(X**2+2);

                                      1
(D15)                               ------
                                     2
                                    X  + 2
(C16)  SUBSTPART("*",a,0);

                                     2
(D16)                               X  + 2
(C17)  SUBSTPART("*",a,2,0);

                                      1
(D17)                                ----
                                        2
                                     2 X

又、この階層を利用すれば、成分の入れ替えも可能である。

(C22) SUBSTPART("SIN(X)+COS(Y)+2",a,2,1);

                                       1
(D22)                         -------------------
                              SIN(X)+COS(Y)+2 + 2

この例では、X^2をSIN(X)+COS(Y)で置き換えている。

オプションのINFLAGをTRUEにし、PART/SUBSTPARTを用いる事はINPART/SUBSTINPARTを 直接利用する事と同じである。

関数: SUBVARP (exp)
exppがA[I]の様に添字された変数の場合、TRUEを返す。

関数: SYMBOLP (exp)
"exp"が"symbol"か"name"の場合はTRUE、それ以外はFALSEを返す。即ち、動作は SYMBOLP(X):=ATOM(X) AND NOT NUMBERP(X)$である。

関数: UNORDER ()
順序付けの命令ORDERGREATとORDERLESSによる指定を止める。UNORDERを呼出さずに ORDERGREATとORDERLESSを一度以上利用してはならない。

詳細はDESCRIBE(ORDERGREAT);とDESCRIBE(ORDERLESS);の実行に加え、 EXAMPLE(UNORDER);を実行せよ。

関数: VECTORPOTENTIAL (givencurl)
その時点の座標系で与えられたcurlベクトルのポテンシャルを返す。 POTENTIALZEROLOCはPOTENTIALと同様の作用をする。しかし、方程式の左辺の順序は 座標系変数の巡回置換でなければならない。

関数: XTHRU (exp)
exp(和でなければならない)の全ての項を積や指数の和をRATSIMPが行う様に展開せずに 共通の分母で纏める。XTHRUは分子と分母の通分(共通因子の消去)を因子が明示的な場合 のみに行う。RSTASIMPを行う前にXTHRUを用いるとより良い。と云うのも、RATSIMPすべ き式の分子と分母との明示的な因子であるGCDを通分してRATSIMPで簡易化される為であ る。

 
(C1) ((X+2)**20-2*Y)/(X+Y)**20+(X+Y)**-19-X/(X+Y)**20;
                                                20
                     1           X       (X + 2)   - 2 Y
(D1)             --------- - --------- + ---------------
                        19          20             20
                 (Y + X)     (Y + X)        (Y + X)
(C2) XTHRU(%);
                                     20
                              (X + 2)   - Y
(D2)                          -------------
                                       20
                                (Y + X)
 

関数: ZEROEQUIV (exp,var)
変数varで式expが零と同値であるか検査する。結果はTRUE、FALSE、或いはDONTKNOW である。例えば、ZEROEQUIV(SIN(2*X)-2*SIN(X)*COS(X),X)はTRUE、 ZEROEQUIV(%E^X+X,X)はFALSEとなる。その一方で、 ZEROEQUIV(LOG(A*B)-LOG(A)-LOG(B),A)はDONTKNOWとなる。これは特別な助変数 (この場合はB)が存在する為である。


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

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