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


代数的操作

本節のコマンド群は汎用の代数的操作を行います。 スタック top の式全体に作用します (もちろん、その式をセレクションしていない場合)。

代数コマンド群の多くはプロンプトを出して変数名や式の入力を促します。 プロンプトに空入力で答えると、変数や式はスタック top から取られ、 引数は 2番目のスタックレベルから取られます。

a v (calc-alg-evaluate) コマンドは、 デフォルト簡単化機能を式に作用させます。 例えば、`a - -b'`a + b' に変換されます。 この簡単化は普通 Calc のあらゆる結果に自動的になされますから、 このコマンドが意味を持つのは m O コマンドで デフォルト簡単化機能を止めている時に限られます。 簡単化モード 参照 。

a v に似た = は、しばしばもっと便利ですが、 変数をストアされた値に置換えてしまいます。 ストアされた値を無視して、 変数のままにして置きたければ a v を使ってください。

a v に数値接頭引数として 2 を与えると、 あたかも代数的簡単化モードであるかのように簡単化します。 これは a s をタイプするのと同等です(式の簡単化 参照 )。 3 以上の数値接頭引数を与えると、 拡張簡単化モード (a e) を使います。

負の数値接頭引数 -1, -2, -3 を付けると、 式の第1レベルの関数呼び出しだけを対応するモードで簡単化します。 例えば、`(2 + 3) * (2 + 3)'`(2 + 3)^2' に簡単化され、 サブ数式 `2 + 3' は簡単化されません。 別の例としては、ベクトル `[1, 2, 3, 4]' の合計を得るのに V R + を タイプすると、非簡単化モードでは `reduce(add, [1, 2, 3, 4])' となります。 a v を使うと全部簡単化して 10 になりますが、 C-u - a v では `1 + 2 + 3 + 4' までしか簡単化しません。 (Reducing and Mapping Vectors 参照 。)

= コマンドは evalv 関数に対応します。 仲間の N コマンドは evalvn 関数に対応し、 = に似ていますが、 評価の最中に一時的に symbolic mode (m s) を抑制します。 (これらのコマンドは数値接頭引数を a v とは異なる意味に解釈します。 = は接頭値を一度に作用すべきスタックの数として扱い、 N は一時的な別の計算精度として解釈します。)

evalvn 関数は、省略可能(optional)な第2引数として、 別の計算精度を受取ることができます。 この引数が、整数であれば精度を直接設定し、 ひとつの整数を含むベクトルであれば現在の計算精度から相対的に調整します。 注意: 現行よりも高精度の時、evalvn はその高い精度で計算を行いますが、 計算結果は相変らず元の精度に丸められます。 例えば、 精度 12桁で `evalvn(pi - 3.1415)'`9.265359e-5' を返しますが、 `evalvn(pi - 3.1415, 30)' は(25桁の計算結果がその後 12桁に丸められて) `9.26535897932e-5' を返し、 `evalvn(pi - 3.1415, [-2])'`9.2654e-5' を返します。

a " (calc-expand-formula) コマンドは、 関数をその定義式に可能な限り展開します。 例えば、`deg(x^2)'`180 x^2 / pi' に変換されます。 singcd のような大抵の関数は、 単純な式で定義されていませんから、このコマンドの影響を受けません。 展開可能な関数のなかで重要なのは、 Z F コマンドで作られたユーザー定義関数です。 Programming with Formulas 参照 。 a " で展開可能な他の関数には、確率分布関数, ほとんどの財務関数, ハイパボリックおよび逆ハイパボリック関数などがあります。 a " に数値接頭引数を付けると、a v と同じように解釈されます。 正の引数では式中の全ての関数を展開した後それぞれの方法で簡単化し、 負の引数では第1レベルのみ展開し簡単化します。

a M (calc-map-equation) [mapeq] コマンドは、 指定された関数や演算子をひとつ以上の方程式に作用させます。 方程式ではなくベクトルに作用する V M に相似しています。 Reducing and Mapping Vectors 参照 。 例えば、 a M S`x = y+1'`sin(x) = sin(y+1)' に変えるし、 `x = y+1'6 がスタックに置かれた状態で a M + とすると `x+6 = y+7' になります。 2つの方程式がスタックに置かれている時 a M + とすると、 左辺どうし, 右辺どうしを足し合せて新しい方程式が得られます。

マッピングは不等式でも有効です。 2つの類似の不等式をマッピングすると、もう1つの同タイプの不等式を生成します。 不等式と方程式をマッピングすると、同タイプの不等式を生成します。 `<='`<'`!=' (not-equal) とマッピングすると、 `<' になります。 向きが反対の不等式(例えば、`<'`>') がマッピングされたら、 2番目の不等式の方向は 1番目に合わせて反転されます。 `a < b'`a > 2'a M + を使うと、 後者を反転して `2 < a' を得、 それから結合して `a + 2 < b + a' になります。 これを a s コマンドで簡単化すると `2 < b' が得られます。

a M *, a M /, a M n, a M & などを使って、 不等式をサインチェンジしたり逆数にしたりすると、 その不等式の向きが逆になります。 それ以外の不等式の調整は自動的には なされません。 常に成立つわけではないにもかかわらず、 a M S`x < y'`sin(x) < sin(y)' に変換してしまいます。

ハイパボリック・フラグを付けた H a M [mapeqp] は、 不等式の方向をどんな場合も調整せずに素のマッピングを行います。 従って、H a M &x > 21/x > 0.5 に変換します。 (この変換は数学上正しくありませんが、 既に壊れていた不等式を修理するのだと考えましょう。)

インバース・フラグを付けた I a M [mapeqr] は、 常に不等式の方向を逆転します。 与式が `x < y' で、正の小さな角度と判っていれば、 I a M C と打って `cos(x) > cos(y)' に変えたりできます。

a b (calc-substitute) [subst] コマンドは、 遭遇する全ての変数や表現のサブ表現を新しいサブ表現で代替します。 例えば、`2 sin(x)^2 + x sin(x) + sin(2 x)' において `sin(x)'`cos(y)' に代替すると、`2 cos(y)^2 + x cos(y) + sin(2 x)' になります。 これが純粋に構造的な代替であることに注意してください。 単独の `x'`sin(2 x)' がそのまま残ったのは、 それらが `sin(x)' ように見えなかったからです。 代替を行うより一般的な方法は、書替え規則(Rewrite Rules) 参照 。

a b コマンドは、通常 2つの式の入力を促すプロンプトを出します(旧, 新の順)。 最初のプロンプトに対して空入力したら、 すべての 3つの引数はスタックから取得されます(新, 旧, ターゲット表現の順)。 もし旧数式をタイプして、次のプロンプトで空入力したら、 新しい数式はスタック top から取得され、 ターゲットはスタック 2番目から取得されます。 もし両方のプロンプトに答えたら、 ターゲットはいつものようにスタック top から取得されます。

a b は交換法則や結合法則を理解していないことに注意してください。 パターン `x+y' は式 `y+x' にマッチしません。 同じく、`y+z'`x+y+z' の内部にマッチしません。 何故なら `+' 演算子は左結合であって、 与式の「ウラ構造」は `(x+y) + z' だからです。 式の本当の構造を見るには、 d U (calc-unformatted-language) モードを使ってください。 後で論じる書替え規則メカニズムには、このような制限はありません。

代数の関数として、subst は 3つの引数(ターゲット表現, 旧, 新)を取ります。 注意: たとえその引数が変数であっても、subst が常に直ちに評価されます。 そのため、スタックへの subst をコールする前に、 まず (m O で)デフォルト簡単化機能を切らなければなりません。


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