戻る
2階微分方程式の初等的な数値解法
y'' + 2 y' + 2 y = sin(x) を数値的に解くサンプルです。
関数f1, f2 を変えると別の2階常微分方程式が解けます。
xmin, xmax, n など適当に変えて使ってください。
!
! y'' + p y' + qy = r
! y2 = y
! y1 = y2'
! y1' + p y1 + qy2 = r
! y1 = y2'
!
! y1' = r - p y1 - q y2 = f1
! y2' = y1 = f2
!
!
!
implicit none
real :: dt
integer :: n
integer :: i
real :: dx, x, y1, y2, xmax, xmin
real :: f1, f2
n = 1000 ! number of dividing
xmin = 0
xmax = 10*3.1415926535
dx = (xmax - xmin)/n
! initial value
y1 = 0
y2 = 0
do i=1, n
x = xmin + dx*i
y1 = y1 + dx * f1(x,y1,y2)
y2 = y2 + dx * f2(x,y1,y2)
write(*,*) x, y2
end do
end
real function f1(x, y1, y2)
implicit none
real :: x, y1, y2
f1 = sin(x) - 2*y1 - 2*y2
return
end
real function f2(x, y1, y2)
implicit none
real :: x, y1, y2
f2 = y1
return
end
2008.7.13