Go to the first, previous, next, last section, table of contents.


代数的簡単化

a s コマンドは、常に実施するには遅すぎたり、 常には必要ないような簡単化を行います。 もしそこまでする程の価値があると判ったら、 m A とタイプして、Calc に自動実行させる事ができます。

本節では、a s コマンドで実行される全ての簡単化を解説します。 これはデフォルト簡単化に追加的に起こることに注意してください。 たとえ m O コマンドでデフォルト簡単化を止めてあっても、 a s が式を簡単化する間はデフォルト簡単化も再開します。

変数 AlgSimpRules があって、 a s で適用する書替え規則を置くことができます。 使い方は EvalRules に似ていますが、特別な制限はありません。 基本的に簡単化エンジンは、 簡単化される式全体に `a r AlgSimpRules' を繰返し無制限で実行し、 それから以下に解説する組込み規則群を適用します。 その結果が元の式と違っていたら再び簡単化手順が繰返されて、 デフォルト簡単化規則群(EvalRules も含む), 次に AlgSimpRules, 次に組込み簡単化規則群, ... というように適用されます。

-*- ちょっとひといき -*-

和は 2つの方法で簡単化されます。 定数項群は和の最後に移動され、a + 2 + ba + b + 2 になります。 唯一の例外は、差の先頭にある定数は移動しません。 つまり 2 - x-x + 2 にはなりません。

さらに、和の項は分配法則によりまとめられ、 x + y + 2 xy + 3 x になります。 この変換は隣合う項ならデフォルトでいつでも起こるものですが、 a s は隣合わないものも含めて全ての組合せを調べます。

-*- ちょっとひといき -*-

積は交換法則により正規順序にソートされます。 例えば b c a は入替わって a b c になります。 これで積どうしの比較が簡単になります。 例えば、 デフォルト簡単化では x y + y x2 x y になったりしませんが、 a s ではそうなります。 a s がまず x y + x y に書替えると、 それらが同一の項の和であることをデフォルト簡単化が認識できるようになるのです。

積の項を並べ替える正規順序とは、 数字, 区間型式, 無限大が(変数より)先に来て、昇順にソートされます。 V S コマンドは、ベクトル(リスト)をソートするとき同じ順序を使います。

matrix mode になっている時は、積の項のソートは禁止されています。 この場合、少なくとも 2項の片方がスカラーであることが判らない限り、 Calc は決して2項の順序を変えません。

べき乗の積は、 デフォルト簡単化における隣合う項と同じ方法であらゆる組合せを調べ、 まとめられます。

和はソートされないとはいえ、それでもなお 交換法則は積の項を調べる時に考慮されます。 それゆえ (x + y) (y + x)(x + y)^2 に簡単化されるのです。 微妙な点は、(x - y) (y - x)-(x - y)^2 に 簡単化されないということです。 Calc は片方の項が「定数×何か」と書けることに、 (その定数が -1 という簡単なものであっても)気付きません。

分数かける任意の式 (a:b) x は、 整数を使った商 a x / b に変えられます。 この変換はしかし、0.5 のような浮動小数では起こりません。 そう言うわけで、 代数をやる時には分数モード(Fraction mode) にすると便利かもしれません。 分数モード 参照 。

-*- ちょっとひといき -*-

商の簡単化は、分子の全ての項と分母の全ての項を比較し、 分配法則による約分可能性を探して行われます。 例えば、a x^2 b / c x^3 d は、分母分子から x^2 を約分して a b / c x d になります。 (そして分母の項は上述のとおり c d x にソートされます。) 分子と分母に共通の整数や分数の因子があれば、約分されます。 例えば、(4 x + 6) / 8 x(2 x + 3) / 4 x に簡単化します。

非定数の共通因子は、たとえ a s と言えども見つけられません。 (a x + a) / a^2a を約分するには、 まず積 a xj M を使って分子を a (1+x) にまとめると、 うまく簡単化することができます。

-*- ちょっとひといき -*-

変数 i の整数べき乗は、公式 i^2 = -1 に従って簡単化されます。 もし i に複素数 (0,1) 以外の値をストアしたら、 もはやこの簡単化は起こりません。 万一誰かが複素数に関係ない変数に(うかつにも) i という名前を使ってしまった場合に備え、 この簡単化はデフォルトではなく a s で行われます。 もしユーザーが思いもよらぬ理由で、 Calc がそっと自動的にこの式を変えてしまったら大変です。

整数の平方根や有理数の引数は幾つかの方法で簡単化されます。 (Symbolic mode でだけ、これらは評価せずに残されることに注意。) まず、sqrt(8)2 sqrt(2) と書かれるように、 整数や有理数の2乗が引き抜かれます。 概念的に言えば、 引数を素因数分解し、対になった素因数を平方根の外に出すのですが、 効率の点から Calc は 29 までしか素数を調べません。

商の分母の平方根は分子に移動させ、 1 / sqrt(3)sqrt(3) / 3 になります。 分数の平方根にも同じ効果があり、 sqrt(2:3)sqrt(6) / 3 になります。

-*- ちょっとひといき -*-

% (剰余)演算子は、法(modulus) M が正の実数のとき、 幾つかの方法で簡単化されます。 まず、引数がある実数 n について x + n 形式であれば、 n はくり下がって M の剰余になります。 例えば、`(x - 23) % 10'`(x + 7) % 10' に簡単化されます。

引数が定数との積であって、この定数が法(modulus) と整数の公約数を持っていれば、 この定数は約分されます。 例えば、`12 x % 15' は 3 をくくり出して `3 (4 x % 5)' になります。 また、`(12 x + 1) % 15'`3 ((4 x + 1:3) % 5)' に変えられます。 これらの形式は「より簡単」には見えないかも知れませんが、 Calc においては宣言下の剰余型式に関する 有用な情報を見出す助けとなるのです。

法(modulus) が 1 であれば、Calc は 式評価のため int 宣言を利用します。 例えば常套句 `x % 2' は、ある数が奇数か偶数かを調べるのに頻繁に使われます。 `2 n % 2'`(2 n + 1) % 2' は、上に述べたように、 それぞれ `2 (n % 1)'`2 ((n + 1:2) % 1)' に簡単化されます。 Calc は、もし n が整数であると宣言されていれば、 これらをそれぞれ 0 と 1 に簡単化できます。

-*- ちょっとひといき -*-

三角関数の簡単化規則はいくつかあります。 まず、sin(arcsin(x))x に簡単化され、 そして costan も同様です。 sin の 引数が負に見える場合は -sin(x) に簡単化され、 そして costan も同様です。 最後に、引数として特殊な値が認識されます。 Trigonometric/Hyperbolic Functions 参照 。

sin(arccos(x))sqrt(1 - x^2) にする場合のように、 逆三角関数の別の三角関数をとったものも簡単化できます。

ハイパボリック関数においても、 逆関数引数や負に見える引数が (逆関数の指数関数として) 同じく処理されます。

逆三角関数や、逆ハイパボリック関数の簡単化規則は、負に見える引数における arcsin, arctan, arcsinh, arctanh しか知られていません。 arcsin(sin(x))x にするのは 安全であって、 これが成り立つのは ラジアンか 360deg の整数倍の範囲内に限られることに注意してください。 しかしながら、arcsinh(sinh(x)) は、 x が実数である事が判っていれば x に簡単化されます。

対数と指数関数には次の簡単化規則群が適用されます。

誤差関数 erferfc は 引数が負に見えたり、引数が conj 関数呼出しのとき簡単化されます。

-*- ちょっとひといき -*-

等式や不等式は、両辺の積, 商, 和の因子を相殺することにより簡単化されます。 不等式は、負の掛け算因子が相殺されたら向きを変えます。 a b = a c に見られる非定数の掛け算因子が相殺されるのは、 その因子がゼロでないことが確実な場合に限られます (普通はそのように宣言されています; 宣言 参照 )。 不等式の因子が相殺されるのは、それがゼロでなく、 かつ正負が判っているときに限られます。

簡単化規則は、宣言の利用によって可能ならば、 ある等式や不等式を 1 か 0 (「真」か「偽」) で置換えることもします。 x が 5 より大きい整数と宣言されていれば、 x < 3, x = 3, x = 7.5 は全て 0 に簡単化されますが、 x > 3 は 1 になります。 似たような解析により、abs(x) >= 0 は 1 に簡単化されます。 x が実数と判っていれば、x^2 >= 0 も 1 になります。


Go to the first, previous, next, last section, table of contents.     利用度数