Я работаю над проблемой собственных значений в fortran. Я использовал Lapack для решения проблемы и получения собственных значений и собственных векторов. Это делается для волновых чисел 201x101, только половина пространства из-за симметрии и для каждой точки сетки в большой области (в океане). Я ищу максимальное собственное значение для каждой точки сетки, и я хотел бы не просто выбрать абсолютный максимум в матрице 201х101 собственных значений, а выполнить азимутальное среднее значение в волновом пространстве, а затем выбрать максимальное среднее значение. Я боюсь видеть, как это сделать.Азимутальное среднее значение fortran
Сначала я закодированы это так:
! домен Волновое
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
! Radial расстояние
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
Но, кажется, я суммирование горизонтального куска для всех волновых чисел в к-направлении, между Ly (I) и Ly (я + 1). Мне нужно сделать полукруг в волновом пространстве, чтобы суммировать все омегаи-значения между ними. Может кто-нибудь помочь с этим? Заранее спасибо!!
Здесь я не вижу проблемы с программированием. Ваш вопрос об алгоритме? Я бы рекомендовал разработать алгоритм на бумаге перед программированием. В общем, не рекомендуется использовать строчные буквы 'l' для индексирования. – milancurcic
Для алгоритма scicomp.stackexchange было бы лучше. –
Спасибо! Что относительно нижнего регистра L? Это потому, что это похоже на номер 1 или может вызвать реальную проблему? Я все равно изменю, если это не очень хорошая привычка! :) Моя проблема была в алгоритме. Иными словами; есть ли другой способ в Fortran найти индексы в матрице, которые соответствуют некоторым критериям? Функция find в Matlab выполнит эту работу, но я не нашел эквивалентную внутреннюю функцию в Fortran? Мой код не суммирует то, что я ожидаю, поэтому я делаю что-то неправильно. –