おまかせ一次元図

[here]節のプログラム STEP1 では,x 座標値の配列を 宣言して等間隔に値を代入し,UULIN で f(x) 型の一次元図を描きま したが,これはちょっと大げさな気もします.USGRPHUULIN などのサブルーチンで「未定義値」をうまく使うと,x または y 方向の 座標値が等間隔な f(x) や g(y)型のグラフを簡単に作図できます.

基本概念(5): 内部変数「未定義値」

DCLでは xxpGET, xxpSET 型の内部変数管理ルーチンが多く使わ れています(いままで一度もお目にかかっていませんが). xx は通常パッ ケージの先頭2文字で,p は変数の型によって,I(整数型), R(実数型), L(論理型), C(文字型)のうちのひとつになります. 内部変数はそれぞれのパッケージ毎に数多くあり,「未定義値」'RUNDEF' もそのような実数型内部変数のひとつで,SYSLIB パッケージで管 理されています.一般に,内部変数は,あらかじめシステムが用意した値「初 期値」をデフォルトで保持しています.'RUNDEF'の場合,この値を GLRGET ルーチンによって参照し,GLRSET ルーチンによって変更 することがでます.

ところで,'RUNDEF' は「ユーザーが陽に指定していない」ことを表す 内部変数で,その値 RUNDEF を「未定義値」と呼びます.これまで,お まかせサブルーチンの説明で「○○が陽に指定されていなければ」というくだ りがいくつかでてきましたが,これは「○○が RUNDEF に等しい時には」 ということだったのです.この RUNDEFUSGRPH ルーチンなど の引数に用いると,x または y の座標値を「おまかせ」にすることが出 来ます.

この RUNDEF の値は初期値として -999. が与えられていますが,こ の値が不都合な時(例えば,-1000 から -999 までのグラフを描く場合な ど)は GRFRM ルーチンを.呼.ぶ.前に CALL GLRSET('RUNDEF', -999999.) などとして未定義値の値を変更しておきます.GRFRM ルー チンでこの RUNDEF を使っているからです.

f(iΔx)

次のプログラム例 U1D1 では,x 方向には [1945, 1995] の範囲で等 間隔に点をとり,y 方向には配列Yで与えられた座標値を結んで折れ 線を描きます.25行めの USGRPH ルーチンで X を指定するかわ りに RUNDEF を指定する(つまり,X は定義されていないと宣言 する)と,USGRPH は x 座標値がウインドウの幅いっぱいに等間隔に ならんでいるものと解釈してグラフを描きます.このとき,USGRPH が 呼ばれる前に x 方向のウインドウは決まっていないといけませんから, GRSWND ルーチンで x 方向だけを陽に与えています.ここでも,y 方向は未定義にして,正規化変換の確定は USGRPH におまかせします. なお,RUNDEF の値は,13行めの GLRGETルーチンで参照していま す.

u1d/u1d1.f


u1d1.f: frame1

g(jΔy)

前節と同様に,y 方向に座標値が等間隔な場合にも,Y を指定するか わりに RUNDEF を指定します.次のプログラム U1D2 では,USSPNT, UUMRK, UULIN の各ルーチンで Y を未定義値と しています.ここでは USSPNT ルーチンを使ってウインドウを決め,ビュー ポートの設定は初期値に頼りますので,GRSTRF ルーチンの前に USPFIT を呼んでいることを再確認しておきましょう.なお,変換関数番号を 3として,片対数座標にしています.

u1d/u1d2.f


u1d2.f: frame1


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:12:32 EDT 1995