5.2 f(ix)

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

# u1d1.rb

require "narray"
require "numru/dcl"

include NumRu
include Math

nmax = 51
xmin = 1945
xmax = 1995

y = NArray.sfloat(nmax)

#-- data ----
y0 = 0.5
for n in 0..nmax-1
  y[n] = 5.0*y0 + 10.0
  y0 = 3.7*y0*(1.0-y0)
end

rundef = DCL::glrget('RUNDEF')

#-- graph ----
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws
DCL::grfrm

DCL::grswnd(xmin, xmax, rundef, rundef)
DCL::ussttl('TIME', 'YEAR', 'TEMPERATURE', 'DEG')
DCL::usgrph(rundef, y)

DCL::grcls

program u1d1

\resizebox{10cm}{!}{\includegraphics{u1d/u1d1.eps}}
u1d1.rb: frame1