You are on page 1of 5

Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Ονοματεπώνυμο: Ζαχαριουδάκης Νίκος


Αριθμός Μητρώου: 2980
Ημερομηνία παράδοσης αναφοράς: 24.11.2005

Εργαστηριακή Αναφορά

Μαθηματικό μοντέλο μελέτης σε PC:

Αριθμητικοί μέθοδοι: Euler


Runge - Kutta

Ηλεκτρονικοί Υπολογιστές ΙΙ 1
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Πρόβλημα:

Έστω η παρακάτω διαφορική εξίσωση:

y΄ = xy

i. Λύστε την παραπάνω διαφορική εξίσωση με δεδομένη την αρχική


συνθήκη y (0 ) = e .

ii. Παραστήστε γραφικά την αναλυτική λύση που βρήκατε μαζί με τις
αντίστοιχες λύσεις που προκύπτουν από την χρήση των αριθμητικών
μεθόδων Euler και Runge-Kutta σε προγραμματιστικό περιβάλλον Η/Υ.
Τι συμπεραίνετε;

Επίλυση προβλήματος σε προγραμματιστικό περιβάλλον Η/Υ:


Θα αναπτύξουμε κώδικα σε προγραμματιστική γλώσσα Fortran, ο οποίος
θα κάνει χρήση των αριθμητικών μεθόδων Euler και Runge-Kutta. Έτσι,
κάνοντας compilation του εν λόγω κώδικα και εκτελώντας εν συνεχεία το
πρόγραμμα, το τελευταίο θα είναι σε θέση:

 Εφαρμόζοντας την μέθοδο Euler, να εξάγει υπό την μορφή του αρχείου
«Euler.out» ένα σύνολο ζευγών τιμών ( x, y ) , ώστε να κατασκευαστεί στο
Gnuplot η γραφική παράσταση y = f ( x ) .
 Εφαρμόζοντας την μέθοδο Runge-Kutta, να εξάγει υπό την μορφή του
αρχείου «Runge-Kutta» ένα σύνολο ζευγών τιμών ( x, y ) , ώστε να
κατασκευαστεί στο Gnuplot η γραφική παράσταση y = f ( x ) .

Αριθμητικές μέθοδοι:

Euler:
y΄ = f ( x, y )
x n = xo + nh
y n +1 = y n + hf ( x n , y n )

Runge-Kutta:
y΄ = f ( x, y )
x n = xo + nh
k 0 = hf ( x n , y n )
 h h 
k1 = hf  x n + , y n + k 0 
 2 2 
 h h 
k 2 = hf  x n + , y n + k1 
 2 2 
k 3 = hf (x n + h, y n + k 2 )

y n +1 = y n + (k 0 + 2k1 + 2k 2 + k 3 )
1
6

Ηλεκτρονικοί Υπολογιστές ΙΙ 2
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Κώδικας Fortran

c234567
program ergastiriaki_anafora_7
implicit none
real x(-1000:1000),y(-1000:1000),f,u,z,h,k1,k2,k3,k4
integer i,n
print*, ""
print*, "Doste ta x(initial), y(initial)."
read*, x(0),y(0)
print*, ""
print*, "Doste ton arithmo ton zevgon timon (x,y) pou epithymeite.
&"
read*, n
n=n/2
print*, ""
print*, "Doste to vima, me to opoio thelete na prokypsoun oi diado
&xikes times tis metavlitis x."
read*, h
print*, ""
print*, "Me vasei ta dedomena pou eisagate, ta zevgi timon (x,y),
&exoun os eksis:"
print*, ""
print*, "Me tin methodo Euler:"
print*, ""
call Euler(h,n,x,y)
print*, ""
print*, "Me tin methodo Runge-Kutta:"
print*, ""
call Runge_Kutta(h,n,x,y)
print*, ""
end

subroutine Euler(h,n,x,y)
implicit none
real x(-1000:1000),y(-1000:1000),h,f
integer i,n
do i=1,n
x(-i)=x(0)-i*h
enddo
do i=1,n
x(i)=x(0)+i*h
enddo
do i=0,n-1
y(i+1)=y(i)+h*f(x(i),y(i))
enddo
do i=0,n-1
y(-i-1)=y(-i)-h*f(x(-i),y(-i))
enddo
open (unit=1,file="expdata_Euler.out")

Ηλεκτρονικοί Υπολογιστές ΙΙ 3
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

do i=-n,0
write(*,2) x(i), y(i)
write(1,2) x(i), y(i)
2 format (2x,F5.2,2X,F8.3)
enddo
do i=1,n
write(*,3) x(i), y(i)
write(1,3) x(i), y(i)
3 format (2x,F5.2,2x,F8.3)
enddo
end

subroutine Runge_Kutta(h,n,x,y)
implicit none
real x(-1000:1000),y(-1000:1000),f,h,k1,k2,k3,k4
integer i,n
do i=0,n
k1=f(x(-i),y(-i))
k2=f(x(-i)-h/2.,y(-i)+k1*h/2.)
k3=f(x(-i)-h/2.,y(-i)+k2*h/2.)
k4=f(x(-i)-h,y(-i)+k3*h)
y(-i-1)=y(-i)-(k1+2*k2+2*k3+k4)*(h/6.)
enddo
do i=0,n
k1=f(x(i),y(i))
k2=f(x(i)+h/2.,y(i)+k1*h/2.)
k3=f(x(i)+h/2.,y(i)+k2*h/2.)
k4=f(x(i)+h,y(i)+k3*h)
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)*(h/6.)
enddo
open (unit=4,file="expdata_Runge-Kutta.out")
do i=-n,0
write(4,5) x(i),y(i)
write(*,5) x(i), y(i)
5 format (2x,F5.2,2x,F8.3)
enddo
do i=1,n
write(4,6) x(i), y(i)
write(*,6) x(i), y(i)
6 format (2x,F5.2,2x,F8.3)
enddo
end

function f(u,z)
implicit none
real f,u,z
f=u*z
return
end

Ηλεκτρονικοί Υπολογιστές ΙΙ 4
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Ερώτημα i
dy
y΄ = xy ⇔ = xy ⇔ dy = xydx ⇔
dx
dy dy
= xdx ⇒ ∫
y ∫
⇔ = xdx ⇒
y
x2
x2 +c
⇒ ln y = + c ⇔ y(x ) = e 2
2
y>0
x2
+c
y(x ) = e 2

y (0 ) = e
02
+c
y (0 ) = e 2
= e ⇔ c =1⇒
2
x
+1
⇒ y(x ) = e 2

Ερώτημα ii

Παρατηρούμε, ότι, η γραφική παράσταση y = f ( x ) με την μέθοδο Runge – Kutta


προσεγγίζει σε μεγαλύτερο βαθμό την θεωρητική γραφική παράσταση y = f ( x )
από την αντίστοιχη γραφική παράσταση της μεθόδου Euler.

Ηλεκτρονικοί Υπολογιστές ΙΙ 5

You might also like