如何绘制数组的实部和虚部?

时间:2018-02-26 23:46:50

标签: arrays fortran gfortran

我编写了一个程序来计算样本的离散傅立叶变换,在这种情况下我正在采样一个正弦波。为了测试它,我需要绘制结果。但是,结果数组中填充了复数值。

那么如何提取这些数组元素的实部和虚部,然后根据它们的索引绘制它们呢?

这是我的代码:

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

N = 10
!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 fill the sample containing array
do k=1,N
  h(k) = sin((2*k*pi)/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 :(得分:1)

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

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

或者在Fortran 2003中,后者%re和%im可用于分别访问复变量的实部和虚部。关于其元素性质的评论再次适用。

这些很容易通过谷歌搜索找到,或者更好我认为每个Fortran程序员至少应该访问Metcalf,Reid和Cohen的副本“Modern Fortran Explained”。