..................の間がプログラム本体です program 11 .................. C とりあえず、関数の使い方を見るだけのために、 C 解説に使ったプログラムの完全版を program main real*8 x real*8 func x = 0.1 write(*,*)"x=",x," f=",func(x) x = 0.2 write(*,*)"x=",x," f=",func(x) end function func(x) real*8 func real*8 x func= x**3 + 5 * x*x - 3*x - 5 end .................. program 12 .................. C 関数サブプログラムの利用の続き C ニュートン法による非線形方程式の解 program main parameter(nmax=30) real*8 x,xtemp real*8 func,dfunc C 解探索の初期値 read(*,*)x C Newton法を最大nmax回くりかえす do irepeat = 1,nmax C 導関数の値が小さすぎるときは、精度が出ないので計算終了 if(abs(dfunc(x)).lt.1e-10)then write(*,*)"too small derivative at x= ",x stop C 導関数の値が大丈夫なら解の候補を計算 else xtemp = x - func(x)/dfunc(x) endif C xとxtempの差が与えた精度以内なら終了 if(abs((xtemp-x)/x).le. 1e-13)then write(*,*)"converged: x= ",xtemp stop else x=xtemp write(*,*)irepeat," step x=",xtemp endif enddo C nmax回のくりかえしで解に収束しなかったときは終了 write(*,*)"not converged after ",nmax," steps" write(*,*)"current value of x is ",xtemp end C 解を得たい関数 function func(x) real*8 func real*8 x func= x+cos(x) end C 解を得たい関数の導関数 function dfunc(x) real*8 dfunc real*8 x dfunc= 1-sin(x) end