我正在研究fortran中的特征值问题。我使用Lapack来解决问题并获得特征值和特征向量。这是针对201x101波数,由于对称性而仅为波长的一半,以及对于大域(在海洋中)中的每个网格点。我正在寻找每个网格点的最大特征值,我不仅要在201x101特征值矩阵中选择绝对最大值,而是在波形空间中执行方位角平均值 - 然后选择最大平均值。看到如何做到这一点,我感到很兴奋。
起初我把它编码为:
! Wavenumber域名
dx=4000.
pi = 4.*atan(1.)
DO m=1,ktot
kx(m) = -(2.*pi)/(dx) + ((m-1)*2.*pi)/(100.*dx)
END DO
DO l=1,ltot
ly(l)= ((l-1)*2.*pi)/(100.*dx)
END DO
!径向距离
DO m=1,ktot
DO l=1,ltot
raddist(m,l)=sqrt(kx(m)**2+ly(l)**2)
END DO
END DO
!方位角平均值(omegai是我发现的特征值,是一个ktot * ltot大矩阵)
DO i=1,ltot-1
ind=(raddist(:,i).GE.ly(i).AND.raddist(:,i).LT.ly(i+1))
length=count(ind)
WHERE (ind) average_omegai = sum(omegai)/length
END DO
但似乎我在k方向上的所有波数,在ly(i)和ly(i + 1)之间求和一个水平块。我宁愿在波浪空间中制作一个半圆来对它们之间的所有omegai值求和。有人能帮忙吗?在此先感谢!!
答案 0 :(得分:0)
首先,位于环内的格点数不是半径的简单函数。请参阅高斯圆问题 http://mathworld.wolfram.com/GausssCircleProblem.html
其次,Fortran 90的命令类似于Matlab中的find
函数。它被称为where
。
希望有所帮助。