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


行列モードとスカラ・モード

Calc は見込みに基づいた代数操作を行いますが、 ベクトルや行列が絡んだときにはうまく行かなかったり、 正しくなかったりする場合があります。 Calc には2つのモード、 行列モード(matrix mode)スカラ・モード(scalar mode) があって、 それによってベクトルの取扱いかたが変わります。

m v (calc-matrix-mode) を1回打つと行列モードになります。 このモードでは、行列でないことが確実なものを除いて、 それ以外のオブジェクトは行列であると見込まれます。 主な効果は、掛算がもはや交換可能でなくなることです。 (行列の計算では、`A*B'`B*A' は等しくないことに注意) この仮定は書替え規則や代数的簡単化に影響します。 このモードのもうひとつの効果は、 普通なら 0 や 1 を生成する計算 (例えばそれぞれ a - aa / a ) が、 仮想的なゼロ行列や単位行列( `idn(0)', `idn(1)' )を表す 関数呼出しを生成することです。 idn 関数 `idn(a,n)' は、 an × n 単位行列の積を返します。 n が省略された場合は、 次元が判らないのでidn 呼出しはシンボリックなまま残されます。 しかしその後、サイズが確定している別の行列と絡む時点で、 適当なサイズの単位行列に変換されます。 一方、(`idn(1) + 2' のように)スカラと絡んだ場合、 それは結局スカラであったのだと見なされて、3 になります。

m v をもう一度タイプするとスカラ・モードになります。 このモードでは、 確実にベクトルや行列と判明していないオブジェクトはスカラと見なされます。 例えば `[x, y, z] + a' のような、ベクトルに変数を加える演算は、 通常なら Calc が「`a' は数値かも知れないし、3次元ベクトルかもしれない」 と考えて、シンボリックなまま残されます。 スカラ・モードでは、`a' はベクトルではないと見なされ `[x+a, y+a, z+a]' になります。

m v をもう一度(3回目)タイプすると、普通の演算モードに戻ります。

数値接頭引数 n を付けてm v をタイプすると 特別な「次元行列モード」になり、 サイズの不明な行列は n×n の正方行列と見なされます。 こうなると、関数呼出し `idn(1)' は仮想的な行列ではなく、 しかるべきサイズの行列に展開されます。

もちろんこれらのモードは、 いくつかの項が行列でその他がスカラであると考えられる式に対する近似に過ぎません。 厳密に取扱う方法のひとつは、特定の変数や関数がスカラであると宣言することです。 宣言のやりかたは 宣言 参照 。

ある変数をスカラと宣言しておきながら、 そこに行列をストアしてもエラーは出ません。 しかし、そんなことをしたら、Calc が出す答は正しくないでしょう。 上の例のように、Calc に `[x+a, y+a, z+a]' という結果を出させた後で、 `a'`[1, 2, 3]' を代入したらどうなるでしょうか。 結果が `[x, y, z] + [1, 2, 3]' にならない理由は、 あなたが「`a' はスカラである」という約束を破ったからです。

スカラと行列を一緒に扱う、もうひとつの方法は、セレクションを使うことです (サブ数式のセレクション 参照 )。 普通に式を操作するときは行列モードにしておいて、 スカラ的に評価したい部分があったら、 その一部をセレクションしスカラ・モードにして = を押せば、 残りの部分には影響を与えずにスカラ・モードで簡単化できます。 そして、行列モードに戻してからセレクションを解除してください。


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