ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΚΑΙ ΕΦΑΡΜΟΣΜΕΝΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΦΥΣ 145: Υπολογιστικές Μέθοδοι στη Φυσική Εαρινό Εξάµηνο 2019 Ενδιάµεση Εξέταση 13 Μαρτίου 2019 Οδηγίες : - Απαγορεύεται αυστηρά η χρήση κινητών, σηµειώσεων και ϐιβλίων. - Απενεργοποιήστε τα κινητά σας και παραδώστε τα µαζί µε άλλα προσωπικά σας αντικείµενα στους εξεταστές. - Απαγορεύεται αυστηρά η χρήση προγραµµάτων περιήγησης (π.χ. όπως το Mozilla Firefox) ή οποιασδήποτε άλλης εφαρµογής εκτός από το τερµατικό (terminal ), επεξεργαστών κειµένου (π.χ. emacs), και το gnuplot. - Χρησιµοποιήστε µόνο τις σελίδες που σας δίνονται. - Μην κόψετε οποιαδήποτε σελίδα. - Υπάρχουν 4 συνολικά ερωτήσεις σε αυτό το έντυπο από 25 µονάδες η κάθε µια. - Απαντήστε σε όλες τις ερωτήσεις. - Εάν έχετε κάποια απορία ή χρειάζεστε κάτι σηκώστε το χέρι σας και χωρίς οµιλίες περιµένετε υποµονετικά µέχρι ένας εκ των εξεταστών να σας δώσει οδηγίες. - Μη γυρίσετε σελίδα έως ότου σας Ϲητηθεί.
Ερωτήσεις Ερώτηση 1 (25 Μονάδες) Το παρακάτω πρόγραµµα FORTRAN εκτελεί το Κόσκινο του Ερατοσθένη, που είναι ένας απλός, αρχαίος αλγόριθµος για την εύρεση όλων των πρώτων αριθµών µέχρι κάποιο συγκεκριµένο ακέραιο αριθµό. Το πρόγραµµα ϕυλάει τα αποτελέσµατα στο αρχείο "eratosthenes.dat" και έπειτα διαβάζει το εν λόγω αρχείο για να τυπώσει του πρώτους αριθµούς αλλά και το πλήθος τους. Να ϐρεθούν τα 10 συνολικά συντακτικά λάθη του προγράµµατος και, αφού διορθωθούν µε τη ϐοήθεια του συµπιλιστή, να εκτελέσετε το πρόγραµµα. Εκτός από τη διόρθωση λαθών δεν επιτρέπονται επιπλέον αλλαγές στο υφιστάµενο πρόγραµµα. program eratosthenes integer i, j, imax, primemax, prime parameter (primemax=180) integer primes(primemax) primes = 1 imax=sqrt(primemax)! arxika ola ta stoixeia ine ptwtoi arithmoi! megistos arithmos eswterikou broxou! Anoigma arxeiou gia apothikefsi twn arithmwn open(unit=5, file= eratosthenes.dat, status= old ) do i=2, imax, 1 do j=2*i, primemax, i primes(j) = 0! Ksekiname apo to mikrotero prwto arithmo! pollaplasia tou 2 mexri to megisto arithmo! aftos o arithmos den einai prwtos arithmos! Grafume ta apotelesmata sto arxeio do i=2, primemax if (primes(i) == 1) write(2, 5) i 2 format(i3) enddo! Kleisimo arxeiou close()! Anoigma arxeiou gia ektipwsi twn prwtwn arithmwn open(unit=10, file= eratosthenes.dat, status= new ) 3 read(10, *, end=4) prime nprimes = nprimes + 1 write(*, *) prime goto 3 4 write(*,*) "Found ", nprimes, " prime numbers" stop end program eratosthenes Π.Κ. 1/11 ΦΥΣ 145
Λύση : program eratosthenes integer i, j, imax, primemax, prime parameter (primemax=180) integer nprimes! #(1) integer primes(primemax) primes = 1! Ypothetume pws oloi einai ptwtoi imax=sqrt(real(primemax))! Megistos arithmos broxou (#2)! Anoigma arxeiou gia apothikefsi twn arithmwn open(unit=50, file= eratosthenes.dat, status= new )! (#3 + #4) do i=2, imax, 1 do j=2*i, primemax, i primes(j) = 0 enddo! (#5) enddo! (#6)! Ksekiname apo mikrotero prwto arithmo! Pollaplasia tou 2 mexri to megisto! Aftos den einai prwtos arithmos! Grafume ta apotelesmata sto arxeio do i=2, primemax if (primes(i) == 1) write(50, 2) i! (#7 + #8) 2 format(i3) enddo! Kleisimo arxeiou close(50)! (#9)! Anoigma arxeiou gia ektipwsi twn prwtwn arithmwn open(unit=10, file= eratosthenes.dat, status= old )! (#10) 3 read(10, *, end=4) prime nprimes = nprimes + 1 write(*, *) prime goto 3 4 write(*,*) "Found ", nprimes, " prime numbers" stop end program eratosthenes Π.Κ. 2/11 ΦΥΣ 145
Ερώτηση 2 Γράψτε µία συνάρτηση FORTRAN το οποίο υπολογίζει το άθροισµα : e x = k=0 x k k! = 1 + x + x2 2 + x3 6 + x4 +... ( < x < ) (1) 24 προσθέτοντας όρους εώς ότου η αλλαγή στο άθροισµα να είναι µικρότερη του 10 10. Το πρόγραµµα πρέπει να δίδει ως αποτέλεσµα το άθροισµα της σειράς, καθώς και το πλήθος των όρων που αθροίστηκαν. (α) (20 Μονάδες) Χρησιµοποιήστε την παραπάνω συνάρτηση για να κατασκευάσετε τις υπερβολικές συναρτήσεις sinh (x), cosh (x), και tanh (x) για το διάστηµα 5.0 x 5.0 σε 100 ίσα ϐήµατα. Να γράψετε τα αποτελέσµατα αυτά στο αρχείο "hyperbolic.dat". Μπορείτε να χρησιµοποιήσετε τις ακόλουθες υπερβολικές τριγωνοµετρικές ταυτότητες : sinh (x) = ex e x 2 cosh (x) = ex + e x 2 tanh (x) = ex e x sinh (x) e x = + e x cosh (x) (2) (3) (4) Σηµείωση: εν πρέπει να χρησιµοποιήσετε τις συναρτήσεις ϐιβλιοθήκης για των υπολογισµό των υπερβολικών συναρτήσεων αλλά και της εκθετικής συνάρτησης. Υπόδειξη: Μπορείτε να αποφύγετε τον υπολογισµού του παραγοντικού µε τη χρήση της παρακάτω ιδιότητας για τον "k"-οστό όρο : ( x ) a k = a k 1 (5) k (β) (5 Μονάδες) Χρησιµοποιώντας το αρχείο "hyperbolic.dat" και µε την ϐοήθεια του λογισµικού gnuplot κάνετε τη γραφική παράσταση όλων των αποτελεσµάτων συναρτήσει του x στο ίδιο γράφηµα, καθώς και των αντίστοιχων συναρτήσεων sinh (x), cosh (x), και tanh (x) από τη ϐιβλιοθήκη του λογισµικού gnuplot για σύγκριση. Να σώσετε το γράφηµα στο αρχείο "hyperbolic.eps". Λύση :! =================================================================! function declaration! ================================================================= real*8 function my_exp(n, x, precision) real*8 x, sum, term, precision! Initialise variable term = 1 sum = 0.0! sum_{k=0}ˆ{infty} xˆ{k} / k! do while (ABS(term).GT. precision) Π.Κ. 3/11 ΦΥΣ 145
if ( n.eq. 0 ) then term = 1 else term = term * (x / n) endif sum = sum + term n = n + 1 write(*, 20) x, n, term, sum 20 format(f10.5, 2X, I3, 4X, F10.5, 4X, F15.7) enddo my_exp = sum return end! =================================================================! program declaration! ================================================================= program Hyperbolic integer i, m, n real*8 x, y1, y2, sum, term, precision, my_exp real*8 sinhx, coshx, tanhx! Initialise variable x = 2.d0 precision = 1.d-10! Print values in nice table write(*,*) write(*,*) repeat("=", 50) write(*,10) "x", "n", "term", "exp(n, x)" 10 format(a6, 3X, A6, 6X, A6, 6X, A15) write(*,*) repeat("=", 50)! Create a new file and write values open(7, file="hyperbolic.dat", status="new")! sum_{k=0}ˆ{infty} xˆ{k} / k! do i= -50, 50, 1 x = i*1.d-1 y1 = my_exp(n, +x, precision) Π.Κ. 4/11 ΦΥΣ 145
y2 = my_exp(m, -x, precision) coshx = 0.5*(y1+y2) sinhx = 0.5*(y1-y2) tanhx = sinhx/coshx m = 0 n = 0 write(7, *) x, sinhx, coshx, tanhx enddo write(*,*) repeat("=", 50)! Close the file close(7)! Program termination stop end Exponential Function - Maclaurin Expansion 4 2 "hyperbolic.dat" using 1:2 "hyperbolic.dat" using 1:3 "hyperbolic.dat" using 1:4 sinh(x) cosh(x) tanh(x) 0-2 -4-4 -2 0 2 4 Ερώτηση 3 (25 Μονάδες) Το σηµείο Lagrange είναι ένα σηµείο µεταξύ Γης και Σελήνης στο οποίο όταν ϐρεθεί ένας δορυφόρος τότε µπορεί να περιφέρεται γύρω από τη Γη σε πλήρη συγχρονισµό µε την Σελήνη, παραµένοντας πάντοτε ανάµεσα στη Γη και τη Σελήνη. Αυτό συµβαίνει γιατί η ϐαρυτική έλξη που ασκεί η Γη και η ϐαρυτική έλξη που ασκεί η Σελήνη δηµιουργούν την απαραίτητη κεντροµόλο δύναµη ώστε ο δορυφόρος να παραµένει στην τροχιά του, όπως στο σχήµα παρακάτω. Π.Κ. 5/11 ΦΥΣ 145
R r M m Γη ορυφόρος Σελήνη Υποθέτοντας κυκλικές τροχιές, µπορεί να δειχθεί ότι η απόσταση του σηµείου Lagrange (r) από το κέντρο της Γης ικανοποιεί την εξίσωση : GM r 2 Gm (R r) 2 = ω2 r (6) όπου M και m είναι η µάζα της Γης και Σελήνης, αντίστοιχα, G η σταθερά της παγκόσµιας έλξης, R η απόσταση µεταξύ Γης και Σελήνης, και ω η κοινή γωνιακή ταχύτητα του δορυφόρου και της Σελήνης. Θεωρείστε ότι G = 6.674 10 11 m 3 kg 1 s 2, M = 5.974 10 24 kg, m = 7.348 10 22 kg, ω = 2.662 10 6 s 1, και R = 3.844 10 8 m. Να γράψετε ένα πρόγραµµα το οποίο υπολογίζει την απόσταση του σηµείου Lagrange από τη Γη µε ακρίβεια 10 4. Λύση :!=============================================== real*8 function func(g, m_, M, omega, R, r_)!=============================================== real*8 G, m_, M, omega, R, r_ func = G*M/(r_**2) - G*m_/((R-r_)**2) - r_*omega**2 return end!=============================================== real*8 function deriv(g, m_, M, omega, R, r_)!=============================================== real*8 G, m_, M, omega, R, r_ deriv = -2*G*M/(r_**3) - G*m_/((R-r_)**3) - omega**2 return Π.Κ. 6/11 ΦΥΣ 145
end!=============================================== program LagrangePoint!=============================================== real*8 precision real*8 G, m_, M, omega, R, r_ real*8 error, func, deriv parameter(g=6.674d-11, M=5.974d24, m_=7.348d22) parameter(omega= 2.662D-6, R=3.844d8) parameter(precision=1d-4)! Initial trial value r_ = R/2d0! Newton-Raphson method error = func(g, m_, M, omega, R, r_)/deriv(g, m, M, omega, R, r_)! Try to solve the equation do while ( abs(error).gt. precision) r_ = r_ - error error = func(g,m_,m,omega,r,r_)/deriv(g,m_,m,omega,r,r_) enddo write(*,*) repeat("=", 50) write(*, 1) r_ 1 format( Lagrange point at distance of, E10.4, 1X, "m") write(*,*) repeat("=", 50)! Program termination stop end Ερώτηση 4 Θεωρήστε την περίπτωση ενός ποδηλάτη που αγωνίζεται σε κάποιο αγώνα ταχύτητας. Θεωρήστε αρχικά πως δεν υπάρχει αντίσταση αέρα. Από τον δεύτερο νόµο του Νεύτωνα ξέρουµε ότι dv dt = F m, όπου m η συνολική µάζα του συστήµατος ποδηλάτη-ποδήλατου, v η ταχύτητα του συστήµατος, και F η δύναµη που αναπτύσσει ο ποδηλάτης. Χρησιµοποιώντας τον ορισµό της ισχύος µπορούµε να γράψουµε, όπου E η ενέργεια. Για την περίπτωση ενός οριζόντιου δρόµου η ισχύς που αναπτύσσει ο ποδηλάτης πηγαίνει σε κινητική ενέργεια E = 1 2 mv2. Εποµένως, µπορούµε να γράψουµε ότι P = mv dv dt και εποµένως : ότι P = de dt dv dt = F m = P mv (7) Π.Κ. 7/11 ΦΥΣ 145
Υποθέστε ότι η ισχύς που αναπτύσσει ο ποδηλάτης για µια παρατεταµένη χρονική περίοδο από t = 0 σε t = t είναι σταθερή. Από την σχέση Εξ. (7) έχουµε : µε λύση v = v 2 0 + 2 P m t. v v 0 v dv = t 0 P dt (8) m (α) (10 Μονάδες) Λύστε το παραπάνω πρόβληµα αριθµητικά χρησιµοποιώντας τη µέθοδο Euler, γράφοντας τα αποτελέσµατα σας στο αρχείο "cyclist.dat". Θεωρήστε ότι η ισχύς που αναπτύσσει ο ποδηλάτης είναι σταθερή και ίσυ µε P = 400 W, η µάζα του συστήµατος ποδηλάτη-ποδήλατου είναι m = 70 kg και η αρχική ταχύτητα του συστήµατος είναι v 0 = 4 ms 1. Θεωρήστε ως χρονικό ϐήµα dt = 0.1 s. (β) (10 Μονάδες) Θεωρήστε τώρα ότι η αντίσταση του αέρα δεν είναι αµελητέα, αλλά πως η δύναµη αυτή έχει τη µορφή : F αντ = 1 2 CρAv2 (9) όπου C είναι ο συντελεστής αντίστασης, ρ η πυκνότητα του αέρα, και A η µετωπική επιφάνεια του συστήµατος ποδηλάτη-ποδήλατου. Θεωρήστε ότι C = 0.5, A = 0.33 m 2, και ρ = 1.204 kgm 3. Θεωρήστε και πάλι σα χρονικό ϐήµα dt = 0.1 s. Να γράψετε τα αποτελέσµατα σας επίσης στο αρχείο "cyclist.dat". (γ) (5 Μονάδες) Χρησιµοποιώντας το αρχείο "cyclist.dat" και µε την ϐοήθεια του λογισµικού gnuplot κάνετε τη γραφική παράσταση της ταχύτητας v του ποδηλάτη συναρτήσει του χρόνου t στο ίδιο γράφηµα για τις δύο περιπτώσεις. Να σώσετε το γράφηµα στο αρχείο η "cyclist.eps". Λύση :!===================================== program cyclist!===================================== real*8 acc, t, t0 real*8 dt, tmax real*8 u, u0, mass, P real*8 fair, uair, C, A, rho parameter (t0=0, tmax= 30, dt=0.1, P=400) parameter (u0=4.0, mass=70.0) parameter (C=0.5, A=0.33, rho=1.204)! Open a new file to write the data open(unit=60, file= cyclist.dat, status= unknown )! Define the air resistance fair = 0.5 * C * rho * A Π.Κ. 8/11 ΦΥΣ 145
! Define initial conditions of differential equation t = t0! initial time u = u0! initial speed (fair =0 ) uair = u0! initial speed (fair!=0)! Calculate until t = tmax Do while (t.le.tmax) write(60,*) t, u, uair! write time, speed, and speed_air! Calculate solution (fair = 0) acc = P/(mass * u)! acc = du/dt u = u + acc * dt! Calculate solution (fair!= 0) acc = P/(mass * uair) - 0.5 * fair * uair**2 uair = uair + acc * dt! Increment time interval t = t + dt enddo! Close the file close(60)! Program termination stop end Π.Κ. 9/11 ΦΥΣ 145
) - 20 18 Cyclist Motion - Euler Method C a =0.0 C a =0.5 16 ( v 14 12 10 8 6 4 0 5 10 15 20 25 30 t (s) Π.Κ. 10/11 ΦΥΣ 145
Οδηγίες Αποστολής : Αφού ϐεβαιωθείτε πως τα προγράµµατα σας έχουν τη τελική τους µορφή, δηµιουργήστε ένα ϕάκελλο µε την ονοµασία LastName_FirstName και τοποθετήστε µέσα σε αυτό αντίγραφα των προγραµµάτων σας (αρχεία εισόδου και εξόδου). Επειτα, ϐγείτε από το ϕάκελλο αυτό και δηµιουρήστε ένα αντίγραφο του µε µορφή συµπιεσµένου αρχείου τύπου Archive, δίδοντας την εντολή : tar -cvzf LastName_FirstName.tar.gz LastName_FirstName/ - Βεβαιωθείτε για την ορθότητα του αρχείου σας. - Επικοινωνήστε µε ένα από τους εξεταστές πως είστε έτοιµοι για αποστολή του αρχείου σας. - Ακολουθείστε επακριβώς τις οδηγίες του εξεταστή για το πως ϑα στείλετε το αρχείο σας στα ηλεκτρονικά ταχυδροµεία attikis.x.alexandros@ucy.ac.cy και haris@ucy.ac.cy. - Αφού αποστείλετε το αρχείο σας να αποσυνδεθείτε από τον υπολογιστή σας άµεσα και να αποχω- ϱήσετε από την αίθουσα εξέτασης χωρίς οµιλίες. - Επιπρόσθετα διορθωτικά µηνύµατα δεν ϑα γίνουν αποδεκτά. Π.Κ. 11/11 (Τέλος Εξέτασης) ΦΥΣ 145