Επιστηµονικός Υπολογισµός Ι 2η Εργαστηριακή Ασκηση Ηµεροµηνία επιστροφής γιά πλήρη ϐαθµό : 12/12/11, 9 π.µ. Προσοχή: Μπορείτε να συζητήσετε την άσκηση µε συναδέλφους σας αλλά αν διαπιστωθεί αντιγραφή, ϑα υποπολλαπλασιαστεί ο ϐαθµός σας. είτε και τις οδηγίες που αναφέρονται στους κανόνες ϐαθµολογίας! Η άσκηση αναφέρεται στο ϑέµα της αριθµητικής και των σφαλµάτων που γίνονται στον υπολογιστή. Θα είναι επίσης ευκαιρία για να δείτε στην πράξη τις έννοιες του εµπρός και πίσω σφάλµατος και του δείκτη κατάστασης του προβλήµατος για υπολογισµούς µε πολυώνυµα. 1 Περιγραφή 1.1 ιερεύνηση των χαρακτηριστικών της αριθµητικής στη MATLAB 1. Εστω οι αριθµοί 0.1, pi, eps, eps/2, realmax, realmin, realmin/2 όπως αποθηκεύνται σε µορφή α.κ.υ. IEEE διπλής ακρίβειας (MATLAB double array). Για κάθε έναν από αυτούς να γράψετε την αναπαράσταση σε 16αδική µορφή που δείχνει η MATLAB (µέσω του format hex) και να εξηγήσετε το αποτέλεσµα. Μπορείτε να ϐρείτε χρήσιµο το εργαλείο bitgui που αναρτήθηκε στο ηµερολόγιο 1. 1.2 Πράξεις µε πολυώνυµα Θα εξετάσετε ορισµένα ϑέµατα που προκύπτουν στη διαχείριση πολυωνύµων και που οφείλονται στην αριθµητική πεπερασµένης ακρίβειας και τη συµπεριφορά των ισοδύναµων, µαθηµατικά, αλλά διαφο- ϱετικών, υπολογιστικά, αναπαραστάσεων τους 2 και διαχείρισής τους (π.χ. αλγόριθµος Horner). Αξίζει να σηµειωθεί ότι µιλώντας για πολυώνυµα δεν αποµακρυνόµαστε όσο ϑα νόµιζε κάποιος από την ενασχόληση του µαθήµατος µε τα µητρώα, καθότι πολυώνυµα και µητρώα έχουν µεταξύ τους εξαιρετικά «στενές σχέσεις». Επίσης τα πολυώνυµα αποτελούν ϐασικό αλγεβρικό εργαλείο µοντελοποίησης πολύπλοκων ή άγνωστων συναρτήσεων (µε ϐάση τις τιµές τους και µόνο). Προτείνουµε να διαβάσετε και να εξοικειωθείτε πρώτα µε τις συναρτήσεις (MATLAB) poly, polyval, roots. Ειδικότερα, να δείτε τις λειτουργίες των 2 πρώτων από αυτές και να ϐεβαιωθείτε ότι τις κατανοείτε (ειδικά για την polyval, δεν χρειάζεται παρά να ασχοληθείτε µε την περίπτωση που δίνονται 2 ορίσµατα στην είσοδο, δηλ. polyval(p,x)), όπου το δεύτερο όρισµα είναι αποκλειστικά ϐαθµωτός ή διάνυσµα. 1. Να αλλάξετε τον πηγαίο κώδικα της polyval ώστε να χρησιµοποιεί την (κλασική) µέθοδο Horner 3 όταν το 2ο όρισµα είναι ϐαθµωτός (ως έχει, για ϐαθµωτό, χρησιµοποιεί την ταχύτατη 4 συνάρτηση filter). Ονοµάστε την εκδοχή αυτή polyval_slow. 2. Σε άπειρη ακρίβεια, ϑα είχαµε ότι αν c = poly([1:n]); r = roots(c); 1 Ευχαριστούµε ϑερµά τον σχεδιαστή του εργαλείου, µεταπτυχιακό κ. Γιάννη Καλοφωλιά! 2 π.χ. µορφή δύναµης και γινοµένου (υπάρχουν και άλλες, π.χ. µορφή Newton, µορφή Lagrange). 3 π.χ. http://en.wikipedia.org/wiki/horner_scheme 4 it screams! 1
τότε α) το sort(r) ϑα περιέχει τις τιµές 1:n για οποιοδήποτε n. Επίσης ϐ) sum(c) πρέπει να επιστρέφει 0 όπως έχουµε ήδη εξηγήσει (στην τάξη). είτε το αποτέλεσµα των παραπάνω υπολογισµών για n=single([4:4:16]) (δηλ. µε χρήση α.κ.υ. µονής ακρίβειας) και να ϐρείτε για ποιά/ές τιµές του n αστοχεί το (ϐ) (δεν επιστρέφει 0). 3. Να εξηγήσετε (χρησιµοποιώντας διπλή ακρίβεια για σύγκριση ή άλλους τρόπους) κατά πόσον η αστοχία οφείλεται στην άθροιση ή στο c που υπολογίζει η poly. Σε κάθε περίπτωση, να υλοποιήσετε τρόπο υλοποίησης που να µην αστοχεί η (ϐ) για τα συγκεκριµένα δεδοµένα. 1.3 ιερεύνηση πίσω ευστάθειας Στη συνέχεια, ϑα διερευνήσετε ϑεωρητικά και αριθµητικά την πίσω ευστάθεια του υπολογισµού της τιµής πολυωνύµου µε τη µέθοδο Horner. Σηµειώνουµε ότι µε αυτόν τον τρόπο ϑα επιβεβαιώσετε τη ϑεωρία, αλλά ϑα δείτε επίσης τη δυσκολία της αυτοµατοποίησης της µεθόδου. 1. Να επιβεβαιώσετε τη ϑεωρία (δείτε το ϐιβλίο αλλά καλύτερα να το κάνετε µε το χέρι), δηλ. ότι ο υπολογισµός της τιµής πολυωνύµου µε Horner είναι πίσω ευσταθής. Ειδικότερα, να δείξετε ότι horner prog ((p; a, ξ)) = horner(p; a + h, ξ), για σχετικά µικρές τιµές στο h, δηλαδή το σφάλµα από τους υπολογισµούς µπορεί να αναχθεί πλήρως σε σφάλµατα στα δεδοµένα. Εδώ, horner είναι ο αλγόριθµος Horner σε αριθµητική άπειρης ακρίβειας για τον υπολογισµό τιµής από τη δυναµοµορφή p, horner prog είναι η υλοποίησή του σε πεπερασµένη ακρίβεια (όπως π.χ. κάνει η polyval) και h γ 2n (t) a, γ 2n (t) = 2nu 1 2nu. (1) 2. Συγκεκριµένα ϑα πρέπει, δοθέντος ενός πολυωνύµου p µέσω των συντελεστών του (σε µορφή διανύσµατος, όπως αναµένεται από τη συνάρτηση polyval), να υπολογίσετε την τιµή του για κάποιο ξ σε µονή ακρίβεια και να δείξετε ότι η ίδια τιµή µπορεί να αναπαραχθεί ακριβώς από πολυώνυµο µε παραπλήσιους συντελεστές στο ξ αν εκτελέσετε τον υπολογισµό µε διπλή ακρίβεια 5 Μία (από τις 2) δυσκολίες για την υλοποίηση είναι ότι µε ϐάση µόνον 1 τιµή p(ξ), δεν είναι εύκολο να υπολογίσουµε τις αλλαγές που πρέπει να γίνουν σε όλους τους συντελεστές του (δηλ. το διάνυσµα h που προβλέπει η ϑεωρία). Γι αυτό, ϑα υπολογίσουµε τις τιµές σε n + 1 σηµεία (τα οποία τοποθετούµε σε ένα διάνυσµα [ξ 0,..., ξ n ] ) µε την polyval. Εστω ότι συµβολίζουµε τις υπολογισµένες (σε µονή ακρίβεια) τιµές ως [φ 0,..., φ n ]. Εχουµε δηλαδή ότι φ j = horner prog ((p; a, ξ)). Ονοµάζουµε το διάνυσµα των τιµών f := [φ 0,..., φ n ]. Στη συνέχεια πρέπει να κατασκευάσετε ένα πολυώνυµο (σε µορφή δύναµης), ας το πούµε ˆp(â; x), τέτοιο ώστε ˆp(â; ξ j ) = φ j για όλα τα j σε άπειρη ακρίβεια. Επειδή αυτό δεν είναι εφικτό, ϑα χρησιµοποιήσουµε αντ αυτής διπλή ακρίβεια. Για να υπολογίσετε τους συντελεστές 6 â ϑα κατασκευάσετε (πάντα σε διπλή ακρίβεια) µητρώο (τύπου) Vandermonde 7 V R (n+1) (n+1) που περιέχει σε κάθε ϑέση (i, j) το στοιχείο ξ n+1 j i 1 για i, j = 1,..., n + 1. Προφανώς, σε 5 Εφόσον κάνουµε όλους τους υπόλοιπους υπολογισµούς µε µονή ακρίβεια, ϑα ϑεωρήσουµε (υπόθεση εργασίας) ότι η διπλή ακρίβεια είναι σαν να είχαµε αριθµητική άπειρης ακρίβειας. 6 εν είναι κατ ανάγκη ο καλύτερος αλλά τον εφαρµόζουµε για να µην καταφύγουµε σε παρεµβολή Newton 7 είτε τη συνάρτηση vander. 2
αριθµητική άπειρης ακρίβειας, V â = f, άρα â = V 1 f. Λαµβάνοντας αυτή τη λύση ως ακριβή, να υπολογίσετε το πίσω σφάλµα που προκύπτει (δηλ. τη σχετική απόσταση του â από το a). Μπορείτε να χρησιµοποιήσετε όποια νόρµα ϑέλετε αλλά πρέπει να το αναφέρετε και να την χρησιµοποιείτε σε όλο αυτό το ερώτηµα. Να εξετάσετε αν το ϕράγµα είναι όπως προβλέπεται από τη ϑεωρητικά αποτελέσµατα (σχέσεις (1) ). Για τα πειράµατα ϑα χρησιµοποιήσετε δύο επιλογές σηµείων. α) ξ j = e ι2π n+1 και ϐ) ξ j = j n για j = 0,..., n. Για λόγους που για λίγο ακόµα δεν είναι προφανείς 8 έχει µεγάλη σηµασία να γίνει σωστή επιλογή των σηµείων x. Θα δείτε ότι γενικά, µια από τις δύο αυτές επιλογές οδηγεί σε πολύ καλύτερα αποτελέσµατα. Τα πολυώνυµα που ϑα χρησιµοποιήσετε ϑα είναι τα παρακάτω αλλά σε δυναµοµορφή (να τα µετατρέψετε µε την poly). Οι συντελεστές, έστω το διάνυσµα a, ϑα προκύψουν σε διπλή ακρίβεια. Για τις ανάγκες τις άσκησης, όποτε χρειάζεται, ϑα έχετε ένα αντίγραφο σε µονή ακρίβεια (µε την εντολή single.) 1. Το πολυώνυµο Wilkinson p(x) = n (x n + j 1) για n = 12. 2. Το πολυώνυµο p(x) = n 2j 1 (x cos(π 2n )) για n = 12. 1.4 Ευαισθησία τιµών πολυωνύµων που υπολογίζονται σε µορφή δύναµης Θέλουµε να δούµε τη συµπεριφορά των τιµών πολυωνύµου για µικρές αλλαγές των συντελεστών. Η εύρεση καλής προσεγγισης της τιµής είναι σηµαντική γιατί εκτός των άλλων χρειάζεται και σε πολλούς αλγόριθµους (όπως ο αλγόριθµος Newton 9, η µέθοδος διχοτόµησης 10 κ.λπ.). Τα πολυώνυµα που ϑα χρησιµοποιήσετε είναι : 1. Το πολυώνυµο Wilkinson p(x) = n (x n + j 1) για n = 12. 2. Το πολυώνυµο p(x) = n 2j 1 (x cos(2π 2n )) για n = 12. 3. Το πολυώνυµο p(x) = (x 1) n για n = 12. Από τη ϑεωρία, ο σχετικός δείκτης κατάστασης της τιµής ενός πολυωνύµου σε δυναµοµορφή στο ξ, όπου το ξ δεν είναι ϱίζα και χρησιµοποιούµε τη νόρµα µεγίστου, είναι : cond(p; a, ξ) = n α j ξ j / p(a, ξ). (2) j=0 1. Να κατασκευάσετε συνάρτηση που λαµβάνει για είσοδο τους συντελεστές της δυναµοµορφής, έστω στο διάνυσµα a, και τις τιµές της ανεξάρτητης µεταβλητής, έστω στο διάνυσµα x, και που υπολογίζει τις τιµές του πολυωνύµου στις τιµές του x χρησιµοποιώντας την polyval_slow στα σηµεία που δίνονται. Θα χρησιµοποιήσετε 2 σετ από σηµεία. Το πρώτο linspace(0.8,9.8,10). Το δεύτερο ϑα είναι οι ϱίζες 11 κάθε πολυωνύµου, πολλαπλασιασµένες κάθε µία µε (διαφορετικό, λόγω του rand) παράγοντα 8 Θα τους µάθετε στις ερχόµενες διαλέξεις. 9 http://en.wikipedia.org/wiki/newton s_method 10 http://en.wikipedia.org/wiki/bisection_method, 11 οι ϱίζες είναι άµεσα διαθέσιµες από τη µορφή που σας τα δίνουµε, µην τις υπολογίσετε! j 3
Σχήµα 1: Παράδειγµα 1+randn(1,1)*1e-1 Να ταξινοµήσετε όλες τις τιµές µε αύξουσα τιµή σε ένα διάνυσµα x. 2. Στη συνέχεια, για την παραγωγή διαταραχών, να αρχικοποιήσετε µε τις κλήσεις randn('seed',am) και rand('seed',am) όπου AM είναι ο αριθµός µητρώου σας. 3. Για κάθε τιµή του x, να υπολογίσετε το λογάριθµο µε ϐάση 10 της σχετικής απόστασης του horner(p, a; x) από horner(p, a + h; x) για m = 100 τυχαία διανύσµατα h τέτοια ώστε για τα στοιχεία του κάθε διανύσµατος h να ισχύει ότι h g a όπου στη συνέχεια λαµβάνουµε το g = 10 5. Γι αυτό µπορείτε να χρησιµοποιήσετε την εντολή h = sign(randn(size(a))).*rand(size(a)).*a*g και g=1e-5. Να οπτικοποιήσετε σε µία µόνο γραφική παράσταση για κάθε πολυώνυµο (εποµένως 3 πα- ϱαστάσεις αρκούν) όλες τις τιµές που υπολογίσατε πριν (λογάριθµο µε ϐάση 10 των σχετικών αποκλίσεων). Θέλετε δηλαδή ένα σχήµα όπως το 1. 4. Για κάθε τιµή ξ που περιέχεται στο x, να σχολιάσετε αν η µέγιστη σχετική αλλαγή στην τιµή του πολυωνύµου ϕράσσεται από log 10 (cond(p; a, ξ)g), όπως προβλέπει η ϑεωρία 12. Να επιβεβαιώσετε ότι υπάρχει µεγάλη διακύµανση στη σχετική διαταραχή των τιµών του πολυωνύµου (µερικές ϕορές µεγάλη, άλλες µικρή και ϕαίνεται να εξαρτάται από το πολυώνυµο και το σηµείο όπου υπολογίζουµε τις τιµές του). 12 είτε το άνω ϕράγµα για τον όρο µε πράσινους χαρακτήρες στην 1η γραµµή της σελ. 12 των διαφανειών της 7/11. 4
Παραδοτέα Αναφορά : Σε ηλεκτρονική µορφή. Ιδιαίτερη σηµασία ϑα δοθεί και στον τρόπο παρουσίασης (πίνακες, διαγράµµατα, κλπ.) Η τελική αναφορά πρέπει να είναι σε PDF. Επίσης, ό,τι πηγές και στοιχεία χρησιµοποιήσετε από το διαδίκτυο ή άλλη ϐιβλιογραφία πρέπει να προσδιορίζεται ξεκάθαρα και να αναφέρεται στη ϐιβλιογραφία. Κώδικας : Τα προγράµµατα που απορρέουν από την εργασία σας, συµπεριλαµβανοµένων και εκείνα που παράγουν τα δεδοµένα. Αποστολή : Η αναφορά καθώς και τα συνοδευτικά αρχεία πρέπει να αποσταλούν ηλεκτρονικά, σε συµπιεσµένη µορφή zip στην διεύθυνση sci@ceid.upatras.gr. Σε κάθε περίπτωση, το e- mail πρέπει να έχει subject line µε περιεχόµενο SC AM ASKHSH 2, όπου ΑΜ είναι ο αριθµός µητρώου σας (π.χ. SC 1111 ASKHSH 2). ΠΑΡΟΤΡΥΝΣΗ (και πάλι): Για καλύτερα αποτελέσµατα 13 ιδιαίτερα όσον αφορά σε περιγραφές και παρουσιάσεις µε µαθηµατικά σύµβολα, σας συµβουλεύουµε να (µάθετε να) χρησιµοποιείτε το σύστηµα επεξεργασίας κειµένων LaTeX. ΠΡΟΣΟΧΗ: Υπενθυµίζουµε τη σηµασία που έχει η ατοµική σας προσπάθεια στην επίλυση για την επιτυχηµένη ολοκλήρωσή του µαθήµατος. Εµείς ϑεωρούµε ότι οι ασκήσεις που παραδίδονται είναι αποτέλεσµα της προσωπικής προσπάθειας του ϕοιτητή που την υπογράφει και έχει την ευθύνη να απαντήσει αν του Ϲητηθεί να αιτιολόγησει και να υποστήριξει όσα αναγράφονται. Ενα επιπλέον κέρδος είναι ότι η τελική εξέταση µπορεί πάντα να εξαρτάται από τις γνώσεις που αποκτήσατε στην προετοιµασία των ασκήσεων. Παρόλο το µέγεθος της εκφώνησης, ϑα δείτε ότι οι κώδικες που χρειάζετε να γράψετε είναι σύντοµοι. 13 No more word όπως ονοµάζεται το thread που άνοιξε πριν 2 χρόνια ο χρήστης chiotis 5