4.1 Matrices

Last-modified: 2025-03-20 (木) 20:22:12

4.1 行列

Octaveでは,値の行列を簡単に定義することができます。行列のサイズは自動的に決定されるので、次元を明示的に指定する必要はなありません。式

a = [1, 2; 3, 4]

行列の結果は

       /      \
       | 1  2 |
 a  =  |      |
       | 3  4 |
       \      /

行列の要素は、様々な断片を組み合わせたときに次元がすべて意味をなすものであれば、任意の式にすることができます。例えば、上の行列を考えると

[ a, a ]
produces the matrix
ans =
 1  2  1  2
 3  4  3  4

しかし、表現

[ a, 1 ]

エラーが発生する

error: 行数が一致しなければなりません (1 != 2) 13行目6列目付近
(もちろん,この式が13行目の最初に入力されたと仮定して)。

行列式を区切る角括弧の内部では,Octaveは周囲の文脈を見て,空白や改行文字を 要素や行の区切り文字に変換するか,あるいは単に無視するかを決定する。

a = [ 1 2
      3 4 ]

うまくいきます。しかし、混乱を招く可能性のあるいくつかの原因が残っています。たとえば、

[ 1 - 1 ]

の場合、'-' は二項演算子として扱われ、結果はスカラー 0 になりますが、式中の

[ 1 -1 ]

の場合、'-'は単項演算子として扱われ、結果はベクトル[ 1, -1 ]となる。同様に

[ sin (pi) ]

は次のように解析されます。

[ sin, (pi) ]

となり、引数なしでsin関数が呼び出されるためエラーになります。これを回避するには、sinと開始括弧の間のスペースを省略するか、式を括弧で囲む必要があります:

[ (sin (pi)) ]

単一引用符('')を囲む空白も混乱の原因になります。a = 1とすると

[ 1 a' ]

の場合、単一引用符は転置演算子として扱われ、結果はベクトル [ 1, 1 ] になりますが、式

[ 1 a ' ]

はエラー・メッセージ

構文解析エラー:

 syntax error
>>> [ 1 a ' ]

というエラーメッセージが表示されます。 ^

[ a 'foo' ]

わかりやすくするために、行列の要素と行の区切りには常にカンマとセミコロンを使うのがよいでしょう。

行列の最大要素数は,Octaveのコンパイル時に固定される。許容される数は,関数 sizemaxで調べることができる。あなたのマシンで利用可能なメモリ量などの他の要因によって,行列の最大サイズがより小さいものに制限される可能性があることに注意してください。

: max_numel = sizemax ()

配列のサイズとして許される最大の値を返します。

Octaveが64ビットインデックスでコンパイルされている場合,結果は int64クラスとなり,そうでない場合はint32クラスとなる。配列の最大サイズは,intmaxによって報告される関連するクラスで許容される 最大値よりもわずかに小さくなります。

See also: intmax.

行列または値が行列である変数の名前を入力すると,Octaveは行列を行と列が整然と並ぶように表示します。行列の行が大きすぎて画面に収まらない場合,Octaveは行列を分割し各セクションの前にヘッダを表示してどの列が表示されるかを示します。以下の変数を使用して,出力のフォーマットを制御することができます。

: val = output_precision ()

: old_val = output_precision (new_val)

: old_val = output_precision (new_val, "local")

数値出力に表示する最小有効桁数を指定する内部変数を照会または設定する。

Noutput_precisionに設定された値にかかわらず、表示される精度の桁数は、倍精度値の場合は16桁、単精度値の場合は7桁に制限されることに注意してください。また、数値表示を変更するformat関数の呼び出しは、output_precisionの設定値も変更することができます。

関数内部から 「local 」オプションで呼び出された場合、その関数と呼び出されたサブルーチンの変数がローカルに変更されます。関数を終了すると元の変数値に戻ります。

See also: format, fixed_point_format.

の異なる値を使用することで、幅広い出力スタイルを実現できますoutput_precision。 関数を使用して適切な組み合わせを設定できますformat。「基本的な入力と出力」を参照してください。

: val = split_long_rows ()

: old_val = split_long_rows (new_val)

: old_val = split_long_rows (new_val, "local")
ターミナル ウィンドウに表示されるときに行列の行を分割するかどうかを制御する内部変数を照会または設定します。

行が分割されている場合、Octave はマトリックスを一連の小さな部分に分けて表示します。各部分は端末の幅の制限内に収まり、各行セットにはラベルが付けられるため、現在表示されている列を簡単に確認できます。例:

octave:13> rand (2,10)
ans =
Columns 1 through 6:
 0.75883  0.93290  0.40064  0.43818  0.94958  0.16467
 0.75697  0.51942  0.40031  0.61784  0.92309  0.40201
Columns 7 through 10:
 0.90174  0.11854  0.72313  0.73326
 0.44672  0.94303  0.56564  0.82150

W関数内部から 「local 」オプションで呼び出されると、その関数と呼び出されたサブルーチンの変数がローカルに変更されます。関数を終了すると、元の変数値に戻ります。

See also: format.

Octaveでは,値が非常に大きくなったり小さくなったりすると,自動的に科学的記法 に切り替わります。これにより,行列内のすべての値について,有効数字がいくつか表示されることが保証される。行列のすべての値を固定小数点形式で表示したい場合は,関数 fixed_point_format を使用することができます。しかし、そうすることは推奨されません。なぜなら、簡単に誤解されるような出力を生成してしまう可能性があるからです。

: val = fixed_point_format ()

: old_val = fixed_point_format (new_val)

: old_val = fixed_point_format (new_val, "local")

Octave がスケール形式を使用して行列値を印刷するかどうかを制御する内部変数を照会または設定します。

スケールされた形式では、最大の行列要素を 1 つの先頭の数字で書き込むことができるように選択された出力の最初の行にスケーリング係数が出力されます。例:

fixed_point_format (true)
logspace (1, 7, 5)'
ans =
 1.0e+07  *
 0.00000
 0.00003
 0.00100
 0.03162
 1.00000

Octaveが行列値を表示する際にスケーリングされたフォーマットを使用するかどうかを制御する内部変数をクエリまたはセットします。

スケーリングされた書式は,最大の行列要素が先頭の1桁で書けるように選択されたスケーリン グ係数を出力の最初の行に出力する。例えば
See also: format, output_precision.

Empty Matrices