もしあなたが RPN(逆ポーランド)記法に慣れていないなら、非RPN の電卓に似た 動作の「代数モード」で操作する方が向いているかもしれません。代数モードで は、伝統的な 2+3 表記法で数式を入力します。
実を言うと、代数式を入力するには特別な「モード」を必要としません。 アポストロフィー・キー(') を押すことによって、 いつでも数式を入力することができます。 プロンプトに答えて望む数式を入力し、それから RET を押してください。 数式は演算評価され、結果は RPN スタックに push されます。 もし RPN で考えることを全く望まないなら、計算全体を数式として入力して、 スタックから結果を読み、 それから DEL を押してスタックからそれを削除することができます。
アポストロフィー・キー、そして 2+3+4、そして RET を押してみ てください。結果は数値の9になるはずです。
代数式は演算子 `+', `-', `*', `/', および `^' を使います。演算評価の順序を明確にするためにカッコを使うことができます。 カッコが無ければ `^' が最初に評価され、次に `*'、そして `/'、最後に `+' と `-' の順で評価されます。例えば、式
2 + 3*4*5 / 6*7^8 - 9 は
2 + ((3*4*5) / (6*(7^8)) - 9 と同等です。
また、大型表記での次式も同等です。
3 * 4 * 5 2 + --------- - 9 8 6 * 7
この式の結果は数値 -6.99999826533 となります。
Calc の評価順序はたいていのコンピューター言語と同じですが、唯一の相違は上 の例のように、`*' が `/'よりも強く結びつきます。
訳注:サラリと書かれているが、違いが判っただろうか ? 通常のコンピューター言語や Exel などでは、上の式をカッコを使わず入力するとき `2 + 3*4*5 / 6*7^8 - 9' ではなく `2 + 3*4*5 / 6/7^8 - 9' と書かねば正しい結果が得られない。 Calc ではどちらで書いても同じ結果である。 文字式の場合も `a / b / c' は Calc の書替規則によって `a / b c' と書き直されるが、この表記はそのままでは他言語には使えない。 d C と打って C 言語表記モードに変えると C 言語用に書き直されて、 `a / (b*c)' となる。
標準的な数学表記のように `*' 記号は省略可能で、`2 a' は `2*a' と同等です。
同レベルの演算子は左から右に評価されますが、`^'だけは右から左に評価 されます。したがって `2-3-4' は `(2-3)-4' や -5 と同等であ るのに対し、`2^3^4' は `2^(3^4)' と同じになります (大変大きな数です; 試してください)。
いつもいつもアポストロフィーを押すのがおっくうなら、代数表現が入力されつ つあることを Calc が自動検知する「代数モード」を選ぶことができます。このモー ドに入るには、2文字 m a と打ちます。(`Alg' という表示がCalc ウィンドウのモードラインに現れるはずです。)
m aと打って、次にアポストロフィー無しに2+3+4と打ち、そして RETを押してください。
代数モードでは、数値入力を始めるキー(数字, 小数点, _(マイナス符号)) や ( や [ が押されると、Calc は自動的に代数的入力方式になります。
`+' や `*' のような演算子記号を持っていない関数は、
ファンクション・コール表記を使って式に書かねばなりません。
例えば、平方根キー Q に対応している関数名は sqrt
です。
数式で平方根を計算するには、
`sqrt(x)'という表記を使います。
アポストロフィーを押して、 それから sqrt(5*2) - 3 とタイプしてください。 結果は 0.16227766017 になるはずです。
式が関数名から始まるなら、 たとえ代数モードであっても アポストロフィーを使う必要があることに注意してください。 もしいきなり arcsin とタイプしたら、 a r は代数の書換えコマンドであると解釈され、 そして csin は使うべき書直し規則の名前であると解釈されるでしょう!
普段は Calc を RPN 電卓として使っていても、 複素数やベクトルを入力するのに代数形式を好む人がいます。 というのは、逆ポーランド方式で不完全項を入力するのはとても煩雑だからです。
まだ代数モードで、タイプしてください:
1: (2, 3) 2: (2, 3) 1: (8, -1) 2: (8, -1) 1: (9, -1) . 1: (1, -2) . 1: 1 . . . (2,3) RET (1,-2) RET * 1 RET +
代数モードは、最初にアポストロフィーを押さずに複素数を入力することを許し ますが、それは同時に1のような単純な数ですら、全ての入力項の後に RETを押す必要があることを意味します。
(C-u m a とタイプして特別な「制限代数モード」にすることもできます。
このモードでは、( キーと [ キーで代数的入力が開始し、普通の
数値キーでは 逆ポーランド入力です。
同じく、m t で起動される「完全代数モード」があり、
このモードでは全ての標準キーで代数的入力を開始します。
この場合、Calc コマンドを打つのに META キーを使わねばなりません:
例えば完全代数モードを抜けるのに M-m t、
Calc を終了するのに M-q、などなど。
完全代数モードは Emacs 19 ではサポートされません。)
(訳注: Emacs 20 以降でもサポートされていない。)
まだ代数モードにいるなら、再度 m a と打つと抜けられます。
現実の非 RPN 電卓は代数方式と RPN 方式をごっちゃにして使っています。 一般の電卓では、 (+ や * のような) 2つの数の演算子は代数形式で入力し、 (n や Q のような) 1つの数の演算子は逆ポーランド的に入力します。 また、非 RPN 電卓は入力の進行につれて計算の中間結果を表示します。 Calc でこれを実現するには、計算をいくつかの代数式の一連として実施し、 これらを $ 記号で関連付けます。 代数式の中で、$ はスタック top の値を表します。ここで、 sqrt(2*4+1) の計算をやってみましょう。 伝統的な電卓においてこの計算は、2 * 4 + 1 = と押してから 平方根キーを押して実行されます。
1: 8 1: 9 1: 3 . . . ' 2*4 RET $+1 RET Q
$+1 の前にアポストロフィーを打つ必要が無かったことに注目してくださ い。$ 記号は常に代数的入力を開始させるからです。
(*) 練習問題 1. RPN入力で Q を押すのと同じ事を代数的入力で実行するにはどうしますか? もし Q キーが壊れたら? 代数形式入力 練習問題 1 解答「Q コマンドの代替」 参照 . (*)
表記 $$, $$$, ・・・は、さらに上位のスタック内容を参照します。 例えば、' $$+$ RET は単に + を打つのと同じ事です。
代数式は変数(variables)を含むことができます。変数に値をストアするに は、s s, 変数名, RET の順に打ちます。(ストアコマンドは実は2種 類あって、s s は数値をスタックに残したまま変数にストアし、一方 s t はスタックから数値を除去して変数にストアします。) 変数名は文 字で始り、1文字以上の文字または数字で構成されなければなりません。
1: 17 . 1: a + a^2 1: 306 . . . 17 s t a RET ' a+a^2 RET =
= キーは、式中の変数をそれぞれにストアされた値に置換える事によって、 式を評価(evaluate)します。
RPN演算で変数値をスタックに呼び出すには、変数名を代数式入力した後 = を押すか、または s r コマンドを使います。
1: 17 2: 17 3: 17 2: 17 1: 306 . 1: 17 2: 17 1: 289 . . 1: 2 . . s r a RET ' a RET = 2 ^ +
もし変数名として1桁の数字を(s t 3 のように)使ったら、
10個のクイック変数(quick variables)
q0
〜 q9
のうちひとつを使うことになります。
q
や RET を打たずにすむので「クイック」です。
実際、s s 3 の短縮形として s 3が使えるし、
同様に t 3, r 3 なども使えます。
代数式を評価しても、値がストアされていない変数は残されます。
1: 2 a + 2 b 1: 34 + 2 b . . ' 2a+2b RET =
未定義変数と同様に、定義されていない関数呼び出しも残されます。
1: 2 + log10(0) + log10(x) + log10(5, 6) + foo(3) . ' log10(100) + log10(0) + log10(x) + log10(5,6) + foo(3) RET
この例で、最初の log10
呼出しは機能しましたが他は動きませんでした。
2番目の呼出しで、この引数値でのロガリズムは定義されません。3番目では引数
が記号ですし、4番目は引数が多すぎます。5番目では foo
という関数は
存在しません。「Wrong number of arguments(引数の数がおかしい)」というメッ
セージが `log10(5,6)' に対して表示されます。w ("why")を押し
て、先ほどの計算で他に発生したかもしれないメッセージを見てみましょう。今
回の場合は「logarithm of zero(ゼロの対数)」、そして「number expected(数
値を期待する): x
」が出ます。Calcは最初のメッセージが重大な場合に
限りそれを自動的に表示します。たとえば、Calcは「Wrong number of argument」
と「logarithm of zero」を自動レポートするに足る重大事と考えますが、一方
「number expected: x
」のようなメッセージは明示的に w キーを
押した場合に限って表示されます。
(*) 練習問題 2.
ジョーは式 `2 x y' を入力し、x
に5をストアしてから =
を押して、予想した結果 `10 y' を得ました。次に彼は、式 `2 x
(1+y)' について同じ事を行い `10 (1+y)' という結果を予想しましたが、
そうなりませんでした。なぜでしょう?
代数形式入力 練習問題 2 解答「ジョーの苦悩(代数編)」 参照 . (*)
(*) 練習問題 3. 1 RET 0 / と打つとどうなると思いますか? さらに続けて 0 * と打つと? 代数形式入力 練習問題 3 解答「1 / 0」 参照 . (*)
変数を扱う面白い方法はevaluates-to (`=>') 演算子を使うことで、 それはこのように働きます。いつもの方法で式を代数的に入力しますが、式の後 ろに `=>' 記号を付けて下さい。(s = というコマンドもあって、ス タックを用いて `=>' 式を作ります。) スタックには、 `=>' をはさ んで両側に2つの式が現れるでしょう。左辺の式は入力した式そのもので、右辺 の式は(= を打ったのと同様に)評価済みのものです。
2: 2 + 3 => 5 2: 2 + 3 => 5 1: 2 a + 2 b => 34 + 2 b 1: 2 a + 2 b => 20 + 2 b . . ' 2+3 => RET ' 2a+2b RET s = 10 s t a RET
このとき a
に新しい値をストアしたことに注意してください。すでにス
タックにある、a を参照する全ての `=>' 演算子が新しい値を使う
ように更新されます。`=>'を使えば、式の集合をスタックにPUSHしておいて、
変数の値を実験的に変化させ、それぞれの式への影響を観察できます。
使い終わったら、変数を「アンストア」することもできます。
2: 2 + 5 => 5 1: 2 a + 2 b => 2 a + 2 b . s u a RET
次に Calc の代数学と微積分機能を論じるとき、我々は再び変数と関数を伴う式 に出会うでしょう。
Go to the first, previous, next, last section, table of contents.
利用度数