コンテンツにスキップ

GNU Octave 2.1.x 日本語マニュアル/数値データ型

出典: フリー教科書『ウィキブックス(Wikibooks)』

4 数値データ型

[編集]

数値定数にはスカラ,ベクトル,あるいは行列,さらには複素数値があります。 数値定数の最も単純な型は,スカラです。これは単一の値であって,整数,小数,科学(指数)表 記の数値,あるいは複素数をとることができます。すべての数値定数は,Octave の内部では倍精度浮 動小数点形式で表されています(複素数型は,一対の倍精度浮動小数点数値として保持しています)。 実数の数値の例を以下に示します。これらはすべて同じ値です。

105
1.05e+2
1050e-1

複素数の定数を指定するには,以下の形式の式を書くことになります。

3 + 4i
3.0 + 4.0i
0.3e1 + 40e-1i

これらはすべて等価です。上の例にある文字‘i’は,虚数単位を表します。虚数単位は,

sqrt(-1)

と定義されます。 Octave では,複素数の虚部を値として認識するため,数値と‘i’の間にスペースを入れてはいけません。もしスペースを含めたならば,Octave は以下のようなエラーメッセージを表示することでしょう:

octave:13> 3 + 4 i
parse error:
3 + 4 i
^

上で用いた‘i’の代わりに,‘j’,‘I’あるいは‘J’を使うことができます。これら4 つの記号は,す べて等価です。

4.1 行列

[編集]

Octave では,行列を定義することは容易です。行列のサイズは,自動的に決定されます。ですから, 行列の次数を明示的に指定する必要はありません。以下の式

a = [1, 2; 3, 4]

は,以下の行列になります。

a =
1 2
3 4

行列の要素には,任意の式をおくことができます。これは,各部分を組み合わせたときに,次数が 全て意味をなすようにします。たとえば,上に示した行列が与えられているとき,以下の式

[ a, a ]

は,次の行列を生み出します。

ans =
1 2 1 2
3 4 3 4

しかし,以下の式

[ a, 1 ]

は,エラーになります。

error: number of rows must match near line 13, column 6

(もちろん,このエラーメッセージは,13 行目に入力したことを仮定しています) 行列を区切る角カッコの中身について,Octave は,スペースおよび改行が,要素および行の区切 りに変換できるかどうかを決めます。そうでなければ,何もしません。その結果,以下の式

a = [ 1 2
3 4 ]

は,正しく動きます。しかし,まだ混乱の原因も残っています。たとえば,以下の式において,

[ 1 - 1 ]

‘-’は二項演算子として扱われ,結果はスカラ0 になります。しかし,以下の式においては,

[ 1 -1 ]

‘-’は単項演算子とみなされ,結果は,[ 1, -1 ]というベクトルになります。同様に,

[ sin (pi) ]

という式は,以下のように解釈されます。

[ sin, (pi) ]

これはエラーになるでしょう。なぜならば,sin関数を引数なしで呼び出そうとしているからです。こ れを修正するには,sinと開きカッコの間にスペースを入れないようにするか,以下のように,式全 体をかっこでくくらねばなりません。

[ (sin (pi)) ]

シングルクオート文字(‘'’;これは転置演算子または文字列の区切りに使用されます)の周囲に ある空白文字も,混乱のもとになることがあります。

[ 1 a' ]

この式は,シングルクオート文字が転置演算子として扱われ,その結果は[ 1, 1 ]なるベクトルとなります。 しかし,以下の式

[ 1 a ' ]

は,次のようなエラーメッセージを出します。

error: unterminated string constant

妥当な式を解釈するときには,問題が起きないでしょう。

[ a 'foo' ]

明快にするには,行列の要素や行を区切るためには,いつもカンマやセミコロンを使うことが,おそらく最もよいことでしょう。

warn_separator_insert

[編集]

                   [Built-in Variable]

もしカンマあるいはセミコロンがリテラル行列に自動的に挿入されるならば,警告を表示します。行列や行列を表す変数名を打ち込むときには,Octave は行と列をきちんとそろえて表示します。もし行列の行が長すぎて画面に収まらないならば,Octave は行列を分割し,各部分の前に表示される列数に関する情報を表示します。

output_max_field_width

[編集]

                                [Built-in Variable]

この変数は,数値の出力フィールドの最大幅を指定する。初期状態では10 である。

output_precision

[編集]

                                [Built-in Variable]

この変数は,数値を出力する際に表示する小数点以下の桁数を指定する。初期状態では5で す。output_precisionとoutput_max_field_widthの2 つの変数を使用することにより,幅広い出力スタイルを達成することが可能です。合理的な組み合わせは,format関数を使用してセットすることになるでしょう。詳しくは,Section 16.1 [Basic Input and Output]を参照してください。

split_long_rows

[編集]

                                [Built-in Variable]

大きな行列について,Octave は与えられた行の全ての列を画面に表示することはできないで しょう。これにより,端末が長い行を折り返したり切りつめるかどうかによっては,情報を失 うか,ほとんど判読できない出力になってしまいます。

split_long_rowsの値がゼロでないならば,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

split_long_rowsの標準状態は,ゼロではありません。 値が非常に大きいまたは小さいとき,Octave は自動的に科学表記に切り替えます。これは,行列のどの値についても,有効桁を表示することを保証します。もし,すべての行列の値を固定小数点形式で表示したいならば,組み込み変数fixed_point_formatにゼロでない値をセットすればよいです。しかし,そうすることは推奨しません。なぜならば,誤解しやすい出力になるかもしれないからです。

fixed_point_format

[編集]

                                [Built-in Variable]

この変数にゼロでない値をセットするならば,Octave は行列内の値をすべてスケール化します。その結果,最大の数値は,one leading digit で表記されます。スケール因子は,出力の最初の行に表示されます。たとえば,以下のようになります。

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

一番目の値が実際には 1 であっても,ゼロであるように見えることに注意してください。この理由により,fixed_point_formatをゼロでない値にセットするときには,慎重になるべきです。fixed_point_formatは,標準状態では 0 です。

4.1.1 空行列

[編集]

行と列の片方または両方の次数がゼロである空行列について,空行列に対する演算は以下の文献に記述されているように実行します:

Carl de Boor, An Empty Exercise, SIGNUM, Volume 25, pages
2?6, 1990;C. N. Nett and W. M. Haddad, in A System-Theoretic Appropriate Realization of
the Empty Matrix Concept, IEEE Transactions on Automatic Control, Volume 38, Number

5, May 1993.

簡潔に言えば,スカラs,m×n の行列Mm×n,およびm×n の空行列[ ]m×n(片方または両方の次数がゼロに等しい行列)が与えられるとき,以下の関係が成立します。

s・[ ]m×n = [ ]m×n・s = [ ]m×n
[ ]m×n+[ ]m×n = [ ]m×n
[ ]0×m・Mm×n = [ ]0×n
Mm×n・[ ]n×0 = [ ]m×0
[ ]m×0・[ ]0×n = 0m×n

標準状態では,空行列の次元は空行列記号‘[]’ とともに表示する。組み込み変数print_empty_ dimensionsは,この挙動をコントロールする。

[編集]

                                [Built-in Variable]

print_empty_dimensionsの値がゼロでない値をとるならば,空行列の次元は空行列記号 ‘[]’ とともに表示される。たとえば,以下の式

zeros (3, 0)

は,次のような表示になる。

ans = [](3x0)

行列の行または列を削除する便利な方法として,代入文で空行列を使用することもできます。Section 10.6 [Assignment Expressions]を参照してください。

warn_empty_list_elements

[編集]

                                [Built-in Variable]

もしwarn_empty_list_elementsの値がゼロでないならば,行列リストに空行列が存在する とき,警告を表示する。たとえば,以下のような状況である。

a = [1, [], 3, [], 5]

標準状態は0 である。 Octave が行列を含む式を解釈するとき,そのリストの要素がすべて定数かどうか決定するために試験をします。もしそうならば,単一の行列定数を含むリストに置き換えます。

4.2 範囲 

[編集]

範囲とは,等間隔に区切られた要素の行ベクトルを表記するために,便利な方法です。範囲式は,範囲の最初の要素,要素の増分(省略可),およびその範囲を超えない要素の最大値により定義されます。開始値,増分,および終端値はコロン(‘:’記号)で区切られます。これには,任意の数式や関数呼び出しを含むこともできます。もし増分を省略するならば,これは1 であると仮定する。たとえば,以下の範囲

1 : 5

は,値の集合‘[ 1, 2, 3, 4, 5 ]’ を定義します。また,以下の範囲

1 : 3 : 5

は,‘[ 1, 4 ]’なる集合を定義します。 範囲定数は行ベクトルを指定しますが,Octave は,必要がないときには,範囲定数をベクトルに変換しません。これにより,‘1 : 10000’のような定数を,典型的な32 ビットワークステーションでは,80,000 バイトの記憶領域を使用せずに書くことができます。 範囲の上限(増分が負値であれば下限)が,常に集合に含まれるとは限らないということに注意してください。また,浮動小数点を使用して定義された範囲は,驚くべき結果を生み出すことがあることにも留意してください。これは,Octave が範囲の値を計算するために,浮動小数点演算を使用しているためです。もし要素の数が決められていて,範囲に終点を含めることが重要ならば,かわりにlinspace関数を使用するべきです(Section 18.3 [Special Utility Matrices]を参照してください)。 Octave が範囲式を解釈するとき,式の要素がすべて定数かどうかを試験します。もしそうならば,範囲式を単一の範囲定数で置き換えます。

4.3 論理値

[編集]

true

[編集]

                                [Built-in Variable]

理論真値を表す。

false

[編集]

                              [Built-in Variable]

理論偽値を表す。

4.4 数値オブジェクトの判定 

[編集]

isnumeric (x)

[編集]

                                [Built-in Function]

もしx が数値オブジェクトならば,ゼロ以外を返す。

isreal (x)

[編集]

                                [Built-in Function]

もしx が実数値オブジェクトならば,真値を返す。

iscomplex (x)

[編集]

                                [Built-in Function]

もしx が複素数の数値オブジェクトならば,真値を返す。

ismatrix (a)

[編集]

                                [Built-in Function]

もしx が行列ならば1 を返し,それ以外は0 を返す。

isvector (a)

[編集]

                                [Function File]

もしa がベクトルならば1 を返し,それ以外は0 を返す。

isscalar (a)

[編集]

                                [Function File]

もしx がスカラならば1,それ以外は0 を返す。

issquare (x)

[編集]

                                [Function File]

もしx が正方行列ならば,x の次元を返し,それ以外は0 を返す。

issymmetric (x, tol)

[編集]

                                [Function File]

もしx が,tol によって指定される基準内にある対称行列ならば,x の次元を返す。そうでなければ,0 を返す。もしtol を省略するならば,計算機の精度に等しい基準を使用する。

isbool (x)

[編集]

                                [Built-in Functio]

もしx がブールオブジェクトならば,真値を返す。