我正在研究 fortran 中的特征值问题。我已经使用 Lapack 来解决问题并获得特征值和特征向量。这是为波数,由于对称性,只有一半的波空间,并且对于大域(海洋中)的每个网格点。我正在寻找每个网格点的最大特征值,并且我想不只是选择绝对最大值特征值矩阵,但在波空间中执行方位角平均 - 然后选择最大平均值。我正在努力寻找如何做到这一点。
起初我是这样编码的:
!波数域
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) and ly(i+1). 我宁愿需要在波空间中制作一个半圆来总结它之间的所有 omegai 值。有人能帮忙吗?
提前非常感谢!!
(顺便说一句:我也试过
DO m=1,ktot-1
DO l=1,ltot-1
ind=(raddist(m,l).GE.ly(l).AND.raddist(m,l).LT.ly(l+1))
length=count(ind)
WHERE (ind) average_omegai = sum(omegai)/length
END DO
END DO
但我现在对自己做错了什么视而不见!我的问题表述不同的是:在 Fortran 中是否有另一种方法可以在矩阵中找到满足某些标准的索引?Matlab 中的查找函数可以完成这项工作,但我没有在 Fortran 中找到等效的内在函数?)