2017-11-19 6 views
-3

최근에이 코드와 관련된 질문과 관련하여 질문을 올렸지 만 지금은이를 분류했습니다. 그러나 코드가 잘못된 값을 인쇄하고 이유를 찾을 수 없습니다. 여기 코드는 다음과 같습니다이 Runge-Kutta 2 차 프로그램이 잘못된 값을 출력하는 이유는 무엇입니까?

여기
program rungekutta 
implicit none 
integer, parameter :: dp = selected_real_kind(15,300) 
integer :: i 
real(kind=dp) z, y, t 
do i=1,100 
call rk2(dydt, dzdt, z, y, t) 
print *, z, y 
end do 

contains 
subroutine rk2(z, y, t) 
implicit none 
integer, parameter :: dp = selected_real_kind(15,300) 
real(kind=dp) :: k1y, k1z, k2y, k2z, n, h=0.1, y=1, z=0, t 
k1y = dydt(y,z,t)*h 
k1z = dzdt(y,z,t)*h 
k2z = dzdt(y + (0.5*k1y), z + (0.5*k1z), t + (0.5*h))*h 
k2y = dydt(y, z +(0.5*k1z), t)*h 
y = y + k2y 
z = z + k2z 
end subroutine 

function dzdt(y,z,t) 
real(kind=dp) :: y, z, t, dzdt, omega=1, A=0, B, C=0, D=0 
B = omega**2 
dzdt = A*y**3 + B*y - C*z + D*sin(omega*t) 
end function 

function dydt(z) 
real(kind=dp) :: z, dydt 
dydt = z 
end function 
end program 

터미널의 인쇄 화면입니다 : https://prnt.sc/hchmv7

어떤 도움을 주시면 감사하겠습니다, 감사합니다!

+1

그래서 올바른 값은 무엇입니까? 왜 이것이 잘못된 것입니까? 설명 해주십시오. 사진을 게시하지 말고 텍스트를 보내주십시오. Windows 콘솔에서 텍스트를 복사하는 방법을 모르면 웹 검색 만하면됩니다. –

+0

나는'k2y'와'k2z' (그들은 0 일 가능성이 있습니다)와 같은 다른 값을 출력하여 디버깅 중에 무슨 일이 일어나는지 더 잘 이해할 것을 제안합니다. 그것은 내가 일하는 데 사용하는 기술입니다. –

+0

코드가 컴파일됩니까? 'rk2'에서 선언 중에 더미 인자'z'와'y'를 설정할 수는 없습니다, 그건 불법입니다. 게시 한 코드가 정확한 사본인지 확인하고 컴파일하십시오. –

답변

0

5 개의 인자로 rk2를 호출했지만 3으로 만 선언하는 것처럼 보입니다.

+0

실제 코드를 반영하지 않는다고 생각합니다. OP는 질문을 업데이트하지 않았지만 코드는 이러한 오류로 컴파일되지 않습니다. 문제의 코드는 OP가 실행중인 실제 코드가 아닙니다. 거기에 더 많은 그러한 오류, 위의 내 의견에 유의하십시오. –

관련 문제