Arrays 如何绘制数组的实部和虚部?
我写了一个程序,计算一个样本的离散傅里叶变换,在这里我对一个正弦波进行采样。为了测试它,我需要绘制结果。但是,结果数组中填充了复杂的值 那么如何提取这些数组元素的实部和虚部,然后根据它们的索引绘制它们呢 这是我的密码:Arrays 如何绘制数组的实部和虚部?,arrays,fortran,gfortran,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,dime
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
谢谢。实数内在函数返回Fortran中复数的实数部分。它也是一个基本函数,因此对于复杂类型的数组,简单实数(array)将返回一个实数数组,其类型与包含所需结果的原始数组的类型相同 AIMAG内在函数返回Fortran中复数的虚部。它也是一个基本函数,因此对于complex类型的数组,simplely AIMAG(array)将返回一个与原始数组类型相同的真实数组,其中包含您想要的结果 或者,在Fortran 2003中,后者%re和%im可分别用于访问复变量的实部和虚部。关于其基本性质的评论再次适用
通过谷歌搜索很容易找到这些,或者更好,我认为每个Fortran程序员至少应该有一份Metcalf、Reid和Cohen的“现代Fortran解释”副本 可能重复的请修复您的类型-它们不是毫无意义的装饰,它们是您计算准确性的基础
%re
和%im
在gfortran中仍然不受支持