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

Fortran 如何计算数组中每个复数的大小?,fortran,gfortran,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(1

我正在尝试测试一个程序,该程序计算信号的离散傅里叶变换,即正弦波。为了测试它,我需要绘制我的结果。但是,结果是一个大小为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

所以我的问题是如何计算数组中所有单个复数的大小

ABS内在函数返回Fortran中复数的大小。它也是一个基本函数,因此对于复数类型的数组,ABS array将返回一个实数数组,该实数数组的类型与包含所需结果的原始数组的类型相同。

ABS内在函数返回Fortran中复数的大小。它也是一个基本函数,因此对于复杂类型的数组,ABS array将返回一个与原始数组类型相同的实数数组,其中包含您想要的结果。

上述程序在某些方面相当奇怪。首先,pi在使用前没有设置值。其次,大多数实数常量和复数常量都有dp类型,其中大多数变量都是默认类型的-我建议你让它们保持一致。上述程序的可能重复在几个方面都很奇怪。首先,pi在使用前没有设置值。其次,大多数实数常量和复数常量都有dp类型,其中大多数变量都是默认类型的-我建议您使它们保持一致