## 第3章 システム関連モジュール

## 1. SYSTEM モジュールの概要

SYSTEM モジュールは，データの切り出しをはじめとするデータの基本的な編集機能を集めたシステム・モジュールです．データの最大・最小値の検索や，データの形式の変更，データファイルのヘッダ情報を表示するなどの関数も収められています．

## 2. コマンドの使用例

ここでは，主なコマンドの使い方を説明します．

### 2.1. コマンドマニュアルを表示する (help)

コマンドのマニュアルをオンライン表示します．この関数の形式を以下に示します．

>     help( "funcname" )

ここで，funcname は関数名です．このとき，引数は String 型でなければなりません． 例えば，

>     []SATELLITE[]~/home/demo:[1]% help("help")

とすると，help 関数のマニュアルが表示されます．

### 2.2. データファイルのヘッダ情報の表示・変更をする (header)

データファイルのヘッダ情報 (データ形式，インデックスなど) を表示，もしくは変更します．この関数の形式を以下に示します．

>     header( "file_name", mode )

ここで，file_name はデータファイル名，mode はモード (0 : 画面表示，1 : 変更) です．例えば，

>     []SATELLITE[]~/home/demo:[1]% header("test.dat", 0)

とすると，データファイル (test.dat) の情報を画面表示します．

### 2.3. バッチ処理の一時停止をする (wait)

リターンキーが押されるまで待つ関数です．この関数の形式を以下に示します．

>     wait()

また，引数に Scalar 型の数字を伴うことで，指定秒間処理を停止することもできます．

>     []SATELLITE[]~/home/demo:[1]% wait(3)

### 2.4. データサイズ，インデックスの変更をする (reform)

オブジェクトのフォーマットを変更する関数です．この関数の形式を以下に示します．

>     y = reform(x, index)

x は入力オブジェクト，y は出力オブジェクト，index はデータサイズです．例えば，図 3.1. 「reform 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a を 2 次元 Series オブジェクト b に変更する場合は，

>     []SATELLITE[]~/home/demo:[1]% a = 1~14
>     []SATELLITE[]~/home/demo:[2]% a
>     [ 0]:%   1   2   3   4   5
>     [ 5]:%   6   7   8   9  10
>     [10]:%  11  12  13  14
>     []SATELLITE[]~/home/demo:[3]% b = reform(a, (7, 2))
>     []SATELLITE[]~/home/demo:[4]% b
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%   5   6
>     [3]:[0]%   7   8
>     [4]:[0]%   9  10
>     [5]:[0]%  11  12
>     [6]:[0]%  13  14

とします．

図 3.1. reform 関数の使用例 1

また，図 3.2. 「reform 関数の使用例 2」 に示すように 2 次元オブジェクト b を 3 次元オブジェクト c に変更する場合は，

>     []SATELLITE[]~/home/demo:[5]% c = reform(b, (3,2,4))
>     []SATELLITE[]~/home/demo:[6]% c
>     [0]:[0][0]%   1   2   3   4
>     [0]:[1][0]%   5   6   7   8
>     [1]:[0][0]%   9  10  11  12
>     [1]:[1][0]%  13  14   0   0
>     [2]:[0][0]%   0   0   0   0
>     [2]:[1][0]%   0   0   0   0

とします．このとき，指定したサイズが入力オブジェクトより大きい場合には，データ後部に 0 詰めをします．

図 3.2. reform 関数の使用例 2

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.5. データバッファのモニター (bm)

ユーザから起動されるプロセスと平行して，リアルタイムにデータバッファをグラフに表示するモニタを起動させる関数です．この関数の形式を以下に示します．

>     bm( x )

ここで，x はモニタリング対象のオブジェクトです．バッファ x をモニタしたい場合は，

>     []SATELLITE[]~/home/demo:[3]% bm(x)

により，バッファモニタを起動させることができます．図 3.3. 「バッファモニタの起動画面 (全景)」 はバッファモニタの起動例です．ここで，x には以下に示す処理によりデータが事前に格納されています．

>     []SATELLITE[]~/home/demo:[1]% t = 0~99
>     []SATELLITE[]~/home/demo:[2]% x = sin(2*PI*t/100)

図 3.3. バッファモニタの起動画面 (全景)

また，「SCALE ボタン」 をクリックすることにより，新たにウィンドウが開かれ，スケールを自由に設定することが可能です．図 3.4. 「スケール設定画面」 にスケール設定画面を示します．

図 3.4. スケール設定画面

前例では，モニタリング対象のバッファ x は 1 次元 Series オブジェクトでした．ここでは，2 次元 Series オブジェクトのバッファモニタについて説明します．まず，reform 関数を用いて，以下に示すように，1 次元 Series オブジェクト x を 2 次元 Series オブジェクト y にします．

>     []SATELLITE[]~/home/demo:[4]% y = reform(x, (2,50))

この 2 次元 Series オブジェクト y をモニタリングする場合，前例と同様に，

>     []SATELLITE[]~/home/demo:[5]% bm(y)

とします．この場合のバッファモニタ画面を 図 3.5. 「バッファモニタの画面 1 (2 次元 Series オブジェクト)」 に示します．

図 3.5. バッファモニタの画面 1 (2 次元 Series オブジェクト)

ここで，「インデックスボタン」 をクリックすることにより，図 3.6. 「バッファモニタの画面 2 (2 次元 Series オブジェクト)」 に示すようなモニタ画面に変わります．

図 3.6. バッファモニタの画面 2 (2 次元 Series オブジェクト)

図 3.5. 「バッファモニタの画面 1 (2 次元 Series オブジェクト)」 と 図 3.6. 「バッファモニタの画面 2 (2 次元 Series オブジェクト)」 は同じ変数名の時間的に異なるデータが表示されています．この例では，図 3.5. 「バッファモニタの画面 1 (2 次元 Series オブジェクト)」 の横軸は 図 3.3. 「バッファモニタの起動画面 (全景)」 に示す空間 1 から 50 までのデータを表し，図 3.6. 「バッファモニタの画面 2 (2 次元 Series オブジェクト)」 は 図 3.3. 「バッファモニタの起動画面 (全景)」 に示す空間 51 から 100 までのデータを表します．

### 2.6. サンプリング周波数を変更する (sampling)

サンプリング周波数を変更する関数です．この関数の形式を以下に示します．

>     sampling( frequency )

ここで，frequency はサンプリング周波数です．ここで設定するサンプリング周波数は ISPP モジュールの関数や，GPM の graph 関数から参照されます．例えば，

>     []SATELLITE[]~/home/demo:[1]% a = 1~10

としたときのグラフを 図 3.7. 「sampling 関数の使用例 1」 に示します．この場合，frequency のデフォルトは 1000.0 となっています．

図 3.7. sampling 関数の使用例 1

また，サンプリング周波数を 100 とした後の a のグラフを 図 3.8. 「sampling 関数の使用例 2」 に示します．

>     []SATELLITE[]~/home/demo:[2]% sampling(100)

図 3.8. sampling 関数の使用例 2

### 2.7. データの一部を切り出す (cut)

オブジェクトの一部を取り出す関数です．この関数の形式を以下に示します．

>     y = cut(x, start, end)

ここで，x は入力オブジェクト，y は出力オブジェクト，start は切り出すデータの始点座標，end は切り出すデータの終点座標です．例えば，図 3.9. 「cut 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a の一部を切り出すには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% a
>     [0]:%   1   2   3   4   5
>     [5]:%   6   7
>     []SATELLITE[]~/home/demo:[3]% b = cut(a, 3, 5)
>     []SATELLITE[]~/home/demo:[4]% b
>     [0]:%   4   5   6

とします．ここで，

>     []SATELLITE[]~/home/demo:[5]% b = cut(a, 3, 5)

を

>     []SATELLITE[]~/home/demo:[6]% b = cut(a, 5, 3)
>     sl4: Error [<SYSTEM:cut> No.7] Illegal index near line 6

とした場合は，正しく実行されません．

図 3.9. cut 関数の使用例 1

また，図 3.10. 「cut 関数の使用例 2」 に示すように，2 次元 Series オブジェクト b の一部を切り出すには，

>     []SATELLITE[]~/home/demo:[7]% a = 1~14
>     []SATELLITE[]~/home/demo:[8]% b = reform(a, (7,2))
>     []SATELLITE[]~/home/demo:[9]% c = cut(b,(3,0),(5,0))
>     []SATELLITE[]~/home/demo:[10]% c
>     [0]:[0]%   7
>     [1]:[0]%   9
>     [2]:[0]%  11

とします．

図 3.10. cut 関数の使用例 2

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.8. データの一部に別のデータを上書きする (put)

オブジェクトの一部に，別のデータを入れる関数です．この関数の形式を以下に示します．

>     z = put(x, y, index)

ここで，x は入力オブジェクト，y は挿入オブジェクト，z は出力オブジェクト，index は y を書き込む座標です．出力オブジェクト z は入力オブジェクト x の時間軸方向の長さに依存します．例えば，図 3.11. 「put 関数の使用例 (1 次元 Series オブジェクト)」 に示すように 1 次元 Series オブジェクト a に 1 次元 Series オブジェクト b を上書きするには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% b = 11~17
>     []SATELLITE[]~/home/demo:[3]% c = put(a,b,3)
>     []SATELLITE[]~/home/demo:[4]% c
>     [0]:%   1   2   3  11  12
>     [5]:%  13  14

とします．

図 3.11. put 関数の使用例 (1 次元 Series オブジェクト)

また，図 3.12. 「put 関数の使用例 (2 次元 Series オブジェクト)」 に示すように，2 次元 Series オブジェクト ar に br を上書きするには，

>     []SATELLITE[]~/home/demo:[5]% a = 1~14
>     []SATELLITE[]~/home/demo:[6]% b = 30~35
>     []SATELLITE[]~/home/demo:[7]% ar = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[8]% br = reform(b,(3,2))
>     []SATELLITE[]~/home/demo:[9]% c = put(ar,br,(2,0))
>     []SATELLITE[]~/home/demo:[10]% c
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%  30  31
>     [3]:[0]%  32  33
>     [4]:[0]%  34  35
>     [5]:[0]%  11  12
>     [6]:[0]%  13  14

とします．

図 3.12. put 関数の使用例 (2 次元 Series オブジェクト)

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.9. データとデータを連結する (merge)

2 つのオブジェクトのデータを連結します．この関数の形式を以下に示します．

>     z = merge(x, y)

ここで，x は入力オブジェクト 1，y は入力オブジェクト 2，z は出力オブジェクトです．出力オブジェクト z には入力オブジェクト x の終端に入力オブジェクト y を連結したデータが出力されます．また，多次元データの場合には，サブインデックスが一致しなければなりません．例えば，図 3.13. 「merge 関数の使用例 (2 次元 Series オブジェクト)」 に示すように 2 次元 Series オブジェクト ar と br を連結させるには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~8
>     []SATELLITE[]~/home/demo:[2]% b = 30~35
>     []SATELLITE[]~/home/demo:[3]% ar = reform(a,(4,2))
>     []SATELLITE[]~/home/demo:[4]% br = reform(b,(3,2))
>     []SATELLITE[]~/home/demo:[5]% c = merge(ar, br)
>     []SATELLITE[]~/home/demo:[6]% c
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%   5   6
>     [3]:[0]%   7   8
>     [4]:[0]%  30  31
>     [5]:[0]%  32  33
>     [6]:[0]%  34  35

とします．

図 3.13. merge 関数の使用例 (2 次元 Series オブジェクト)

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.10. データの一部を指定した値で埋める (fill)

これはオブジェクトの指定した範囲を指定した値で埋める関数です．この関数の形式を以下に示します．

>     y = fill(x, start, end, value)

ここで，x は入力オブジェクト，y は出力オブジェクト，start は始点座標，end は終点座標，value は埋める数値です．すなわち，入力オブジェクト x の start から end の位置までの範囲を value の値で埋めます．また，データのサイズより大きい位置を指定した場合には，最大範囲までの値で埋めます．例えば，図 3.14. 「fill 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a の指定した範囲を 20 で埋めるには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% b = fill(a,3,5,20)
>     []SATELLITE[]~/home/demo:[3]% b
>     [0]: %   1   2   3  20  20
>     [5]: %  20   7

とします．

図 3.14. fill 関数の使用例 1

また，図 3.15. 「fill 関数の使用例 2」 に示すように，2 次元 Series オブジェクト b の指定した範囲を 30 で埋めるには，

>     []SATELLITE[]~/home/demo:[4]% a = 1~14
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[6]% c = fill(b,(3,0),(5,0),30)
>     []SATELLITE[]~/home/demo:[7]% c
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%   5   6
>     [3]:[0]%  30   8
>     [4]:[0]%  30  10
>     [5]:[0]%  30  12
>     [6]:[0]%  13  14

とします．

図 3.15. fill 関数の使用例 2

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.11. データの順番を逆にする (reverse)

入力データの配列を逆にしたデータを得る関数です．この関数の形式を以下に示します．

>     y = reverse( x )

ここで，x は入力オブジェクト，y は出力オブジェクトです．例えば，以下に示すように，1 次元 Seires オブジェクト a を逆にしたデータを得るには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% b = reverse(a)
>     []SATELLITE[]~/home/demo:[3]% a
>     [0]: %   1   2   3   4   5
>     [5]: %   6   7
>     []SATELLITE[]~/home/demo:[4]% b
>     [0]: %   7   6   5   4   3
>     [5]: %   2   1

とします．

また，図 3.16. 「reverse 関数の使用例 (2 次元 Series オブジェクト)」 に示すように 2 次元 Series オブジェクト a を逆にしたデータを得るには，

>     []SATELLITE[]~/home/demo:[5]% a = 1~14
>     []SATELLITE[]~/home/demo:[6]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[7]% b
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%   5   6
>     [3]:[0]%   7   8
>     [4]:[0]%   9  10
>     [5]:[0]%  11  12
>     [6]:[0]%  13  14
>     []SATELLITE[]~/home/demo:[8]% c = reverse( b )
>     []SATELLITE[]~/home/demo:[9]% c
>     [0]:[0]%  14  13
>     [1]:[0]%  12  11
>     [2]:[0]%  10   9
>     [3]:[0]%   8   7
>     [4]:[0]%   6   5
>     [5]:[0]%   4   3
>     [6]:[0]%   2   1

とします．

図 3.16. reverse 関数の使用例 (2 次元 Series オブジェクト)

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.12. 指定した位置をデータの先頭にする (rotate)

オブジェクトの内容を，指定した位置が先頭となるように移動する関数です．この関数の形式を以下に示します．

>     y = rotate(x, index)

ここで，x は入力オブジェクト，y は出力オブジェクト，index は先頭にする座標です．例えば，図 3.17. 「rotate 関数の使用例 (1 次元 Series オブジェクト)」 に示すように，1 次元 Series オブジェクト a を指定した位置が先頭となるように移動するには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% a
>     [0]: %   1   2   3   4   5
>     [5]: %   6   7
>     []SATELLITE[]~/home/demo:[3]% b = rotate(a, 3)
>     []SATELLITE[]~/home/demo:[4]% b
>     [0]: %   4   5   6   7   1
>     [5]: %   2   3

とします．

図 3.17. rotate 関数の使用例 (1 次元 Series オブジェクト)

また，図 3.18. 「rotate 関数の使用例 (2 次元 Series オブジェクト)」 に示すように 2 次元 Series オブジェクト b を指定した位置が先頭となるように移動するには，

>     []SATELLITE[]~/home/demo:[5]% a = 1~14
>     []SATELLITE[]~/home/demo:[6]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[7]% b
>     [0]:[0]%   1   2
>     [1]:[0]%   3   4
>     [2]:[0]%   5   6
>     [3]:[0]%   7   8
>     [4]:[0]%   9  10
>     [5]:[0]%  11  12
>     [6]:[0]%  13  14
>     []SATELLITE[]~/home/demo:[8]% c = rotate(b,(3,0))
>     []SATELLITE[]~/home/demo:[9]% c
>     [0]:[0]%   7   8
>     [1]:[0]%   9  10
>     [2]:[0]%  11  12
>     [3]:[0]%  13  14
>     [4]:[0]%   1   2
>     [5]:[0]%   3   4
>     [6]:[0]%   5   6

とします．

図 3.18. rotate 関数の使用例 (2 次元 Series オブジェクト)

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.13. データを間引く (thin)

データを指定したステップ数で間引く関数です．この関数の形式を以下に示します．

>     y = thin(x, step)

ここで，x は入力時系列，y は出力時系列，step は間引きの間隔 (step-1 点分のデータを間引く) です．従って，step=0 および 1 の場合はデータに変化はありません．例えば，図 3.19. 「thin 関数の使用例 1」 に示すように，1 次元 Series オブジェクト a を間引く場合には，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% b = thin(a, 2)
>     [7]->[4]
>     []SATELLITE[]~/home/demo:[3]% b
>     [0]: %   1   3   5   7

とします．

図 3.19. thin 関数の使用例 1

また，図 3.20. 「thin 関数の使用例 2」 に示すように 2 次元 Series オブジェクト b を間引いたデータを得るには，

>     []SATELLITE[]~/home/demo:[4]% a = 1~21
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,3))
>     []SATELLITE[]~/home/demo:[6]% b
>     [0]:[0]%   1   2   3
>     [1]:[0]%   4   5   6
>     [2]:[0]%   7   8   9
>     [3]:[0]%  10  11  12
>     [4]:[0]%  13  14  15
>     [5]:[0]%  16  17  18
>     [6]:[0]%  19  20  21
>     []SATELLITE[]~/home/demo:[7]% c = thin(b,(3,2))
>     [7][3]->[3][2]
>     []SATELLITE[]~/home/demo:[8]% c
>     [0]:[0]%   1   3
>     [1]:[0]%  10  12
>     [2]:[0]%  19  21

とします．

図 3.20. thin 関数の使用例 2

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.14. データの指定した位置の値を得る (get)

オブジェクトの指定した位置の値を得る関数です．この関数の形式を以下に示します．

>     y = get(x, position)

ここで，x は入力オブジェクト，y は指定した位置の値のデータ値，position はデータの座標です．例えば，図 3.21. 「get 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a の指定した位置の値を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% b = get(a, 3)
>     []SATELLITE[]~/home/demo:[3]% b
>     4

とします．

図 3.21. get 関数の使用例 1

また，図 3.22. 「get 関数の使用例 2」 に示すように，2 次元 Seires オブジェクト b の指定した位置を得るには，

>     []SATELLITE[]~/home/demo:[4]% a = 1~14
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[6]% c = get(b,(3,0))
>     []SATELLITE[]~/home/demo:[7]% c
>     7

> とします．

図 3.22. get 関数の使用例 2

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.15. データの最大値を得る (max)

データの最大値を得る関数です．この関数の形式を以下に示します．

>     y = max(x)

ここで，x は入力オブジェクト，y は最大値です．例えば，以下に示すように 1 次元 Series オブジェクト a の最大値を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = (3,7,5,1,6,2,4)
>     []SATELLITE[]~/home/demo:[2]% c = max(a)
>     []SATELLITE[]~/home/demo:[3]% c
>     7

とします．また，以下に示すように，2 次元 Series オブジェクト b の最大値を得るには，

>     []SATELLITE[]~/home/demo:[4]% a = (7,13,1,3,12,6,11,4,14,2,9,10,5,8)
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[6]% c = max(b)
>     []SATELLITE[]~/home/demo:[7]% c
>     14

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.16. データの最小値を得る (min)

データの最小値を得る関数です．この関数の形式を以下に示します．

>     y = min(x)

ここで，x は入力オブジェクト，y は最小値です．例えば，以下に示すように 1 次元 Series オブジェクト a の最小値を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = (3,7,5,1,6,2,4)
>     []SATELLITE[]~/home/demo:[2]% c = min(a)
>     []SATELLITE[]~/home/demo:[3]% c
>     7

とします．また，以下に示すように，2 次元 Series オブジェクト b の最小値を得るには，

>     []SATELLITE[]~/home/demo:[4]% a = (7,13,1,3,12,6,11,4,14,2,9,10,5,8)
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[6]% c = min(b)
>     []SATELLITE[]~/home/demo:[7]% c
>     1

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.17. データの最大値のデータ位置を得る (maxpos)

データの最大値のデータ位置を得る関数です．この関数の形式を以下に示します．

>     y = maxpos(x, num)

ここで，x は入力オブジェクト，y は位置格納オブジェクト，num は取得するデータ位置の数です．例えば，図 3.23. 「maxpos 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a の最大値のデータ位置を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = (3,7,5,1,6,2,4)
>     []SATELLITE[]~/home/demo:[2]% c = maxpos(a,1)
>     []SATELLITE[]~/home/demo:[3]% c
>     1

とします．

図 3.23. maxpos 関数の使用例 1

また，図 3.24. 「maxpos 関数の使用例 2」 に示すようにオブジェクト a の最大値のデータ位置とその次に大きい値を持つデータの位置を得るには，

>     []SATELLITE[]~/home/demo:[4]% c = maxpos(a, 2)
>     []SATELLITE[]~/home/demo:[5]% c
>     [0]:[0]%1
>     [1]:[0]%4

とします．

図 3.24. maxpos 関数の使用例 2

また，図 3.25. 「maxpos 関数の使用例 3」 に示すように，2 次元 Series オブジェクト b の最大値のデータの位置を得るには，

>     []SATELLITE[]~/home/demo:[6]% a = (7,13,1,3,12,6,11,4,14,2,9,10,5,8)
>     []SATELLITE[]~/home/demo:[7]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[8]% c = maxpos(b,1)
>     []SATELLITE[]~/home/demo:[9]% c
>     [0]:[0]%   4   0

とします．

図 3.25. maxpos 関数の使用例 3

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.18. データの最小値のデータ位置を得る ( minpos )

データの最大値のデータ位置を得る関数です．この関数の形式を以下に示します．

>     y = minpos(x, num)

ここで，x は入力オブジェクト，y は位置格納オブジェクト，num は取得するデータ位置の数です．例えば，図 3.26. 「minpos 関数の使用例 1」 に示すように 1 次元 Series オブジェクト a の最小値のデータ位置を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = (3,7,5,1,6,2,4)
>     []SATELLITE[]~/home/demo:[2]% c = minpos(a,1)
>     []SATELLITE[]~/home/demo:[3]% c
>     3

とします．

図 3.26. minpos 関数の使用例 1

また，図 3.27. 「minpos 関数の使用例 2」 に示すようにオブジェクト a の最小値のデータ位置とその次に大きい値を持つデータの位置を得るには，

>     []SATELLITE[]~/home/demo:[4]% b = minpos(a, 2)
>     []SATELLITE[]~/home/demo:[5]% b
>     [0]:[0]%   3
>     [1]:[0]%   5

とします．

図 3.27. minpos 関数の使用例 2

また，図 3.28. 「minpos 関数の使用例 3」 に示すように，2 次元 Series オブジェクト b の最小値のデータの位置を得るには，

>     []SATELLITE[]~/home/demo:[6]% a = (7,13,1,3,12,6,11,4,14,2,9,10,5,8)
>     []SATELLITE[]~/home/demo:[7]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[8]% c = minpos(b,1)
>     []SATELLITE[]~/home/demo:[9]% c
>     [0]:[0]%   1   0

とします．

図 3.28. minpos 関数の使用例 3

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.19. 指定した値に近い値をデータから見つける (find)

入力オブジェクトから指定した値に最も近いデータを見つけ，値とその位置を表示し，位置を Series オブジェクトとして返す関数です．この関数の形式を以下に示します．

>     ip = find(x, val, num)

ここで，x は入力オブジェクト，ip はデータの位置，val は捜し出す値，num は捜し出すデータの個数です．例えば，図 3.29. 「find 関数の使用例 1 (1 次元 Series オブジェクト)」 に示すように 1 次元 Series オブジェクト a の中で，指定した値に最も近いデータとその次に近いデータの値と位置を得るには，

>     []SATELLITE[]~/home/demo:[1]% a = 1~7
>     []SATELLITE[]~/home/demo:[2]% c = find(a, 5.8, 2)
>     DATA[6]  --  POINT:[5]
>     DATA[5]  --  POINT:[4]
>     []SATELLITE[]~/home/demo:[3]% c
>     [0]:[0]%   5
>     [1]:[0]%   4

とします．

図 3.29. find 関数の使用例 1 (1 次元 Series オブジェクト)

また，図 3.30. 「find 関数使用例 2 (2 次元 Series オブジェクト)」 に示すように 2 次元オブジェクト a の中で，指定した値に最も近いデータとその次に近いデータの値と位置を得るには，

>     []SATELLITE[]~/home/demo:[4]% a = 1~14
>     []SATELLITE[]~/home/demo:[5]% b = reform(a,(7,2))
>     []SATELLITE[]~/home/demo:[6]% c = find(b, 6.8, 2)
>     DATA[7]  --  POINT:[3][0]
>     DATA[6]  --  POINT:[2][1]
>     []SATELLITE[]~/home/demo:[7]% c
>     [0]:[0]%   3   0
>     [1]:[0]%   2   1

とします．

図 3.30. find 関数使用例 2 (2 次元 Series オブジェクト)

この関数は Snapshot オブジェクトについても同様に扱うことができます．

### 2.20. 現在のディレクトリを取得する (pwd)

現在作業を行っているディレクトリ名を取得する関数です．この関数の形式を以下に示します．

>     pwd()

### 2.21. ディレクトリを作成する (mkdir)

新たにディレクトリを作成する関数です．この関数の形式を以下に示します．

>     mkdir("file_name")

ここで，file_name は新たに作成するディレクトリ名です．ファイル名は，" " で囲む必要があります．例えば，

>     []SATELLITE[]~/home/demo:[1]% mkdir("My Directly")

とすると，現在作業を行っているディレクトリ（~/home/demo）に My Directly というディレクトリが作成されます．

### 2.22. 一時ディレクトリの場所を取得する (tempdir)

システムで利用されている一時ディレクトリの場所を取得する関数です．この関数の形式を以下に示します．

>     tempdir()

### 2.23. 指定した文字列の環境変数の値を得る (getenv)

指定した文字列の環境変数の値を得る関数です．この関数の形式を以下に示します．

>     getenv("env_name")

ここで，env_name は環境変数名です．環境変数名は，" " で囲む必要があります．

### 2.24. 環境変数を設定する (setenv)

環境変数を設定する関数です．この関数の形式を以下に示します．

>     setenv("env_name", "variable")

ここで，env_name は環境変数名，variable は値です．環境変数名および値は，" " で囲む必要があります．

Last updated: 2005/11/12