将共轭应用于实数组 (Fortran)
Apply conjugation to real array (Fortran)
在 Fortran 中,我有一个实数 real :: work(2*N)
类型的一维数组,它表示 N
复数。我对数组的声明没有任何影响。
稍后我需要在 work
上应用复杂的共轭。但是,conjg(work(:))
不起作用,因为它是实数类型。
有没有一种有效的方法可以说服编译器将 conjg
应用于我的数组?
使用复杂变量,COMPLEX :: temp(N)
并对其应用共轭。然后,您可以使用 REAL(temp)
和 AIMAG(temp)
剖析真实的和复杂的部分并将它们放回您的工作数组中。
不过,从一开始就将 work
设为复杂类型可能更好。
最简单的方法已经在HighPerformanceMark的评论中,只需将代表虚部的元素乘以-1即可。
您还可以在实数数组和复数数组之间使用equivalence
。它将只是一个阵列,但被视为既真实又复杂。也许不严格符合标准(不确定)但只要 N
不变就可以工作。
等效项用作:
real :: work(2*N)
complex :: cwork(N)
!both work and cwork point to the same data
equivalence (work, cwork)
work = some_initial_value
!this conjugates work at the same time as cwork because they are just different names for the same array
cwork = conjg(cwork)
在 Fortran 中,我有一个实数 real :: work(2*N)
类型的一维数组,它表示 N
复数。我对数组的声明没有任何影响。
稍后我需要在 work
上应用复杂的共轭。但是,conjg(work(:))
不起作用,因为它是实数类型。
有没有一种有效的方法可以说服编译器将 conjg
应用于我的数组?
使用复杂变量,COMPLEX :: temp(N)
并对其应用共轭。然后,您可以使用 REAL(temp)
和 AIMAG(temp)
剖析真实的和复杂的部分并将它们放回您的工作数组中。
不过,从一开始就将 work
设为复杂类型可能更好。
最简单的方法已经在HighPerformanceMark的评论中,只需将代表虚部的元素乘以-1即可。
您还可以在实数数组和复数数组之间使用equivalence
。它将只是一个阵列,但被视为既真实又复杂。也许不严格符合标准(不确定)但只要 N
不变就可以工作。
等效项用作:
real :: work(2*N)
complex :: cwork(N)
!both work and cwork point to the same data
equivalence (work, cwork)
work = some_initial_value
!this conjugates work at the same time as cwork because they are just different names for the same array
cwork = conjg(cwork)