--後半-- !入力データの設定 write(*,*) 'Input data:' open(unit=11,file='violin.dat') do i=1,N ※ここが分かりません!※ end do close (11) !======================================================================== !ライブラリを利用したフーリエ変換(作業領域作成と実行) call fftw_f77_create_plan(plan,N,FFTW_FORWARD,FFTW_ESTIMATE) !準備 call fftw_f77_one(plan,in,out) !実行 !======================================================================== !結果の変換 c(0:N-1)=out(1:N) a(0)=c(0) a(1:Ma)=dble( c(1:Ma)+c(N-1:N-Ma:-1) ) b(1:Mb)=dble( (c(1:Mb)-c(N-1:N-Mb:-1))*(0.0d0,1.0d0) ) !======================================================================== !結果の出力 write(*,*) 'Output data after forward FFT:' open(unit=22,file='ab-.csv') open(unit=21,file='c-.csv') do i=1,N write(21,'(i6,'','',1pe16.8,'','',1pe16.8)') i,out(i) end do write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') 0.0,a(0),0.0 write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') (i*df,a(i),b(i),i=1,Mb) if (Ma/=Mb) write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') Ma*df,a(Ma),0.0 close (21) close (22)
890 名前:デフォルトの名無しさん [2010/02/07(日) 15:59:09 ]
--ラスト--
!======================================================================== !フーリエ変換(作業領域消去) call fftw_f77_destroy_plan(plan) end program fft
ELEMENTAL INTEGER FUNCTION factorial(n) INTEGER, INTENT(IN) :: n INTEGER :: i factorial = PRODUCT( (/ (i, i = 1, n) /) ) RETURN END FUNCTION factorial
ELEMENTAL INTEGER FUNCTION permutation(n, r) INTEGER, INTENT(IN) :: n, r INTEGER :: i permutation = PRODUCT( (/ (i, i = n, n - r + 1, -1) /) ) RETURN END FUNCTION permutation
ELEMENTAL INTEGER FUNCTION combination(n, r) INTEGER, INTENT(IN) :: n, r combination = permutation(n, r) / factorial(r) RETURN END FUNCTION combination
PROGRAM twochannel USE m_2chan IMPLICIT NONE INTEGER :: n, k PRINT *, 'INPUT n and k' READ *, n, k PRINT *, 'nCk = ', combination(n, k) STOP END PROGRAM twochannel
>>908 数学的にチューニングすべきだが、提示された式のとおりに作った。PROGRAMは改行多杉になるので省略 integer function factorial(n) implicit none integer i, n i = n factorial = 1 do while(i .gt. 0) factorial = factorial * i i = i - 1; end do end integer function permutation(n, r) implicit none integer n, r, i i = 1 permutation = 1; do while(i .le. r) permutation = permutation * (n - i + 1) i = i + 1 end do end integer function combination(n, r) integer n, r, factorial, permutation combination = permutation(n, r) / factorial(r) end