...

PV-WAVE 入門(プログラムを作ろう)

by user

on
Category: Documents
13

views

Report

Comments

Transcript

PV-WAVE 入門(プログラムを作ろう)
PV-WAVE 入門 :
プ ロ グ ラ ム を作ろ う
v1.4
目次
は じ めに ............................................................................................. 1
第 1 章 予備知識 ....................................................................... 2
1.1
カ レ ン ト デ ィ レ ク ト リ と サーチパ ス .................................2
第 2 章 プ ロ シージ ャ ............................................................... 4
2.1
2.2
2.3
2.4
プ ロ シージ ャ を作 る .............................................................4
引数付のプ ロ シージ ャ を作 る .............................................5
オプシ ョ ン キーワー ド を追加す る .....................................6
複数のプ ロ シージ ャ を同一フ ァ イ ルに記述す る .............7
第 3 章 関数............................................................................... 9
3.1
3.2
3.3
関数を作 る .............................................................................9
関数の実行 ...........................................................................10
関数使用例 ........................................................................... 10
第 4 章 簡単なプ ロ グ ラ ム を作 る ......................................... 13
4.1
4.2
4.3
4.4
フ ァ イ ルを選ぶ : WgFileSelection ....................................13
テ キ ス ト フ ァ イ ルを読み込む : Dc_Read_Free() .............14
グ ラ フ を表示す る : Plot .....................................................15
マ ウ ス で値を確認す る : Cursor ........................................15
第 5 章 簡単な GUI プ ロ グ ラ ム を作 る ................................ 18
第 6 章 PV-WAVE 言語 ・ 文法 ............................................. 21
6.1
6.2
演算子 ...................................................................................21
文法 .......................................................................................21
こ のテ キ ス ト で使用す る PV-WAVE コ マ ン ド ........................... 24
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
は じ めに
PV-WAVE はデータの解析・可視化ソフトです。お手持ちのデータの読込みから、折
れ線グラフ・等高線・鳥瞰図・3 次元の等値面・断面表示・地図等の表示が簡単に
出来ます。また、数学・統計計算や信号処理・画像処理の機能もある為、航空宇
宙・環境工学・エネルギー・金融・通信・自動車・化学・製薬・医療等幅広い分
野で利用されています。
PV-WAVE は Windows 及び UNIX/LINUX/Mac OS の各 OS 上で使用できます。OS コマン
ドの実行等幾つかのコマンドを除けば全ての OS 上で同じ様にお使い頂けます。勿
論、Windows 上で作成した PV-WAVE のコマンドやアプリケーションを LINUX 上で実
行するという様に異なる OS 間での互換性もあります。
PV-WAVE は、用途に応じて次の様に使い分ける事ができます。
① PV-WAVE ウインドウからコマンドを入力する対話処理を行う
② Navigator ツールを使い、 ほぼマ ウ ス操作だけでデー タ の読込み ・ 表示 ・ 出力
を行 う 。
③ 上記の①と②を併用する
④ プログラムを作成し一括処理をおこなう
このテキストは、④の方法についての入門編です。PV-WAVE のより詳細な情報及び
プログラムの作成方法に関しては別途トレーニングコースを用意しています。
無料マニ ュ アルダ ウ ン ロ ー ド
http://www.roguewave.jp/products/wave/documentation.html
有料 ト レーニ ン グ コ ース
http://www.roguewave.jp/tech/trg.html
こ の テ キ ス ト では操作及びキーボー ド か ら 入力す る コ マ ン ド は太字で表示 し て い ま
す。 太字で表記 さ れてい る PV-WAVE の コ マ ン ド を入力す る と 本文中に表示 さ れてい
る 図が表示 さ れ ます。尚、PV-WAVE の コ マ ン ド は大文字 ・ 小文字の区別はあ り ません。
キーボー ド か ら 入力 し た PV-WAVE の コ マ ン ド は最大 20 個ま で保存 さ れてい ます。( ヒ
ス ト リ ー機能 )
上矢印キー ( ↑ ) で前に入力 し た コ マ ン ド を再度呼び出す事がで き ます。 コ マ ン ド の再
実行や編集にご利用下 さ い。
では、PV-WAVE のプログラムを作って見ましょう。
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
1
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 1 章 : 予備知識
1.1 カ レ ン ト デ ィ レ ク ト リ と サーチパ ス
ユーザが作成 し たプ ロ シージ ャ や関数 ( 以下プ ロ グ ラ ム と 呼ぶ ) を実行す る には、作成
し たプ ロ グ ラ ムは以下のデ ィ レ ク ト リ / フ ォ ルダーになければな り ません。
• カレン ト ディ レ ク ト リ
• PV-WAVE のシ ス テ ム変数! Path で指定 さ れたデ ィ レ ク ト リ
1) カ レ ン ト デ ィ レ ク ト リ
PV-WAVE を立ち上げた時、 Windows 版では PV-WAVE イ ン ス ト ールフ ォ ル
ダー( デフ ォ ル ト は C:¥RW) がカ レ ン ト デ ィ レ ク ト リ と な り ます。ま た UNIX/
LINUX 版では PV-WAVE を実行す る コ マ ン ド (wave) を実行 し たデ ィ レ ク ト リ
がカ レ ン ト デ ィ レ ク ト リ と な り ます。
PV-WAVE では、 PWD コ マ ン ド でカ レ ン ト デ ィ レ ク ト リ を確認す る 事がで き
ます。
WAVE> PWD
ま た、 CD コ マ ン ド で カ レ ン ト デ ィ レ ク ト リ の 移動 が で き ま す。 例 え ば、
C:\VNI\BIN に
移動す る には、 移動先のデ ィ レ ク ト リ 名を文字列 と し て指定 し ます。 つま り 、
移動先のデ ィ レ ク ト リ 名を、 シ ン グル コ ーテーシ ョ ン (‘) 又はダブル コ ーテー
シ ョ ン (“) で囲っ て指定 し ます。
WAVE> CD, “C:\rw\wave\bin”
ま たは、
WAVE> CD, ‘C:\rw\wave\bin’
移動先のデ ィ レ ク ト リ 名の指定には相対パ ス指定 (./BIN 等 ) も で き ます。 ま
た、 Windows 版の場合フ ォ ルダー名に空白や日本語が入っ て も 問題あ り ませ
ん。
2) サーチパ ス
PV-WAVE のシ ス テ ム変数! Path は、 PV-WAVE コ マ ン ド のサーチパ ス を定義
し てい ます。 PV-WAVE の コ マ ン ド は こ のサーチパ ス で指定 し たデ ィ レ ク ト リ
ま たはカ レ ン ト デ ィ レ ク ト リ になければな り ません。 PV-WAVE の Print コ マ
ン ド で! Path の内容を確認で き ます。
WAVE> Print, !Path
シ ス テ ム変数! Path にサーチパ ス を追加す る には、 以下の様に区切 り 文字 と
追加す る パ ス を文字列 と し て! Path に加え ます。 例えば Windows 版の場合区
切 り 文字はセ ミ コ ロ ン (;) であ る 為、C:\tmp を サーチパ ス に追加す る には以下
の様にな り ます。
2
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
WAVE> !Path = !Path + “;C:\tmp”
一方 UNIX/LINUX の場合区切 り 文字は コ ロ ン ( : ) と な る 為、 /tmp を サーチパ
ス に追加す る には以下の様に入力 し ます。
WAVE> !Path = !Path + “:/tmp”
3 ) 作業環境の設定 (wavestartup)
カ レ ン ト デ ィ レ ク ト リ の移動やサーチパ ス !Path の変更は PV-WAVE を終了す
る と 初期化 さ れ ます。こ れ ら の処理を PV-WAVE 立ち上げ時に自動的に設定す
る には、wavestartup フ ァ イ ルに記述 し ます。wavestartup フ ァ イ ルは以下のデ ィ
レ ク ト リ ( フ ォ ルダー ) にあ り ます。
“PV-WAVE イ ン ス ト ールデ ィ レ ク ト リ /wave/bin”
wavestartup フ ァ イ ルはテ キ ス ト フ ァ イ ルですので、 エデ ィ タ で開いて フ ァ イ
ルの最後尾に処理内容を記述 し て く だ さ い。
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
3
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 2 章 : プ ロ シージ ャ
プ ロ シージ ャ は PV-WAVE のプ ロ グ ラ ム単位です。 PV-WAVE のプ ロ シージ ャ は一般の
エデ ィ タ ( メ モ帳 ・ Emacs 等 ) を使っ て作成 し 、 カ レ ン ト デ ィ レ ク ト リ ま たはサーチパ
ス (!Path) に記述 さ れたデ ィ レ ク ト リ に保存 し ます。 (PV-WAVE v9.0 からは Eclipse 用
PV-WAVE Plug-In が追加されました )
2.1 プ ロ シージ ャ を作 る
プ ロ シージ ャ 作成時の注意事項は以下の通 り です。
• PRO で始ま り END で終わ る
• プ ロ シージ ャ 名は PRO の直後空白を挟んで指定す る
• 引数があ る 場合はプ ロ シージ ャ 名の後に コ ン マ (,) で区切っ て並べ る
• PV-WAVE の コ マ ン ド は大文字小文字の区別がない
• セ ミ コ ロ ン (;) か ら 行末ま では コ メ ン ト
では実際にプ ロ シージ ャ を作っ てみま し ょ う 。始めに、乱数グ ラ フ を表示す る プ ロ シー
ジ ャ SampleP1.pro を作成 し ます。 エデ ィ タ で次の 3 行を入力 し 、 カ レ ン ト デ ィ レ ク ト
リ に SampleP1.pro と い う フ ァ イ ル名で保存 し て く だ さ い。
SampleP1.pro は 1 行目の “Pro” で始ま り 、 3 行目の “End” で終わっ てい ます。 1 行目の
“SampleP1” がプ ロ シージ ャ 名 と な り ます。
2 行目の “Plot” コ マ ン ド は折線グ ラ フ を表示 し ます。 “Randomu” コ マ ン ド は指定 し た
数 (20 個 ) の乱数を発生 し ます。
SampleP1 プ ロ シージ ャ を実行す る には、 PV-WAVE コ マ ン ド か ら プ ロ シージ ャ 名を入
力 し て く だ さ い。
WAVE> SampleP1
4
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
PV-WAVE 表示 ウ イ ン ド ウ が開 き 折線グ ラ フ
が表示 さ れ ま す。 SampleP1 プ ロ シージ ャ は
実行す る たびにグ ラ フ の形状が変わ り ます。
2.2 引数付のプ ロ シージ ャ を作 る
SampleP1 プ ロ シージ ャ では必ず 20 個の乱数を発生 さ せま し た。 次に、 プ ロ シージ ャ
実行時にデー タ 数を指定す る SampleP2 プ ロ シージ ャ を作成 し ます。 エデ ィ タ で次の 4
行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleP2.pro と い う フ ァ イ ル名で保存 し て く だ
さ い。
引数はプ ロ シージ ャ 名の後にカ ン マ (,) で区切っ て記述 し ます。SampleP2 プ ロ シージ ャ
では、 実行時に指定 さ れた引数はプ ロ シージ ャ 内の変数 “data_num” に与え ら れ、 その
数に よ り 発生 し た乱数のグ ラ フ を表示 し ます。 も し 、 SampleP2 プ ロ シージ ャ 実行時
に引数を指定 し なか っ た場合、 あ る いは引数 と し て 0 を与え た場合プ ロ シージ ャ のエ
ラ ー と な り ますが 2 行目の様な処理を記述 し ておけば data_num の初期値 と し て 10 が
与え ら れエ ラ ーは発生 し ません。 SampleP2 の実行例は以下の通 り です。
WAVE> SampleP2, 100
WAVE> SampleP2, 500
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
5
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
2.3 オプシ ョ ン キーワ ー ド を追加す る
通常の引数 と 同 じ 様にオプシ ョ ン キー ワー ド は、 プ ロ シージ ャ 名の後にカ ン マ (,) で区
切っ て記述 し ます。 書式は “ オプシ ョ ン キー ワー ド 名=変数名 ” です。 SampleP3 プ ロ
シージ ャ では、 乱数で発生 さ せた点群間を 3 次 ス プ ラ イ ン で補間す る キー ワ ー ド パ ラ
メ ー タ Spline を追加 し ます。 エデ ィ タ で次の 17 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に
SampleP3.pro と い う フ ァ イ ル名で保存 し て く だ さ い。
1 行目の “Spline=sflag” の左辺 Spline はオプシ ョ ン キー ワ ー ド 名です。sflag は指定 さ れ
た値を格納す る 変数名です。プ ロ シージ ャ 実行時に Spline キー ワ ー ド が指定 さ れなか っ
た場合、 4 行目の処理に よ り sflag には 0 が格納 さ れ ます。
6
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
Spline キー ワ ー ド に 1 以外が指定 さ れた場合、9 行目の IF 文に よ り 10 行目の Plot コ マ
ン ド のみが実行 さ れ ます。 こ れは通常の折線グ ラ フ です。 も し 1 が指定 さ れた場合、 11
行目の Else 文に よ り 12 ~ 15 行目が実行 さ れます。
5 及び 8 行目は コ メ ン ト 行です。 ま た、 9 行目及び 11 行目のセ ミ コ ロ ン (;) 以降 も コ メ
ン ト と な り ます。
SampleP3 の実行例は以下の通 り です。
WAVE> SampleP3, 10
WAVE> SampleP3, 10, Spline=1
ま たは
WAVE> SampleP3, 10, /Spline
こ こ で、 “/Spline” は “Spline=1” と 同 じ 意味です。 ど ち ら と も SampleP3 プ ロ シージ ャ の
sflag 変数には 1 が代入 さ れます。
2.4 複数のプ ロ シージ ャ を同一フ ァ イ ルに記述す る
1 つの フ ァ イ ルに複数のプ ロ シージ ャ を記述す る 場合は、 フ ァ イ ル名 と 同 じ 名前のプ
ロ シージ ャ を フ ァ イ ルの最後に記述す る 事 を お薦め し ま す。 ユーザ作成のプ ロ シー
ジ ャ を実行す る 場合、 フ ァ イ ル名 と 同 じ 名前のプ ロ シージ ャ 及びフ ァ イ ル名 と 同 じ 名
前のプ ロ シージ ャ よ り 前に記述 さ れてい る プ ロ シージ ャ は自動的に コ ンパ イ ル さ れ ま
すが、 それ よ り 後に記述 さ れてい る プ ロ シージ ャ は コ ンパ イ ル さ れません。
前節 2.3 で 作成 し た SampleP3.pro を 2 つ の プ ロ シ ー ジ ャ に 書 き 直 し た サ ン プ ル
SampleP4.pro を示 し ます。SampleP4.Pro には、Graph プ ロ シージ ャ と SampleP4 プ ロ シー
ジ ャ が記述 さ れてい ます。 Graph プ ロ シージ ャ は SampleP3 プ ロ シージ ャ のデー タ 作成
と グ ラ フ表示部分 (5 行目か ら 16 行目 ) で SampleP4 プ ロ シージ ャ か ら 呼ばれ ます。
SampleP4.pro の実行方法及び実行結果は SampleP3.pro と 同 じ にな り ます。
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
7
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
8
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 3 章 : 関数
関数は PV-WAVE のプ ロ グ ラ ム単位です。 PV-WAVE の関数は必ず何 ら かの値を返 し ま
す。 PV-WAVE の関数は一般のエデ ィ タ ( メ モ帳 ・ Emacs 等 ) を使っ て作成 し 、 カ レ ン
ト デ ィ レ ク ト リ ま たはサーチパ ス (!Path)に記述 さ れたデ ィ レ ク ト リ に保存 し ます。(PVWAVE v9.0 からは Eclipse 用 PV-WAVE Plug-In が追加されました。)
3.1 関数を作 る
関数作成時の注意事項は以下の通 り です。
• Function で始ま り END で終わ る 。
• Return 文で値を返す。 但 し 、 値の タ イ プやサ イ ズは問わない。
• 関数名は Function の直後空白を挟んで指定す る 。
• 引数があ る 場合は関数名の後に コ ン マ (,) で区切っ て並べ る 。
• PV-WAVE の コ マ ン ド は大文字小文字の区別がない。
• セ ミ コ ロ ン (;) か ら 行末ま では コ メ ン ト 。
では実際に関数を作っ てみ ま し ょ う 。 始めに、 配列デー タ を入力す る と 平均値 ・ 標準
偏差 ・ 合計を計算す る 関数 SampleF1.pro を作成 し ます。 エデ ィ タ で次の 16 行を入力
し 、 カ レ ン ト デ ィ レ ク ト リ に SampleF1.pro と い う フ ァ イ ル名で保存 し て く だ さ い
SampleF1 関数の 1 行目は Function 文の後に関数名 (SampleF1)、更に コ ン マ (,) で区切 ら
れて引数で与え ら れた配列デー タ を格納す る 変数 (data) が続 き ます。 3 行目の IF 文で
入力 さ れたデー タ の要素数をチ ェ ッ ク し 、2 個以下であればエ ラ ー メ ッ セージ を出力 し
-1 を返 し ます。 デー タ の要素数が 2 個以上であれば、 9 行目の Stdev 関数を使っ て平均
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
9
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
値 (mean) と 標準偏差 (sval) を計算 し ます。 更に、 12 行目の Total 関数を使っ て合計値
(tval) を計算 し ます。 計算 し た結果は 15 行目の Return 文で 3 要素の配列 と し て返 さ れ
ます。
SampleF1 関数の 2,8,11,14 行目は コ メ ン ト 行です。 ま た、7,10,13 行目の空白行は無視 さ
れます。
3.2 関数の実行
PV-WAVE の関数を実行す る 方法は次の 2 通 り です。 SampleF1 関数を例に実行 し てみ
まし ょ う。
1) 関数の返値を代入す る 変数を指定す る
WAVE> answer = SampleF1([1,2,3,4,5])
WAVE> Print, answer
上記の コ マ ン ド を実行す る と 以下の数値が表示 さ れます。こ れ ら は、[1,2,3,4,5]
の平均値が 3.0、 標準偏差が 1.58114、 合計値が 15.0 を意味 し ます。
3.000001.5811415.00000
ま た、 以下の コ マ ン ド を実行す る と よ り 判 り やすい表示にな り ます。
WAVE> Print, “ 平均値= ”, answer(0)
WAVE> Print, “ 標準偏差= ”, answer(1)
WAVE> Print, “ 合計値= ”, answer(2)
平均値= 3.00000
標準偏差= 1.58114
合計値= 15.00000
2) 関数の返値を他のプ ロ シージ ャ や関数に代入す る
関数を別のプ ロ シージ ャ や関数の引数 と し て直接指定す る 事がで き ます。
WAVE> idata = [1,2,3,4,5]
WAVE> Print, “ 平均値、標準偏差、合計値:”, SampleF1(idata)
平均値、 標準偏差、 合計値 : 3.00000 1.58114 15.0000
3.3 関数使用例
前述の3.1で作成 し たPV-WAVE関数SampleF1 を使っ てプ ロ シージ ャ を作成 し ま し ょ う 。
プ ロ シージ ャ SampleF2 は、 指定 し た数の乱数及びその平均値 と 標準偏差を グ ラ フ表示
し ます。 エデ ィ タ で次の 25 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleF2.pro と い う
フ ァ イ ル名で保存 し て く だ さ い。
10
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
プ ロ グ ラ ム フ ァ イ ル SampleF2.pro には関数 SampleF1 が記述 さ れてい ません。 こ の様
に、 同一フ ァ イ ル内に記述 さ れていない関数を使用す る 場合は、 SampleF2 の 7 行目に
あ る Declare Func コ マ ン ド で使用す る 関数を指定 し て下 さ い。 但 し 、 Declare Func で指
定す る のは関数のみで、 プ ロ シージ ャ は指定す る 必要はあ り ません。
プ ロ シージ ャ SampleF2 では、7 行目で関数 SampleF1 を呼び出 し てい ます。関数 SampleF1
で計算 さ れた結果 answer は、 8 行目の Print コ マ ン ド で出力 さ れ ます。 更に 14,15 行目
で平均値を青色の線でグ ラ フ に表示 し 、18 ~ 24 行目で標準偏差を紫色の線でグ ラ フ に
表示 し ます。
プ ロ シージ ャ SampleF2 の使用方法は、 “SampleF2 , デー タ 数 ” です。 例えば、 100 個の
デー タ を表示 さ せ る 場合は以下の様に入力 し ます。
WAVE> SampleF2, 100
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
11
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
グ ラ フ には、 100 個のデー タ が+印で表示 さ れ平均値が青線で表示 さ れ ます。 ま た、 “
平均値+ σ” 及び “ 平均値- σ の ” 値が紫の点線で表示 さ れます。
12
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 4 章 : 簡単なプ ロ グ ラ ム を作 る
PV-WAVE を使っ て、 テ キ ス ト 形式のデー タ フ ァ イ ル よ り デー タ を読み込み、 折れ線グ
ラ フ を表示す る 簡単なプ ロ グ ラ ム (ChkGraph.pro) を作成 し ます。 更に、 表示 し た グ ラ
フ を マ ウ ス で ク リ ッ ク す る 事に よ り グ ラ フ の座標を確認す る 機能を追加 し ます。
では、 エデ ィ タ を開 き プ ロ グ ラ ム ( プ ロ シージ ャ ) を作っ てみま し ょ う 。
4.1 フ ァ イ ルを選ぶ : WgFileSelection
PV-WAVE の標準プ ロ シージ ャ WgFileSelection を使えば、 フ ァ イ ルセ レ ク タ ーを使っ
た フ ァ イ ルの選択が可能です。 まず、 “ メ モ帳 ” や “vi”、 “Emacs”、 “Eclipse” 等のエデ ィ
タ ーを開 き 次の 6 行を入力 し て く だ さ い。
こ のプ ロ グ ラ ム を、“ChkGraph.pro” の名前でカ レ ン ト フ ォ ルダ ま たは PV-WAVE のシ ス
テ ム変数! Path に定義 し て あ る 作業フ ォ ルダに保存 し ます。 カ レ ン ト フ ォ ルダが分か
ら ない場合は
WAVE> PWD
で確認 し て く だ さ い。
こ のプ ロ グ ラ ム を コ ンパ イ ル ・ 実行す る と 、 下図の よ う な フ ァ イ ルセ レ ク タ が立ち上
が り ます。 適当な フ ァ イ ルを選んで “OK” ボ タ ン を押す と 、 選んだ フ ァ イ ルの絶対パ
ス名が表示 さ れます。
WAVE> Retall
WAVE> .run ChkGraph
WAVE> ChkGraph
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
13
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
4.2 テ キ ス ト フ ァ イ ルを読み込む : Dc_Read_Free()
PV-WAVE の標準関数、 Dc_Read_Free() でテ キ ス ト デー タ の読み込みを行い ます。 デー
タ はたて並びで も 横並びで も 構い ません。 デー タ 間はカ ン マ (,) ま たは空白 ( ) で区切
ら れていれば OK です。 ま た、 N_Elements() 関数で読み込んだデー タ の数をチ ェ ッ ク
で き ます。 ChkGraph.pro に以下の 6 ~ 8 行目を追加 し て く だ さ い。
プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ を
読み込みそのデー タ 数を表示 し ます。
WAVE> Retall
WAVE> .run ChkGraph
WAVE> ChkGraph
フ ァ イ ルセ レ ク タ ーで、 “C:\RW\wave\data\scattered.dat” を選択す る と デー タ フ ァ イ ル
内にあ る 全てのデー タ を読み込み、 そのデー タ 数を表示 し ます。 こ のデー タ フ ァ イ ル
はデー タ 間の区切 り は空白にな っ てい ます。
14
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
4.3 グ ラ フ を表示す る : Plot
PV-WAVE の標準プ ロ シージ ャ 、 Plot で折れ線グ ラ フ が表示で き ます。 ま た、 Max() 関
数及び Min() 関数 を 使 っ て 読み込 ん だ デー タ の 最大値 と 最小値 を 表示 で き ま す。
ChkGraph.pro に以下の 10 ~ 13 行目を追加 し て く だ さ い。
プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ の
折れ線グ ラ フ が表示 さ れます。
WAVE> Retall
WAVE> .run ChkGraph
WAVE> ChkGraph
フ ァ イ ルセ レ ク タ ーで、サン プルデー タ “C:\RW\wave\data\scattered.dat” を選択す る と
次の様な グ ラ フ が表示 さ れます。
4.4 マ ウ ス で値を確認す る : Cursor
PV-WAVE の標準プ ロ シージ ャ 、 Cursor でマ ウ ス で ク リ ッ ク し た点の座標を取得す る 事
がで き ます。 ま た、 マ ウ ス の右ボ タ ン / 左ボ タ ンの区別が PV-WAVE のシ ス テ ム変数!
Err で確認で き ま す。 こ こ では、 折れ線が表示 さ れた グ ラ フ上を マ ウ ス 左ボ タ ン で ク
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
15
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
リ ッ ク す る と その点のグ ラ フ座標を表示 し 、 右ボ タ ン で ク リ ッ ク す る と プ ロ グ ラ ム を
終了す る 処理を追加 し ます。 ChkGraph.pro に以下の 15 ~ 25 行目を追加 し て く だ さ い。
プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ の
折れ線グ ラ フ が表示 さ れます。
WAVE> Retall
WAVE> .run ChkGraph
WAVE> ChkGraph
フ ァ イ ルセ レ ク タ ーで、 サ ンプルデー タ “C:\VNI\wave\data\scattered.dat” を選択す る
と 次の様な グ ラ フ が表示 さ れ ますので、 マ ウ ス 左ボ タ ン で グ ラ フ内を ク リ ッ ク し て く
だ さ い。 グ ラ フ左下に座標が表示 さ れ ます。 マ ウ ス右 ク リ ッ ク で終了 し ます。
16
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
17
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 5 章 : 簡単な GUI プ ロ グ ラ ム を作 る
PV-WAVE には簡単な GUI(Graphical User Interface) 関数があ り ます。 GUI アプ リ ケー
シ ョ ン作成については、PV-WAVE Application Developper’s Guide を ご参照 く だ さ い。 ま
た、 各 GUI 関数の詳細及び使用例はオ ン ラ イ ンヘルプ を ご参照 く だ さ い。
ノ イ ズ付の Y=Sin(X) グ ラ フ を表示す る GUI プ ロ グ ラ ム SampleGUI.Pro を以下に示 し ま
す。
SampleGUI.Pro には、 次の 4 個のプ ロ シージ ャ が記述 さ れてい ます。
• SliderCB : ス ラ イ ダーが動か さ れた場合の処理を記述
• ButtonCB : ボ タ ン が押 さ れた時の処理を記述
• Dra w CB : グ ラ フ表示
• SampleGUI : GUI の作成 と 表示
18
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
プ ロ シージ ャ SampleGUI は GUI パネルを作成 し ます。
PV-WAVE で GUI プ ロ グ ラ ム を作成す る 場合、 最初に必ず WwInit 関数を指定 し ます。
(31 行目 )
SampleGUI.Pro の 36 行目で使用 し てい る WwDrawing 関数は GUI パネル上にグ ラ フ表
示ウ イ ン ド ウ を作成 し ます。 WwDrawing 関数に与え る 3 つ目の引数 ’DrawCB’ はグ ラ
フ表示プ ロ シージ ャ 名です。 プ ロ シージ ャ DrawCB にグ ラ フ表示プ ロ グ ラ ム を記述 し
ます。
SampleGUI.Pro の 38 行目で使用 し てい る WwControlBox 関数は GUI パネル上に ス ラ イ
ダーを作成 し ます。WwControlBox 関数に与え る 4 つ目の引数 ’SliderCB’ は ス ラ イ ダー
が動いた と き の処理を記述す る コ ールバ ッ ク プ ロ シージ ャ 名です。 こ の例題では、 ス
ラ イ ダーが動か さ れ る と ノ イ ズの倍率を変更 し グ ラ フ を再表示 し ます。
SampleGUI.Pro の 41 行目で使用 し てい る WwButtonBox 関数は GUI パネル上ボ タ ン を
作成 し ます。WwButtonBox 関数に与え る 3 つ目の引数 ’ButtonCB’ はボ タ ンが押 さ れた
時の処理を記述す る コ ールバ ッ ク プ ロ シージ ャ 名です。 こ の例題では、 ボ タ ン が押 さ
れ る と プ ロ グ ラ ム を終了 し ます。
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
19
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
SampleGUI.Pro の 43 行目で記述 し て あ る s=WwSetValue(Top,/Display) は GUI パネルを
表示す る コ マ ン ド です。 こ の処理は必ず必要 と な り ます。
SampleGUI.Pro の 44 行目で使用 し てい る WwLoop は GUI の イ ベン ト 待ちループです。
こ の コ マ ン ド を実行す る 事に よ り 、 ス ラ イ ダーが動か さ れた場合やボ タ ン が押 さ れた
時に SliderCB や ButtonCB の コ ールバ ッ ク プ ロ シージ ャ が実行 さ れ ます。
SampleGUI は以下の コ マ ン ド で実行 し ます。
WAVE> SampleGUI
ノ イ ズ倍率ス ラ イ ダーを動かす と 、 Y=Sin(X) 上に載っ てい る ノ イ ズの大 き さ が変更 さ
れ ます。 ま た、 終了ボ タ ン を押す と プ ロ グ ラ ムが終了 し ます。
20
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
第 6 章 : PV-WAVE 言語 ・ 文法
PV-WAVE は独自の言語を持っ てい ます。 従っ て、 PV-WAVE だけで高度な アプ リ ケー
シ ョ ン を構築す る 事がで き ます。 ま た、 C 及び Fortran と の イ ン タ ーフ ェ イ ス を持っ て
い ますので、 PV-WAVE か ら C 又は Fortran プ ロ グ ラ ム を実行で き ます。 更に、 C 又は
Fortran か ら PV-WAVE の コ マ ン ド やアプ リ ケーシ ョ ン を実行で き ます。
こ こ では、 PV-WAVE の演算子及び文法について説明 し ます。 こ れ ら の詳細に付 き ま し
ては、 PV-WAVE プ ロ グ ラ マーズガ イ ド を ご参照 く だ さ い。
6.1 演算子
1) 関係演算子
• EQ,NE,LE,LT,GE,GT
条件を満たせば 1 、 そ う でなければ 0 を返す
2) 論理演算子
• AND,OR,XOR,NOT
3) その他の演算子
• =,+,-,*,/
•
=は代入。 PV-WAVE では右辺のデー タ 型及びデー タ 値が左辺に代入
される
四則演算子は配列同士の計算 も 可能
^ , < , > , # ,MOD,[]
^ はべ き 乗、 <は最小演算 , >は最大演算 , #はマ ト リ ッ ク ス の積
,MOD は剰余 ,[] は配列指定
6.2 文法
1) 条件分岐
• IF ~ Then
例) If (I Eq 1) Then I=I+100
• IF ~ Then ~ Else
例) If (I Eq 1) Then I=I+100 Else I=-I
• Case ~ Of
:
EndCase
例) Case index Of
1 : Print,“ERROR!!”
0 : Plot, data
Else : Surface, data
EndCase
2) 繰 り 返 し
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
21
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
• For ~ Do ~
例 ) For I=0, 100 Do num=num+1
• While ~ Do ~
例) While (I Lt 10) Do Print,I
• Repeat ~ Until ~
例 ) Repeat a=2*a Until (a LT b)
3) ジ ャ ン プ
• GoTo, ~
例 ) Goto, NEXT_STEP
a=Sqrt(a)
NEXT_STEP:
a=a^2
4) ブ ロ ッ ク
• Begin
:
End
IF,Case,FOR,WHILE,REPEAT の処理文が複数の場合に使われ る 。 ど の制御 コ マ ン ド か
を区別す る 為に End の後には コ マ ン ド 名を追加す る 。
例 1) IF (I Eq 1) Then Begin
II=II+1
JJ=JJ-1
EndIf
例 2) CASE index Of
-1 : Begin
Print, “ERROR!!”
Return
End
1 : Plot, data
Else : Surface,data
EndCase
例 3) FOR I=10,100 Do Begin
data=Randomu(Seed,I)
Plot, data
Wait,1
EndFor
例 4)
22
WHILE (I Lt 1000) Do Begin
Readf, lun, a, b, c
Print, a, b, c
EndWhile
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
例 5)
REPEAT Begin
I=I+1
Print, I, I^2, Sqrt(I)
ENDREP Until (I Le 100)
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
23
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
こ のテ キ ス ト で使用す る PV-WAVE コ マ ン ド
こ のテ キ ス ト では以下の コ マ ン ド を使用 し てい ます。 各 コ マ ン ド の詳細はオ ン ラ イ ン
ヘルプで確認 し て下 さ い。
[ デー タ 表示 コ マ ン ド ]
• Plot
: ラ フ を表示す る
• Plots
: 点群を表示す る
• Oplot
: グ ラ フ を追加表示す る
• Xyouts
: 文字列を表示す る
• Surface
: 鳥瞰図を表示す る
• Window
: 表示 ウ イ ン ド ウ を作成す る
[ デー タ 生成 / 処理 コ マ ン ド ]
• Randomu
: 指定 し た数の乱数を生成す る
• Findgen
: 指定 し た要素数の配列を生成 し 、 0 か ら 連番の
値を与え る
• Spline
: ス プ ラ イ ン補間を行 う
• Stdev
: 与え ら れた数列の平均値、 標準偏差を返す
• Total
: 与え ら れた数列の合計を返す
• Sqrt
: 平方根を返す
• Sin
: 正弦値を返す
• Max
: 最大値を返す
• Min
: 最小値を返す
[GUI 生成 コ マ ン ド ]
• WwGetValue
: 指定 し た GUI の値を返す
• WwSetValue
: 指定 し た GUI に値を渡す
• WwInit
: GUI のベース パネルを生成す る
• WwLayout
: 指定 し た GUI に レ イ ア ウ ト を生成す る
• WwDrawing
: GUI 上に表示 ウ イ ン ド ウ を生成す る
• WwControlBox
: ス ラ イ ダーを生成す る
• WwButtonBox
: ボ タ ン を生成す る
• WwLoop
: イ ベン ト 待ちループ
[ その他の コ マ ン ド ]
24
• Pwd
: カ レ ン ト デ ィ レ ク ト リ 名を返す
• Cd
: カ レ ン ト デ ィ レ ク ト リ を移動す る
• Print
: 変数の値を表示す る
http://www.roguewave.jp
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
• Keyward_Set
: キー ワー ド がセ ッ ト さ れていれば 1、 いなけれ
ば 0 を返す
• Return
プ ロ シージ ャ や関数を終了す る 。 引数が与え ら
れた場合呼び出 し プ ロ グ ラ ム にその値を返す
• Declare Func
: 関数を定義す る
• Wait
: 指定 し た秒数だけ次の処理を待つ
• Readf
: 指定 し た フ ァ イ ルか ら デー タ を読込む
• WgFileSelection
: 指定 し た フ ァ イ ルの絶対パ ス を返す (GUI)
• Dc_Read_Free
: テ キ ス ト フ ァ イ ルか ら デー タ を読込む
• Cursor
: マ ウ ス座標を取得す る
• N_Elements
: デー タ 数を返す
ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社
25
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う
26
http://www.roguewave.jp
Fly UP