2014-09-04 7 views
4

Я работаю над проблемой собственных значений в 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). Мне нужно сделать полукруг в волновом пространстве, чтобы суммировать все омегаи-значения между ними. Может кто-нибудь помочь с этим? Заранее спасибо!!

+1

Здесь я не вижу проблемы с программированием. Ваш вопрос об алгоритме? Я бы рекомендовал разработать алгоритм на бумаге перед программированием. В общем, не рекомендуется использовать строчные буквы 'l' для индексирования. – milancurcic

+2

Для алгоритма scicomp.stackexchange было бы лучше. –

+0

Спасибо! Что относительно нижнего регистра L? Это потому, что это похоже на номер 1 или может вызвать реальную проблему? Я все равно изменю, если это не очень хорошая привычка! :) Моя проблема была в алгоритме. Иными словами; есть ли другой способ в Fortran найти индексы в матрице, которые соответствуют некоторым критериям? Функция find в Matlab выполнит эту работу, но я не нашел эквивалентную внутреннюю функцию в Fortran? Мой код не суммирует то, что я ожидаю, поэтому я делаю что-то неправильно. –

ответ

0

Во-первых, число точек решетки, лежащих внутри кольца, не является простой функцией радиуса. См. Проблема окружности Гаусса http://mathworld.wolfram.com/GausssCircleProblem.html

Во-вторых, Fortran 90 имеет команду, аналогичную функции find в Matlab. Он называется where.

Надеюсь, что это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^