2012-12-18 68 views
1

這是我在Fortran 90的無限循環使用Fortran

program final 
    implicit none 
    real, dimension(421,422) :: a 
    real :: temp,factor 
    real, dimension (421) :: soln 
    integer :: i, rmax, pivot, row,n, O,P,COL,k,a_j,n2,a_i,t 

    open(unit=177241,file="input_21.txt",status="old") 
    open(unit=20,file="output.txt",status="unknown") 

    do i =1,421 
     read (177241,*) (a(i,:)) 
    end do 
    do i = 1,421 
     print *,a(i,13) 
    end do 
    do T=1,421 
     n=421 
     a_i=n 

     n2=422 
     a_j=n2 

    !pivoting 
     do pivot = T,n-1 
     print *, 'pivot=',pivot 
     rmax = pivot 
     do row = pivot,a_i 
      if (ABS(a(rmax,pivot)) < ABS(a(row,pivot))) then 
       rmax=row 
      end if 
     end do 
     if (rmax /= pivot) then 
      do k=1, a_j 
       temp = a(rmax,k) 
       a(rmax,k) = a(pivot,k) 
       a(pivot,k) = temp 
      end do 
     end if  
    !elimination  
     do row = pivot+1, n 
      if (a(pivot,pivot) /= 0) then 
       factor = (a(row,pivot))/(a(pivot,pivot)) 
       print *,'factor=',factor 
       do col = 1, n2 
        a(row, col) = a(row,col) - a(pivot,col) * factor 
        print *,'a=',a(row,col) 
       end do 
      end if 
     end do  
     end do 
    end do 
    !back-substitution 
    soln(n2) = 0 
    do o=n,1,-1 
     do p=n2,o+1,-1 
     a(o,n2) = a(o,n2) - soln(p)*a(o,p) 
     end do 
     soln(o) = a(o,n2)/a(o,o) 
    end do   
    do i=1,n 
     print *,soln(i) 
     write (121,*) soln(i) 
    end do 
end program final 

代碼輸入文件是441x442矩陣txt文件。我認爲這可以讀取輸入文件,但這將是一個無限循環在這裏

if (a(pivot,pivot) /= 0) then 
    factor = (a(row,pivot))/(a(pivot,pivot)) 
    print *,'factor=',factor  
    do col = 1, n2 
     a(row, col) = a(row,col) - a(pivot,col) * factor 

我該如何解決這個問題?

+3

什麼是無限屋頂?你的意思是無限循環還是無限根? – Ben

回答

3

如果您在本正確的縮進,你會看到下面的循環結構(忽略數學部分):

do T=1,421 
     do pivot=T,420 
      do row=pivot+1,421 
      do col=1,422 
       print *,a 
      enddo 
      enddo 
     enddo 
    enddo 

這不是你有一個無限循環,你只是打印a(row,col)屏幕522,326,280次(如果你把它放到一個我不推薦的文件中,你的文件夾中會有一個11GB的文件!)。如果您註釋掉關於afactorprint陳述,但留在pivot的陳述中,它將在大約3分鐘內運行。忽略所有print聲明,它僅在幾秒鐘內運行。不用說,你可能不應該在屏幕上放置超過10行的東西。