如何计算数组中每个复数的大小?

时间:2018-02-25 20:37:50

标签: fortran gfortran

我试图测试计算信号的离散傅立叶变换的程序,即正弦波。为了测试它,我需要绘制我的结果。但是,结果是一个大小为N的数组(当前为400),并且填充了复数形式的 z = x + iy 。所以我知道要测试它我需要绘制这些结果,为此我需要绘制 | z | 。这是我的计划:

program DFT
implicit none
integer :: k, N, x, y, j, r, l, istat, p
integer, parameter :: dp = selected_real_kind(15,300)
real, allocatable,dimension(:) :: h
complex, allocatable, dimension(:) :: rst
complex, dimension(:,:), allocatable :: W
real(kind=dp) :: pi
p = 2*pi
!open file to write results to
open(unit=100, file="dft.dat", status='replace')

N = 400
!allocate arrays as length N, apart from W (NxN)
allocate(h(N))
allocate(rst(N))
allocate(W(-N/2:N/2,1:N))

pi = 3.14159265359
!loop to create the sample containing array
do k=1,N
  h(k) = sin((2*pi*k)/N)
end do

!loop to fill the product matrix with values
do j = -N/2,N/2
do k = 1, N

    W(j,k) = EXP((2.0_dp*pi*cmplx(0.0_dp,1.0_dp)*j*k)/N)

end do
end do
!use of matmul command to multiply matrices
rst = matmul(W,h)
print *, h, w
write(100,*) rst

end program

所以我的问题是如何获取阵列中所有单个复数的大小?

1 个答案:

答案 0 :(得分:5)

ABS内部函数返回Fortran中复数的大小。它也是一个元素函数,因此对于复杂类型的数组,简单的ABS(数组)将返回一个真实数组,其类型与包含所需结果的原始数组相同。