구글 애드센스2 헤드라인

프로그래밍 언어 포트란 정말 잊혀져 가는 것인가 by 파란안개

Topic :: 프로그래밍 언어 포트란 정말 잊혀져 가는 것인가

혹시 C언어나 베이직과 같은 프로그래밍 언어를 배우신적 있으신가요? 컴퓨터 프로그래밍을 배운다는 것은 "알고리즘"과 함께 기계어, 그리고 고급언어 중에서는 프로그래밍 언어를 배운다고 볼 수 있는데요. 과거 필수 프로그래밍 언어였던 포트란이라는 언어는 최근 잊혀져 가고 있는듯 보입니다. 물론 아직도 여러 분야에서 다양한 방면으로 사용되고 있기는 합니다.

제가 말하는 부분은 바로 학생들이죠. 학생들이 가장 많이 접하는 언어는 분명 C언어일거라 생각되는데요. 물론 이외에도 상당히 많은 프로그래밍 언어들이 있으므로 그부분에 대한 언급은 생략하겠습니다. 포트란이라는 프로그래밍 언어는 정말 간결한것 같습니다. 

그래서 제가 배운 경우 "수치해석"이라는 과목에서 잘 사용할 수 있었죠. 정말 C언어로 해석하려면 상당한 시간이 소요되지만 포트란을 쓰면 시간을 단축시킬 수 있죠. 비주얼 포트란 프로그램도 있어서 비주얼 C, 비주얼 베이직처럼 작동시킬 수도 있습니다.

아래를 보시면 가우스 방법으로 선형방정식을 해석하는 포트란 프로그램을 보실 수 있습니다. 일단 한 번 살펴보실까요? ^^



C######################################################################C
C
C======================================================================C
C     A PROGRAM FOR SOLVING A LINEAR SYSTEM OF EQUATIONS 
C
C                        A*X = B
C
C     USING THE POINT GAUSS-SEIDEL (PGS) METHOD
C
      PROGRAM GAUSS_SEIDEL
      IMPLICIT REAL*8 (A-H,O-Z)   
      DIMENSION A(9),IA(4),JA(9),X(3),DX(3),
     +          B(3),R(3)
      DATA N,EPSILON /3,1D-6/
C
C     NOMENCLATURE
C     N : NUMBER OF THE SYSTEM OF LINEAR ALGEBRAIC EQUATIONS
c     B : RIGHT HAND SIDE OF THE SYSTEM (N)
C     X : SOLUTION VECTOR (N)
C     DX : CHANGE OF THE SOLUTION VECTOR (N)
C     R : RESIDUAL OF THE SYSTEM (N)
C     ITER : NUMBER OF ITERATIONS SWEPT
C     EPSILON : CONVERGENCE CRITERION TO STOP ITERATION 
C     A() : NON-ZERO ELEMENTS OF THE COEFFICIENT MATRIX
C     JA() : COLUMN POSITIONS OF ELEMENTS IN A
C     IA() : POSITION IN A & JA OF THE FIRST ENTRY
C            FROM ROW I. THE LAST ENTRY IS N+1
C
C     INITIALIZATION
C
      A(1)=1D0
A(2)=0D0
A(3)=0D0
A(4)=0D0
A(5)=1D0
A(6)=0D0
A(7)=0D0
A(8)=0D0
A(9)=1D0
c
B(1)=1D0
B(2)=1D0
B(3)=1D0
c
IA(1)=1
IA(2)=4
IA(3)=7
IA(4)=10
c
JA(1)=1
JA(2)=2
JA(3)=3
JA(4)=1
JA(5)=2
JA(6)=3
JA(7)=1
JA(8)=2
JA(9)=3 
      ITER = 0
      DO 1 I=1,N
         X(I)=0D0
 1    CONTINUE
C
C     RESIDUAL OF PGS-ITERATION
      DO 5 I=1,N
         R(I)=B(I)
         DO J=IA(I),IA(I+1)-1
            R(I)=R(I)-A(J)*X(JA(J))
         END DO
 5    CONTINUE
C
C     PGS-ITERATION
 10   ITER=ITER+1
C
C     FORWARD SUBSTITUTION
      DO 15 I=1,N
         DO J=IA(I),IA(I+1)-1
            IF(JA(J).LT.I) THEN
               R(I) = R(I)-A(J)*DX(JA(J))
     ELSE IF (JA(J).EQ.I) THEN
               DX(I) = R(I)/A(J)  
            END IF
         END DO
 15   CONTINUE
C
C     CORRECTION OF SOLUTION VECTOR
      DO 20 I=1,N 
         X(I)=X(I)+DX(I)     
 20   CONTINUE
C
C     RESIDUAL OF PGS
      RES=0D0
      DO 25 I=1,N 
         R(I)=B(I)
         DO J=IA(I),IA(I+1)-1
            R(I)=R(I)-A(J)*X(JA(J))
         END DO
         RES=RES+R(I)**2
 25   CONTINUE
      RES=SQRT(RES/FLOAT(N))
      write(6,*) iter,res
C     STOPPING TEST
C
      IF(RES.GT.EPSILON) GO TO 10
DO I=1,N
  write(6,*) x(i)
END DO
      STOP
      END


정말 이 프로그램을 온전히 이해한다면 선형대수학과, 수치해석 그리고 선형방정식 분야의 수학까지 잘 알고 있다고 할 수 있죠. 그러지 않고는 작성할 수 있는 프로그램이 아니니까요. 물론 많은 프로그램 소스가 존재할거라고 생각되는데요. 그 소스를 통해 수정하면서 프로그래밍을 할 수도 있겠지만, 위의 예제처럼 한 번쯤은 알고리즘을 직접 그려서 본인만의 프로그래밍을 하는 것도 학교에서 경험할 수 있는 좋은 것들 중 하나라고 생각되네요.

오래간만에 포트란 프로그램 소스를 보니 새로워서 이렇게 포스팅을 해보았습니다. 저도 "전문가"는 아니어서 잘 모르는 부분이 너무 많답니다. ^^


이글루스 가든 - 365일 쓰는 긍정의 한줄

덧글

  • 솔라 2015/02/16 15:35 # 삭제 답글

    잘보고갑니다 요즘 포트란 배우고 있는중인데
    아직 과학이나 공학 분야에서는 많이 쓰이는거같더군요 ㅎㅎ
댓글 입력 영역

애드핏 가로형