최근에이 코드와 관련된 질문과 관련하여 질문을 올렸지 만 지금은이를 분류했습니다. 그러나 코드가 잘못된 값을 인쇄하고 이유를 찾을 수 없습니다. 여기 코드는 다음과 같습니다이 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
어떤 도움을 주시면 감사하겠습니다, 감사합니다!
그래서 올바른 값은 무엇입니까? 왜 이것이 잘못된 것입니까? 설명 해주십시오. 사진을 게시하지 말고 텍스트를 보내주십시오. Windows 콘솔에서 텍스트를 복사하는 방법을 모르면 웹 검색 만하면됩니다. –
나는'k2y'와'k2z' (그들은 0 일 가능성이 있습니다)와 같은 다른 값을 출력하여 디버깅 중에 무슨 일이 일어나는지 더 잘 이해할 것을 제안합니다. 그것은 내가 일하는 데 사용하는 기술입니다. –
코드가 컴파일됩니까? 'rk2'에서 선언 중에 더미 인자'z'와'y'를 설정할 수는 없습니다, 그건 불법입니다. 게시 한 코드가 정확한 사본인지 확인하고 컴파일하십시오. –