2.3 とりあえず2次元ベクトル場

今度は, 2次元のベクトル場を手早く矢印で見たいというときの例題です. 次 の QUICK5 は簡単な変形場を描くプログラムですが, GRPH2 の UGPACK にあるサブルーチン UGVECT 1つを呼ぶだけで十分です. 前節の等高線 図の場合と同様に, おまかせの座標軸を描画したあとで UGVECT ルーチ ンを呼んでベクトル場を描いています.

この例では, やはり, 等間隔の格子点を設定して, それぞれの格子点でのベク トルを矢印で表現します. おまかせ描画のときには, ベクトルの長さが格子点 間隔を越えないようにスケーリングファクターが決定され, それを乗じてベク トルが描かれます. この場合, x成分とy成分のスケーリングファクターは 同じになっていて, 図の下部マージンにはその値が表示されています.

ベクトル場も UGPACK のルーチンを使うことによって高度な作図ができるよ うになります. これも第10章で説明することにしましょう.

      PROGRAM QUICK5

      PARAMETER ( NX=21, NY=21 )
      PARAMETER ( XMIN=-1, XMAX=1, YMIN=-1, YMAX=1 )
      REAL U(NX,NY), V(NX,NY)

*-- 2次元ベクトルデータ: 変形場 ----
      DO 20 J=1,NY
        DO 10 I=1,NX
          X = XMIN + (XMAX-XMIN)*(I-1)/(NX-1)
          Y = YMIN + (YMAX-YMIN)*(J-1)/(NY-1)
          U(I,J) =  X
          V(I,J) = -Y
   10   CONTINUE
   20 CONTINUE

*-- グラフ ----
      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS

      CALL GROPN( IWS )
      CALL GRFRM

      CALL GRSWND( XMIN, XMAX, YMIN, YMAX )
      CALL GRSVPT(  0.2,  0.8,  0.2,  0.8 )
      CALL GRSTRN( 1 )
      CALL GRSTRF

      CALL USDAXS
      CALL UGVECT( U, NX, V, NX, NX, NY )

      CALL GRCLS

      END
PROGRAM QUICK5

\resizebox{10cm}{!}{\includegraphics{quick/quick5.eps}}
 
 
 
quick5.f: frame1

 

 

計算機のなまり 2

実数の内部表現

整数の内部表現は,ほとんどの機種で同一の表現となっているのに対して,実 数型変数に関してはいくつかの規格が存在します.

一般に,実数型の変数は浮動小数点の形で表現されます. すなわち,β進法を使った場合,実数は

±(0. f1 f2 f3 ... fm)β× β± E

という形で表されています. ここで,

±(0. f1 f2 f3 ... fm)β 
= ±(f1 ×β-1 +f2 ×β-2+f3 ×β-3+ …  fm×β-m)

 は仮数部で,fiは0からβ-1までの整数(f1 ≠ 0 )です. また,β± Eは指数部で,Eは0または正の整数です.

主要な実数表現として,IBM形式とIEEE(アイ・トリプル・イーと読む)形式と があります.どちらも,32ビットを1語とする点では同じですが,採用されて いる進法が異なり,表現できる実数の範囲や精度に違いがあります.

IBM形式は16進演算が基本になっていて,各ビットの使い方は以下の通りです.  

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
± E+64 f1 f2 f3 f4 f5 f6

IEEE形式は2進法の浮動小数点形式で,IBM形式に比べて相対精度が高いという 特徴があります.各ビットの使い方は以下の通りです.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
± E+124 f2・・・f4 f5 ・・・f8 f9 ・・・f12 f13・・・f16 f17・・・f20 f21・・・f24

このように,同じビット数で実数を表現しても,実数として表現できる範囲や 精度はシステムによって異なります.IBM形式で表される0でない実数は,絶対 値が5.397605× 10-79 〜 7.237005 ×1075の範囲であ り,相対誤差は 6× 10-8 〜 10-6 程度です. 一方, IEEE形 式では,絶対値が1.40129846 ×10-45 〜 3.40282347 ×1038 の範囲の実数が表現できて,相対誤差は 3× 10-8〜 6 ×10-8 程度です.

DCL では,このようなシステム依存の定数を MATH1/SYSLIB の GLRSET/GLRGET で管理しています.また,システムに依存する実数表現を解釈する道具が REALLIB です.

詳細は,MISC1 のマニュアル(dcl-x.x/doc/misc1/gaiyou/real.tex)を御覧下 さい.