2016-07-26 2 views
-3

나는 이것에 잠시 붙어 있습니다. Fortran90에서 시뮬레이션을 실행했습니다. 이요약 출력

 1 1.00000000  1.00000000    1 
     2 1.00000000  2.00000000    4 
     3 1.00000000  3.00000000    3 
     4 1.00000000  4.00000000    4 
     5 1.00000000  5.00000000    4 
     6 1.00000000  6.00000000    4 
     7 1.00000000  7.00000000    4 
     8 1.00000000  8.00000000    2 
     9 1.00000000  9.00000000    4 
     10 1.00000000  10.0000000    4 
     11 1.00000000  11.0000000    5 
     12 1.00000000  12.0000000    5 
     13 1.00000000  13.0000000    4 
     14 1.00000000  14.0000000    5 
     15 1.00000000  15.0000000    6 

첫번째 열은 개인 이러한 나타내는 것처럼

program epidemic 
implicit none 

!!!variable declaration 
integer, parameter::n=625 
real, dimension(1:n)::x,y 
real :: alpha, beta, epsilon, dist, prob, u 
    integer, dimension(1:n) :: infections 
integer:: T, I1, I2, I3, i, j, K2, infperiod, k, tmax 


!!!!!!!!!! paramater value 
tmax=11 
alpha=0.4 
gamma=9 

!!Generate population!! 
I3=1 
Do I1=1, 25, 1 
    Do I2=1,25,1 
     x(I3)=REAL(I1) 
     y(I3)=REAL(I2) 
     Infections(I3)=0 
     I3=I3+1 

    ENDDO 
ENDDO 



!!!INITIAL INFECTION!!! 

call random_number(u) 
k2=1+aint(u)*n 
infections(k2)=1 








!!!! initial infection !!!!!! 
    call random_number(u) 
      IF (prob >= u) THEN 

     END IF 
    END IF 



    ENDDO 
    enddo 



!!! output data 

!!! writing and saving 

Do i= 1, n 

    write(*,*) i, x(i), y(i) 
ENDDO 



end program epidemic 

내 시뮬레이션의 결과 나, (625)은 제 2 및 제 3 열은 매트릭스 인덱스 1을 나타내고, = 것으로 보이는 데이터 프레임 [i, j]. 네 번째 열은 사람이 감염을받는 시간 (1:15 일)을 나타냅니다. 출력을 단 두 개의 열로 테이블화할 수 있기를 원합니다.

설명하기 만하면 많은 사람들이이 날에 감염된 것을 보여주는 새로운 변수를 만들고 싶습니다.

그래서, 625 행의 출력은 지금은 있다고 ...이

      AT Day=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
    Total of infected individual =3 5 6 7 11 8 0 1 ........... 

같은 이것은 당신이 시작 얻어야한다 아주 아주 많이

+0

답변의 근거가되는 중요한 코드를 삭제하여 질문을 훼손하지 마십시오. –

답변

0

된다 무엇을 가지고 있는지 확인해보십시오.

새 선언 추가

integer, dimension(15) :: infection_day 

16,하고, 기존의 루프 do T ... 후, 데이터를 요약하는

do i = 1, 15 
    infection_day(i) = count(infections==i) 
end do 

같은 것을 삽입합니다.

이 컴퓨터에는 Fortran이 없으므로이 코드 조각을 테스트하지 않았지만 올바른 방향으로 이동해야합니다.

+0

고맙습니다. @ High Performance Mark. 당신의 방법은 제가 고투하고있는 것을했습니다. 다시 한 번, 저에게 대답 해 주신 것에 진심으로 감사드립니다. – sxq2221

0

주셔서 감사합니다

... 
INTEGER, DIMENSION(31) :: Sums 
!day is the 4th column from 1:625... 
... 
Sums(:) = 0 
... 
DO Entry = 1, 625 
    Sums(Thedayindex) = Sums(Thedayindex) + Day(Entry) 
ENDDO 
... 
+1

아마도 일부 오타가'Sums (Entry) '를 의미 했습니까? –

+0

정답 ... OP가 매월 # 회 발생 수를 원하면 이벤트가 발생하는 각 발생 날짜를 31 일 빈에 합산해야합니다. 그래서 다시 오자가있었습니다. (이해하기가 가장 쉬운 것은 여러 가지 if, 다른 하나는 SUMS에 추가하는 것이지만 적절한 bin (IMO)에 직접 요약하여 논리를 얻는 것이 더 쉽고 빠릅니다. – Holmz

+0

이 경우 적어도 하나 이상 Typo. "Sum"vs "Sums" –