포트란의 고유치 문제를 연구 중입니다. 나는 문제를 풀고 고유치와 고유 벡터를 구하기 위해 Lapack을 사용했다. 이것은 201x101 파동, 대칭으로 인한 파도 공간의 절반, 그리고 대양 (바다에서)의 각 그리드 포인트에 대해 수행됩니다. 각 격자 점에 대해 최대 고유치를 찾고 있는데, 201x101 행렬의 고유 값 행렬에서 절대 최대 값을 선택하는 것이 아니라 웨이브 공간에서 방위각 평균을 수행하고 최대 평균값을 선택하고자합니다. 나는 이것을하는 방법을 보면서 고심하고있다.포트란의 방위각 평균
처음에는 다음과 같이 코딩했습니다.
! 파수 도메인
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
! 방위각 평균
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
(omegai 제가 발견 고유치는 ktot * ltot 큰 행렬 임)하지만 난 (LY LY (i) 및 사이 K 방향 모두 파수에 대한 수평 청크를 합산하고 보인다 i + 1). 오히려 그 사이의 모든 오메가 (Omegai) 값을 합치려면 파도 공간에서 반원을 만들 필요가 있습니다. 아무도 이것으로 도울 수 있습니까? 미리 감사드립니다 !!
여기서 프로그래밍 문제는 볼 수 없습니다. 알고리즘에 대한 질문입니까? 내가 프로그래밍하기 전에 종이에 알고리즘을 해결하는 것이 좋습니다 것입니다. 일반적으로 인덱싱에 소문자'l'을 사용하는 것은 좋지 않습니다. – milancurcic
scicomp.stackexchange 알고리즘이 더 좋을 것입니다. –
감사합니다. 소문자 L은 어때? 숫자 1처럼 보이거나 실제 문제를 일으킬 수 있습니까? 좋은 습관이 아니면 어쨌든 그것을 바꿀 것입니다! :) 내 문제는 알고리즘이었습니다. 달리 다르게; Fortran에서 몇 가지 기준을 충족하는 매트릭스에서 인덱스를 찾는 다른 방법이 있습니까? Matlab의 find 함수는 작업을 수행 할 수 있지만 Fortran에서 동등한 내장 함수를 찾지 못했습니까? 내 코드는 내가 기대하는 것을 요약하지 못하기 때문에 나는 잘못된 것을하고있다. –