火曜日3,4限
環境・建設計算機実習T


アルゴリズムの基礎(FORTRAN演習)  関数
 

    1.組み込み関数

      組み込み関数一覧

    2.文関数

     
    3.外部関数


 

1.組み込み関数

 組み込み関数は数学的な基本関数を集大成したものであり、その手続きはすでに定義され、コンピュータ・システムに標準的に組み込まれている。プログラムを作成するときには個々の関数名を記述するだけで、当該関数を使用することができる。組み込み関数という名称は、関数がすでにコンピュータ・システムに組み込まれていることに由来する。 
組込み関数一覧
  
   PROGRAM PAISMP 

   DOUBLE PRECISION FA,FB,F2,F4,(※倍精度宣言) 
   &        X,A,B,H,VPAI,PAI 
   (※&は上行から続く) 
   PAI=3.141592D0 (※DOは倍精度を意味する) 
   N=1 
   A=0 
   B=1 
  10 H=(B - A)/(2 * N) 
   F2=0 
   F4=0 
C 
   DO 20 I=1, 2*N-1 
    X=A+H*I 
    ND=MOD(I,2)      (※組込み関数一覧参照) 
    IF(ND.EQ.0) F2=F2+SQRT(1-X**2) 
    IF(ND.NE.0) F4=F4+SQRT(1-X**2) 
  20 CONTINUE 
C 
   FA=DSQRT(1-A**2) 
   FB=DSQRT(1-B**2) 
   VPAI=4*(H/3)*(FA+4*F4+2*F2+FB) 
   IF(VPAI.GT.PAI) STOP 
    WRITE(6,100) 2*N, VPAI 
 100 FORMAT(1H,'KAISU',I6,' : PAI =',F10.6) 
                (※ファイルの入出力参照) 
   N=N*2 
   GO TO 10 
   END

例題 シンプソン法によるπの算出
 

 

2.文関数

 文関数はプログラム作成者が組み込み関数などを利用し、その手続きを定義するものである。それゆえ、文関数は組み込み関数よりも複雑な関数を作り出すことができる。文関数の定義は、文関数定義分と呼ばれる非実行文によっておこなわれる。文関数という名称は関数が一つの”文”として定義されることに由来する。
 
   PROGRAM SFPRG 

   DOUBLE PRECISION F1,F2,X1,X2,X   (宣言文記述領域)

   F1(X1)=0.25*SIN(X1)+0.34*COS(X1)  (文関数定義文記述領域) 
   F2(X2)=1.27*(F1(X2)+0.64)+SIN(X2)
   DO 10 X=1., 2., 0.05        (実行文記述領域) 
    Y=(F1(X)+F2(X))/2. 
    WRITE(6,*) X, Y 
  10 CONTINUE 
   STOP 
   END
例題 2つの文関数定義文で定義される三角関数の相加平均を求める
 
 

3.外部関数

 外部関数は文関数と同様に、プログラム作成者がその手続きを定義する。しかし、外部関数の手続きは文関数のように1つの文としてではなく、独立した1つのプログラムとして定義されるので、外部関数は文関数よりもはるかに複雑で柔軟性に富む関数を作成することが可能である。外部関数という名称は、プログラムの”外部”に別のプログラムとして関数が定義されていることに由来する。
 
   PROGRAM FNTST1 

   READ(5,*) X 
   IF(X.LT.0) THEN 
    F=SIN(X)+2*X+1 
   ELSE IF(X.LE..1) THEN 
    F=X**2-X+1 
   ELSE IF(X.GT.1) THEN 
    F=LOG10(X) 
   END IF 
   WRITE(6,*) F 
   STOP 
   END

   PROGRAM FNST2 

   READ(5,*) X 
   A=FNC(X) 
   WRITE(6,*) A 
   STOP 
   END 
C 
   FUNCTION FNC(X) 
   IF(X.LT.0) THEN 
    FNC=SIN(X)+2*X+1 
   ELSE IF(X.LE..1) THEN 
    FNC=X**2-X+1 
   ELSE IF(X.GT.1) THEN 
    FNC=LOG10(X) 
   END IF 
   RETURN 
   END

例題 単一のプログラム(左)と外部関数を用いたプログラム(右)

 

 主プログラムFNTST2と関数副プログラムFNCの組は、プログラムFNTST1と全く同じ処理をおこなう。 

 FUNCTION FNC(X)はFUNCTIONと呼ばれる。この文はプログラムが関数副プログラムであることを示す。FUNCTION文に指定されたFNC(X)のFNCは外部関数名であり、Xは文関数定義文と同様の仮引数である。 

外部関数の手続きは関数副プログラムFNTST2(右側プログラム)のFUNCTION…よりも下の部分であり、それは複数の実行分によって記述される。この手続きの内容はプログラムFNTST1(左側プログラム)と同様であることに注意する。文関数は1つの文(文関数定義文)によってしか記述することができないが、外部関数はこのように複数の文によって記述することができる。 

外部関数FNCの引用は、FNTST2の主プログラム(PROGRAMから1番目のENDまで)の代入文 

A=FNC(X)

によって行われている。式中のXは分関数と同様の実引数である。外部関数の引用方法は文関数と同じであり、実行文の式に外部関数名を記述すればよい。外部関数が引用されると、結果は外部関数名にセットされる。

 


質問・意見等
 
940-2188 新潟県長岡市上富岡町1603-1 長岡技術科学大学 環境・建設系
  環境・建設計算機実習T 一部担当
  犬飼 直之(内線 9624)inu@nagaokaut.ac.jp
  渡辺 康夫(内線 9638)watana@nagaokaut.ac.jp

GLESCO
( GLobe, EStuary and COast )
Hydrauric Engineering Lab. Nagaoka University of Technology