Υπολογιστικά Μαθηματικά

Σχετικά έγγραφα
1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

Αριθμητική Ανάλυση & Εφαρμογές

1.4 Αριθμητική υπολογιστών και σφάλματα

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης;

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης:

Εισαγωγή στην επιστήμη των υπολογιστών

Εφαρμοσμένα Μαθηματικά

1.1. Με τι ασχολείται η Αριθμητική Ανάλυση

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Αριθμητική Ανάλυση και Εφαρμογές

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

HY213. ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ ΥΠΟΛΟΓΙΣΜΟΙ ΚΑΙ ΣΦΑΛΜΑΤΑ ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ

Εισαγωγή στην Αριθμητική Ανάλυση

Σφάλματα (errors) Σε κάθε υπολογισμό μιας πραγματικής ποσότητας υπάρχει σφάλμα

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων

Αριθμητική Κινητής Υποδιαστολής Πρόσθεση Αριθμών Κινητής Υποδιαστολής

ΛΧ1004 Μαθηματικά για Οικονομολόγους

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Υπολογισμός αθροισμάτων

1 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΑΛΓΟΡΙΘΜΟΙ

ΜΑΘΗΜΑΤΙΚΑ Β ΓΥΜΝΑΣΙΟΥ

ΑΛΓΕΒΡΑ Α ΓΥΜΝΑΣΙΟΥ ΘΕΤΙΚΟΙ ΚΑΙ ΑΡΝΗΤΙΚΟΙ ΑΡΙΘΜΟΙ ΕΠΙΜΕΛΕΙΑ : ΧΑΛΑΤΖΙΑΝ ΠΑΥΛΟΣ

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης:

Μερικές φορές δεν μπορούμε να αποφανθούμε για την τιμή του άπειρου αθροίσματος.

Δυαδικό Σύστημα Αρίθμησης

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

Σύστημα Πλεονάσματος. Αναπαράσταση Πραγματικών Αριθμών. Αριθμητικές Πράξεις σε Αριθμούς Κινητής Υποδιαστολής

Κεφ. 6Β: Συνήθεις διαφορικές εξισώσεις (ΣΔΕ) - προβλήματα αρχικών τιμών

Πράξεις με δυαδικούς αριθμούς

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Αριθµητικές Μέθοδοι και Προγραµµατισµός Αριθµητική Ανάλυση (ή Επιστηµονικοί Υπολογισµοί)

Σύστημα Πλεονάσματος και Αναπαράσταση Αριθμών Κινητής Υποδιαστολής

2.1 ΠΡΑΞΕΙΣ ΚΑΙ ΟΙ ΙΔΙΟΤΗΤΕΣ ΤΟΥΣ

ΣΦΑΛΜΑΤΑ ΑΡΙΘΜΗΤΙΚΩΝ ΥΠΟΛΟΓΙΣΜΩΝ

Πραγµατικοί αριθµοί κινητής υποδιαστολής Floating Point Numbers. Σ. Τσιτµηδέλης ΤΕΙ ΧΑΛΚΙΔΑΣ

Περιεχόμενα. Κεφάλαιο 3 Οι ιδιότητες των αριθμών Αριθμητικά σύνολα Ιδιότητες Περισσότερες ιδιότητες...

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΠΕΡΙΕΧΟΜΕΝΑ 1 ΠΡΑΓΜΑΤΙΚΟΙ ΑΡΙΘΜΟΙ ΑΚΟΛΟΥΘΙΕΣ ΑΡΙΘΜΩΝ EΞΙΣΩΣΕΙΣ...47 ΠΡΟΛΟΓΟΣ... 9

Μαθηματικά Γ Γυμνασίου

Αριθμητική Ανάλυση και Εφαρμογές

Περιεχόμενα. Κεφάλαιο 3 Οι ιδιότητες των αριθμών Αριθμητικά σύνολα Ιδιότητες Περισσότερες ιδιότητες...

ΑΡΙΘΜΗΤΙΚΗ ΓΙΑ ΥΠΟΛΟΓΙΣΤΕΣ

A Τελική Εξέταση του μαθήματος «Αριθμητική Ανάλυση» Σχολή Θετικών Επιστημών, Τμήμα Μαθηματικών, Πανεπιστήμιο Αιγαίου

ΜΑΘΗΜΑΤΙΚΑ Α ΓΥΜΝΑΣΙΟΥ

Αριθμητικά Συστήματα

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ - ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, 5 Ο ΕΞΑΜΗΝΟ, ΠΕΡΙΕΧΟΜΕΝΑ ΠΑΡΑΔΟΣΕΩΝ. Κεφ. 1: Εισαγωγή (διάρκεια: 0.5 εβδομάδες)

12. ΑΝΙΣΩΣΕΙΣ Α ΒΑΘΜΟΥ. είναι δύο παραστάσεις μιας μεταβλητής x πού παίρνει τιμές στο

Οι Φυσικοί Αριθμοί. Παρατήρηση: Δεν στρογγυλοποιούνται αριθμοί τηλεφώνων, Α.Φ.Μ., κωδικοί αριθμοί κλπ. Πρόσθεση Φυσικών αριθμών

Αρχιτεκτονικές Υπολογιστών

Μαθηματικά. Ενότητα 1: Οι Αριθμοί. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής

Κεφ. 7: Συνήθεις διαφορικές εξισώσεις (ΣΔΕ) - προβλήματα αρχικών τιμών

Οργάνωση Υπολογιστών

Τμήμα Τεχνολόγων Γεωπόνων - Φλώρινα

Μ Α Θ Η Μ Α Τ Ι Κ Α Γ ΓΥΜΝΑΣΙΟΥ ΖΕΡΒΟΣ ΜΑΝΟΛΗΣ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

Αριθμητική Ανάλυση και Εφαρμογές

Υπολογιστικά & Διακριτά Μαθηματικά

Θερμοδυναμική - Εργαστήριο

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Κεφάλαιο 2. Οργάνωση και διαχείριση της Πληροφορίας στον. Υπολογιστή

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Αριθμητική Ανάλυση και Εφαρμογές

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι χρειάζεται η εντολή DO ; ΕΠΑΝΑΛΗΨΕΙΣ ΕΝΤΟΛΗ DO. Όταν απαιτείται να εκτελεστεί πολλές φορές το ίδιο τμήμα ενός προγράμματος.

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών - Μηχανικών Υπολογιστών. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Νεκτάριος Κοζύρης ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

Αριθμητικά Συστήματα = 3 x x x x 10 0

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

ΜΑΘΗΜΑΤΙΚΑ - Γ ΓΥΜΝΑΣΙΟΥ

Μ Α Θ Η Μ Α Τ Α Γ Λ Υ Κ Ε Ι Ο Υ

ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ ΕΠΙΜΕΛΕΙΑ : ΑΥΓΕΡΙΝΟΣ ΒΑΣΙΛΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Chapter 3. Αριθμητική Υπολογιστών. Όγδοη (8 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Εισαγωγή στους Υπολογιστές

x y z xy yz zx, να αποδείξετε ότι x=y=z.

ΜΕΘΟΔΟΛΟΓΙΕΣ & ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΗΝ ΑΛΓΕΒΡΑ ΤΗΣ Α ΛΥΚΕΙΟΥ

APEIROSTIKOS LOGISMOS I

2. Να γράψετε έναν αριθμό που είναι μεγαλύτερος από το 3,456 και μικρότερος από το 3,457.

Ε π ι μ έ λ ε ι α Κ Ο Λ Λ Α Σ Α Ν Τ Ω Ν Η Σ

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΥΠΟΛΟΓΙΣΤΩΝ

4. ΚΕΦΑΛΑΙΟ ΕΦΑΡΜΟΓΕΣ ΤΟΥ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ FOURIER

ΕΠΑΝΑΛΗΨΗ Α ΓΥΜΝΑΣΙΟΥ

ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6

Chapter 3. Αριθμητική Υπολογιστών. (συνέχεια)

Κεφάλαιο 1. Εισαγωγή, ακρίβεια και σφάλματα υπολογισμών

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

Transcript:

1. Είδη Σφαλμάτων Η εφαρμογή υπολογιστικών ή αριθμητικών μεθόδων για τη λύση διαφόρων προβλημάτων είναι συνυφασμένη με την έννοια του σφάλματος. Λέγοντας σφάλμα εννοούμε την απόκλιση της παρεχόμενης αριθμητικής λύσης από την πραγματική (αυτή που θα μπορούσε να υπολογιστεί θεωρητικά). Είναι ουσιαστικό να μην αγνοούμε τη μελέτη των διαφόρων σφαλμάτων που δημιουργούνται ή εμφανίζονται στις διάφορες υπολογιστικές μεθόδους που ακολουθούμε στη λύση ενός προβλήματος με τη χρήση ηλεκτρονικού υπολογιστή (Η/Υ). Πρέπει να "βλέπουμε" τις διάφορες πηγές σφάλματος πού και πως αλληλεπιδρούν και επηρεάζουν την ακρίβεια του αποτελέσματος. Τις διάφορες αυτές πηγές ή τα ίδια τα σφάλματα μπορούμε να τα κατατάξουμε ως εξής: Σφάλμα (ή αβεβαιότητα) στα αρχικά δεδομένα. Στα προβλήματα στα οποία μια υ- πάρχουσα ή προτεινόμενη κατάσταση μοντελοποιείται με μια π. χ. εξίσωση, συχνά έχουμε συντελεστές οι οποίοι δεν είναι επακριβώς γνωστοί ή το μοντέλο από μόνο του δεν αντανακλά τέλεια τη συμπεριφορά της κατάστασης. Ο αναλυτής δεν μπορεί να κάνει τίποτα προκειμένου να αποφύγει τέτοια σφάλματα, επιλέγοντας την υπολογιστική μέθοδο, αλλά πρέπει να είναι ενήμερος για τέτοιες α- βεβαιότητες. Ειδικότερα, μπορεί να χρειάζεται να κάνει δοκιμές/ελέγχους προκειμένου να δει πόσο ευαίσθητα είναι τα αποτελέσματα των υπολογισμών του σε αλλαγές των δεδομένων. Επειδή δε, ο σκοπός των υπολογισμών δεν είναι απλά κάποιο αριθμητικό αποτέλεσμα αλλά το κατά πόσο το μοντέλο ανταποκρίνεται στην πραγματικότητα, η ανάλυση ευαισθησίας παίζει σημαντικό ρόλο. Διαδιδόμενο σφάλμα. Με αυτόν τον όρο εννοούμε το σφάλμα στα επόμενα στάδια της διαδικασίας που οφείλεται στην εμφάνιση ενός σφάλματος σε προγενέστερα στάδια. Είναι κατά κάποιο τρόπο ανάλογο των σφαλμάτων στις αρχικές συνθήκες. Αν τα σφάλματα μεγεθύνονται καθώς η υπολογιστική μέθοδος συνεχίζεται, τελικά θα επισκιάσουν την αληθή τιμή, καταστρέφοντας την ισχύ της. Καλούμε μια τέτοια μέθοδο ασταθή. Σε μια μη ασταθή μέθοδο (επιθυμητή μέθοδος) τα σφάλματα σε αρχικά στάδια φθίνουν, καθώς αυτή εξελίσσεται. Σφάλμα αποκοπής (truncation error). Ο όρος αυτός αναφέρεται σε σφάλματα που εισάγονται όταν μια πολύπλοκη μαθηματική έκφραση "αντικαθίσταται" με έναν πιο απλό τύπο.

Αυτή η ορολογία έχει να κάνει με την τεχνική της αντικατάστασης μιας συνάρτησης με μια αποκομμένη σειρά Taylor. Συνήθως ο όρος αυτός δίνεται σε σφάλματα που προκαλούνται από την ίδια την υπολογιστική μέθοδο που ακολουθούμε. Στις επαναληπτικές μεθόδους αυτό το σφάλμα ελαττώνεται με επανειλημμένες επαναλήψεις. Σφάλμα στρογγυλοποίησης (round-off error). Όλες οι υπολογιστικές μηχανές αναπαριστάνουν τους αριθμούς με κάποια έλλειψη ακρίβειας. Όπως θα δούμε στην επόμενη ενότητα, οι Η/Υ χρησιμοποιούν τους αριθμούς κινητής υποδιαστολής με σταθερό μήκος λέξης και οι αληθείς τιμές δεν εκφράζονται ακριβώς με τέτοιες αναπαραστάσεις. Λέμε αυτό το σφάλμα, σφάλμα στρογγυλοποίησης, ανεξάρτητα αν το δεκαδικό μέρος στρογγυλεύεται (rounded) ή κόβεται (chopped) μετά το τελικό ψηφίο. 2. Αριθμοί Κινητής Υποδιαστολής Για να εξετάσουμε λεπτομερώς το σφάλμα στρογγυλοποίησης, πρέπει να καταλάβουμε πως αναπαριστώνται στους Η/Υ οι αριθμητικές ποσότητες. Είναι γνωστό ότι οι πραγματικοί αριθμοί παριστάνονται στον Η/Υ προσεγγιστικά γιατί το μήκος μιας λέξης του είναι περιορισμένο και κατά συνέπεια οι αριθμοί αποθηκεύονται στη μνήμη του Η/Υ στρογγυλεμένοι ή κομμένοι. Π.χ. αν ο Η/Υ είναι κατασκευασμένος να κρατά έξι δεκαδικά ψηφία, τότε αποθηκεύει τον αριθμό 2/3 στρογγυλεμένο ως 0.666667 και κομμένο ως 0.666666. Εξαιτίας λοιπόν της περιορισμένης αποθηκευτικής ικανότητας, ένας πραγματικός αριθμός είναι, ή δεν είναι δυνατό, να αναπαρασταθεί ακριβώς σ έναν υπολογιστή, και η αριθμητική των Η/Υ είναι αριθμητική υπολογισμών πεπερασμένης ακρίβειας οι δε αριθμοί προσεγγίζονται με αριθμούς κινητής υποδιαστολής. Ένας πραγματικός μη μηδενικός αριθμός x προσεγγίζεται στη μνήμη του Η/Υ συνήθως σε κανονικοποιημένη μορφή ως x =srβ e όπου s = ±1 είναι το πρόσημο, r ένας κανονικοποιημένος αριθμός του αριθμητικού συστήματος με βάση το β και e ένας ακέραιος εκθέτης. Συνήθως χρησιμοποιείται η κανονικοποίηση και η βάση β = 2. β 1 r < 1

2.1 Το δυαδικό σύστημα Οι περισσότεροι υπολογιστές κάνουν αριθμητική χρησιμοποιώντας το δυαδικό σύστημα (βάση 2). Μπορεί να φαίνεται διαφορετικά, επειδή η επικοινωνία με τον υπολογιστή (δεδομένα εισόδου/εξόδου) είναι στο δεκαδικό σύστημα (βάση 10), αλλά αυτό δε σημαίνει ότι ο Η/Υ χρησιμοποιεί τη βάση 10. Μετατρέπει τα δεδομένα εισόδου σε βάση 2 (ή ίσως σε βάση 16), στη συνέχεια κάνει αριθμητική στο δυαδικό σύστημα και τελικά μετατρέπει την απάντηση στο δεκαδικό σύστημα πριν εμφανίσει το αποτέλεσμα στην οθόνη. Για να πιστοποιηθεί αυτό χρειάζεται κάποιος πειραματισμός από μέρους μας! Χρησιμοποιώντας υπολογιστή με ακρίβεια εννέα δεκαδικών ψηφίων βλέπουμε Εδώ η πρόθεσή μας ήταν να προσθέσουμε τον αριθμό 1/10 100 000 φορές. Η μαθηματική απάντηση είναι 10 000 ακριβώς. Πρέπει να καταλάβουμε τον λόγο του φαινομενικά ελαττωματικού υπολογισμού του υπολογιστή όπου αντί να μας επιστρέψει ως αποτέλεσμα την τιμή 10000 μας επέστρεψε την τιμή 9999.99447 (έχουμε δηλαδή απόκλιση 0.00553). Στο τέλος αυτής της ενότητας θα δούμε πως κάτι "χάνεται" όταν ο υπολογιστής μετατρέπει το δεκαδικό κλάσμα 1/10 σε δυαδικό αριθμό. Έστω τώρα n ένας θετικός ακέραιος. Τότε υπάρχουν τα ψηφία α 0, α 1,, α k έτσι ώ- στε ο n να έχει με βάση το 10 το ανάπτυγμα, όπου τα ψηφία α k έχουν επιλεγεί από το {0, 1,,9}. Έτσι ο αριθμός n εκφράζεται σε δεκαδική μορφή ως ή αν είναι αυτονόητο ότι το 10 είναι η βάση, τότε (2.1) n = α k α k-1 α 2 α 1 α 0 (10) (2.2) n = α k α k-1 α 2 α 1 α 0 Για παράδειγμα, ο αριθμός 1821 έχει, με βάση το 10, το ανάπτυγμα, 1821 = (1 10 3 ) + (8 10 2 ) + (2 10 1 ) + (1 10 0 ) και φυσικά καταλαβαίνουμε ότι 1821 = 1821 (10). Χρησιμοποιώντας δυνάμεις του 2, ο αριθμός 1821 μπορεί να γραφτεί 1821= (1 2 10 )+(1 2 9 )+(1 2 8 )+(0 2 7 )+(0 2 6 )+(0 2 5 )+(1 2 4 )+(1 2 3 )+(1 2 2 )+(0 2 1 )+(1 2 0 ) γεγονός που μπορεί να επαληθευτεί εκτελώντας τον υπολογισμό

1821 = 1024 + 512 + 256 + 16 + 8 + 4 + 1. Γενικά, έστω n ένας θετικός ακέραιος. Τότε υπάρχουν τα ψηφία β 0, β 1,, β k έτσι ώστε ο n να έχει με βάση το 2 το ανάπτυγμα, n = (β i 2 i ) + (β i-1 2 i-1 ) + + (β 1 2 1 ) + (β 0 2) (2.3) όπου τα ψηφία β i έχουν επιλεγεί από το {0, 1}. Έτσι ο αριθμός n εκφράζεται σε δυαδική μορφή ως n = β i β i-1 β 2 β 1 β 0 (2) (2.4) Για παράδειγμα, χρησιμοποιώντας το ανάπτυγμα που είδαμε ότι έχει ο αριθμός 1821 σε δυνάμεις του 2 μπορούμε να γράψουμε, 1821= 11100011101 (2) Επειδή οι δυνάμεις του 2 αυξάνονται πιο αργά από αυτές του 10, συνήθως η δυαδική αναπαράσταση ενός αριθμού θα απαιτεί περισσότερα ψηφία απ ότι η δεκαδική αναπαράστασή του. Από την (2.3) μπορεί να προκύψει ένας αλγόριθμος για να βρίσκουμε την αναπαράσταση ενός ακεραίου n ως προς τη βάση 2 Η σχέση αυτή μας δηλώνει ότι το υπόλοιπο της διαίρεσης του n με το 2, είναι το ψηφίο β 0 και για να προσδιορίσουμε στη συνέχεια το β 1 έχουμε, δηλαδή το υπόλοιπο της διαίρεσης του Π 0 με το 2 είναι το ψηφίο β 1. Μπορούμε να συνεχίσουμε τη διαδικασία αυτή οπότε θα δημιουργηθούν οι ακολουθίες {Π k } και {β k } των πηλίκων και των υπόλοιπων αντίστοιχα, της διαίρεσης του ακεραίου n με το 2. Η διαδικασία θα τερματιστεί όταν θα προκύψει ένας ακέραιος j τέτοιος ώστε Π j = 0: Έτσι για τον n = 1821 ο παραπάνω αλγόριθμος μας δίνει:

δηλαδή η δυαδική αναπαράσταση του 1821 είναι, Κώδικας του MATLAB: function r = dyad(a) i = 0; r = []; while (i= =0) (a~=0) i = i+1; r(i) = mod(a,2); a = floor(a/2); 1821 = β 10 β 9 β 2 β 1 β 0 (2) = 11100011101 (2). Εκτελώντας την παραπάνω συνάρτηση στο MATLAB, έχουμε >> dyad(1821) 1 0 1 1 1 0 0 0 1 1 1 Το MATLAB διαθέτει την ενσωματωμένη συνάρτηση dec2bin που κάνει τη μετατροπή από τη δεκαδική στη δυαδική αναπαράσταση ενός ακεραίου: >> dec2bin(1821) 1 1 1 0 0 0 1 1 1 0 1 και την bin2dec για την αντίστροφη μετατροπή: >> bin2dec('11100011101') 1821 Ας αντιμετωπίσουμε τώρα την περίπτωση που ο n δεν είναι ακέραιος.

Όταν μετατρέπουμε έναν ρητό αριθμό σε δεκαδική μορφή χρειαζόμαστε συχνά πολλά ή άπειρα ψηφία. Κλασσική περίπτωση είναι ο αριθμός όπου το σύμβολο 3 σημαίνει ότι το 3 είναι ένα απείρως επαναλαμβανόμενο δεκαδικό ψηφίο. Είναι αυτονόητο ότι το 10 είναι η βάση στην παραπάνω σχέση και η σχέση αυτή είναι η συντόμευση για τη δυναμοσειρά 1 Αν εμφανίζεται πεπερασμένο πλήθος ψηφίων τότε παίρνουμε μια προσέγγιση του 1/3. Για παράδειγμα, 1/3 0.333 = 333/1000. Το σφάλμα σ' αυτή την προσέγγιση είναι 1/3000, όπως μπορούμε εύκολα να επαληθεύσουμε χρησιμοποιώντας την παραπάνω σχέση: 1/3 = 0.333 + 1/3000. Δυαδικά κλάσματα μπορούν να εκφραστούν σαν αθροίσματα που περιέχουν αρνητικές δυνάμεις του 2. Αν r είναι ένας πραγματικός αριθμός στο διάστημα (0, 1), υπάρχουν ψηφία d 1, d 2,, d n, τέτοια, ώστε r = (d 1 2-1 ) + (d 2 2-2 ) + + (d n 2 -n ) + (2.5) όπου d i {0, 1}. Συνήθως γράφουμε την (2.5) σε δυαδική κλασματική μορφή

r = 0.d 1 d 2 d n (2) Μπορούμε από την (2.5) να βγάλουμε τον αλγόριθμο εύρεσης της δυαδικής αναπαράστασης: (2.5) 2r = d 1 + ((d 2 2-1 ) + + (d n 2 -n+1 ) + ) (2.6) Επειδή η ποσότητα μέσα στην παρένθεση είναι θετικός αριθμός και μικρότερος του 1, προκύπτει ότι το d 1 είναι το ακέραιο μέρος του 2r. Συμβολίζοντας το ακέραιο μέρος ενός πραγματικού αριθμού x με [x] και το κλασματικό του με ]x[ έχουμε Η διαδικασία επαναλαμβάνεται, ίσως και άπειρες φορές (αν ο r έχει μια δυαδική αναπαράσταση απείρως επαναλαμβανόμενη) και δημιουργούνται δύο αναδρομικές ακολουθίες (dn) και (fn): όπου Η δυαδική αναπαράσταση του r δίνεται από τη συγκλίνουσα δυναμοσειρά (γεωμετρική) Παράδειγμα 2.1 Έστω r = 7/10 = 0.7. Τότε Παρατηρούμε ότι 2f 2 = 2f 6 και θα εμφανίζονται d i = d i+4 και f i = f i+4 για i = 2, 3, Έτσι καταλήγουμε στο ότι, 7/10 = 0.10110 ( 2).

Μπορούμε να χρησιμοποιήσουμε τη γεωμετρική σειρά για να βρούμε ποιόν ρητό α- ριθμό με βάση το 10 παριστάνει ένας δυαδικός αριθμός. Παράδειγμα 2.2 Ας βρούμε ποιόν ρητό με βάση το 10 παριστάνει ο δυαδικός αριθμός 0.01 ( 2). Είναι, Αν θέλουμε να βρούμε έναν ρητό που είναι ισοδύναμος με δυαδικό που έχει αναπαράσταση απείρως επαναλαμβανόμενη, συνήθως είναι χρήσιμη η μετατόπιση των ψηφίων. Για παράδειγμα έχουμε τον αριθμό R = 0.0000011000 ( 2) (2.8) Πολλαπλασιάζοντας και τα δύο μέλη της (2.8) με 2 5 θα μετακινηθεί η δυαδική τελεία πέντε θέσεις δεξιά και έχουμε 32R = 0.11000 ( 2) (2.9) Πολλαπλασιάζοντας τώρα και τα δύο μέλη της (2.8) με 2 10 θα μετακινηθεί η δυαδική υποδιαστολή δέκα θέσεις δεξιά και έχουμε 1024R = 11000.11000 ( 2) (2.10) οπότε αφαιρώντας κατά μέλη τις (2.10) και (2.9) βρίσκουμε ή αφού 11000 (2) = 24. Άρα, R = 3/124 992R = 11000 (2) 992R = 24, Όπως είπαμε και στην αρχή οι υπολογιστές χρησιμοποιούν μια κανονικοποιημένη δυαδική αναπαράσταση κινητής υποδιαστολής των πραγματικών αριθμών. Αυτό σημαίνει ότι ο υπολογιστής αποθηκεύει μια δυαδική προσέγγιση για τον x: x ± r 2 e (2.11) Ο αριθμός r λέγεται μάντισσα (mantissa) ή σημαινόμενο (significand) και είναι μια πεπερασμένη δυαδική έκφραση που ικανοποιεί την 1/2 r <1.

Ο ακέραιος e λέγεται εκθέτης. Σ έναν υπολογιστή, χρησιμοποιείται ένα μικρό μόνον υποσύνολο των πραγματικών αριθμών. Ο αριθμός των δυαδικών ψηφίων είναι περιορισμένος και στους δύο αριθμούς r και e. Για παράδειγμα, ας θεωρήσουμε το σύνολο όλων των θετικών πραγματικών αριθμών της μορφής 0.d 1 d 2 d 3 d 4 (2) 2 n όπου d 1 = 1 και d 2, d 3 και d 4 είναι 0 ή 1, και n {-3, -2, -1, 0, 1, 2, 3, 4}. Υπάρχουν 2 3 = 8 επιλογές για τη μάντισσα και 8 για τον εκθέτη, επομένως έχουμε ένα σύνολο 8 8 = 64 αριθμών: {0.1000 (2) 2-3, 0.1001 (2) 2-3,, 0.1110 (2) 2 4, 0.1111 (2) 2 4 } Οι δεκαδικές μορφές αυτών των 64 αριθμών δίνονται στον παρακάτω Πίνακα και είναι σημαντικό να ξέρουμε ότι όταν περιορίζονται η μάντισσα και ο εκθέτης στην (2.12), ο υπολογιστής έχει να επιλέξει από έναν περιορισμένο αριθμό τιμών για να την αποθηκεύσει σαν μια προσέγγιση του πραγματικού αριθμού x. Πίν. 2.1 Δεκαδικοί ισοδύναμοι για το σύνολο των δυαδικών αριθμών με 4-bit μάντισσα και εκθέτη n = -3, -2,,3, 4 Τι θα συνέβαινε αν ο υπολογιστής είχε μόνον μια 4-bit μάντισσα και έπρεπε να εκτελέσει τον υπολογισμό 1 1 1 + + ; 10 5 6 Ας υποθέσουμε ότι ο υπολογιστής στρογγυλοποιεί όλους τους πραγματικούς αριθμούς στον πλησιέστερο δυαδικό αριθμό (βλ. Πιν. 2.1) οπότε:

Ο υπολογιστής πρέπει να αποφασίσει πως θα αποθηκεύσει τον αριθμό 0.00111 (2) 2-2. Υποθέτοντας ότι στρογγυλοποιεί στον 0.1010 (2) 2-1, το επόμενο βήμα είναι Ο υπολογιστής πρέπει να αποφασίσει πως θα αποθηκεύσει τον αριθμό 0.11111 (2) 2-1. Επειδή έχουμε υποθέσει ότι γίνεται στρογγυλοποίηση, αποθηκεύει 0.1000 (2) 2 0. Έτσι η λύση που δίνει ο υπολογιστής αυτός στο πρόβλημα της παραπάνω πρόσθεσης είναι Το σφάλμα στον υπολογισμό του υπολογιστή είναι Αν το εκφράσουμε σε επί τοις εκατό ποσοστό του 7/15, αυτό ισοδυναμεί με 7.14% περίπου. Για να αποθηκεύουν αριθμούς με καλή ακρίβεια, οι υπολογιστές πρέπει να έχουν δυαδικούς αριθμούς κινητής υποδιαστολής με μάντισσα 24 ψηφίων τουλάχιστον, που μεταφράζεται σε αριθμούς επτά περίπου δεκαδικών θέσεων. Αν χρησιμοποιείται μια 32-bit μάντισσα, μπορούν να αποθηκεύονται αριθμοί με εννέα δεκαδικές θέσεις. Ας δούμε τώρα την περίπτωση που είχαμε θεωρήσει στην αρχή της ενότητας κατά την οποία ο υπολογιστής πρόσθεσε επανειλημμένα το 1/10. Υποθέτουμε ότι στην (2.11) η μάντισσα περιέχει 32 δυαδικά bit. Η συνθήκη 1/2 r<1 συνεπάγεται ότι το πρώτο ψηφίο είναι d 1 = 1, οπότε r = 0.1d 2 d 3 d 32 (2) Όταν παριστάνονται κλάσματα σε δυαδική μορφή, συχνά χρειάζονται απείρως περισσότερα ψηφία.

Ένα παράδειγμα είναι το 1 0.00011( 2) 10 = όπου λαμβάνει χώρα αποκοπή και ο υπολογιστής χρησιμοποιεί την εσωτερική προσέγγιση Το σφάλμα σ αυτή την προσέγγιση είναι δηλαδή ο υπολογιστής σφάλει όταν προσθέτει τους 100000 προσθετέους του 1/10 και το σφάλμα πρέπει να είναι μεγαλύτερο από (100,000) (2.328306437 10-11 Στην πραγματικότητα το σφάλμα είναι πολύ μεγαλύτερο. Ενίοτε, το μερικό άθροισμα μπορεί να είναι στρογγυλεμένο προς τα πάνω ή προς τα κάτω και, καθώς το άθροισμα μεγαλώνει, οι τελευταίοι προσθετέοι του 1/10 είναι μικροί συγκρινόμενοι με το τρέχον μέγεθος του αθροίσματος με αποτέλεσμα η συνεισφορά τους να αποκόπτεται σε μεγαλύτερο βαθμό. Ο συνδυασμός όλων αυτών είχε σαν αποτέλεσμα το σφάλμα, 10 000 9999.99447 = 5.53 10-3. Πρέπει να γίνει κατανοητό ότι οποιαδήποτε υλοποίηση σε υπολογιστή της (2.11) υ- πόκειται σε περιορισμούς για τον αριθμό των ψηφίων που χρησιμοποιούνται στη μάντισσα r και ότι το εύρος των τιμών του εκθέτη πρέπει να είναι περιορισμένο. Οι υπολογιστές που χρησιμοποιούν 32 bit για την απλής ακρίβειας (single-precision) αναπαράσταση των πραγματικών αριθμών διαθέτουν 8 bit για τον εκθέτη και 24 bit για το πρόσημο και τη μάντισσα. Μπορούν να αναπαριστάνουν πραγματικούς αριθμούς μεγέθους στο διάστημα 2.938736Ε-39 έως 1.701412Ε+38 (δηλ. 2-128 έως 2 127 ) με έξι δεκαδικά ψηφία αριθμητικής ακρίβειας (αφού 2-23 = 1.2 10-7 ). Οι υπολογιστές που χρησιμοποιούν 48 bit για την απλής ακρίβειας αναπαράσταση των πραγματικών αριθμών διαθέτουν 8 bit για τον εκθέτη και 40 bit για το πρόσημο και τη μάντισσα. Μπορούν να αναπαριστάνουν πραγματικούς αριθμούς μεγέθους στο διάστημα

2.9387358771Ε-39 έως 1.7014118346Ε+38 (δηλ. 2-128 έως 2 127 ) με έντεκα δεκαδικά ψηφία αριθμητικής ακρίβειας (αφού 2-39 = 1.8 10-12 ). Αν ο υπολογιστής έχει 64-bit διπλής ακρίβειας (double-precision) πραγματικούς α- ριθμούς, χρησιμοποιεί 11 bit για τον εκθέτη και 53 bit για τη μάντισσα. Μπορεί να αναπαριστάνει πραγματικούς αριθμούς μεγέθους 5.562684646268003Ε-309 έως 8.988465674311580Ε+307 (δηλ. 2-1024 έως 2 1023 ) με δεκάξι δεκαδικά ψηφία αριθμητικής ακρίβειας (αφού 2-52 = 2.2 10-16 ). 2.2 Συστήματα αριθμών κινητής υποδιαστολής Από όσα είπαμε μέχρι τώρα, βλέπουμε ότι επιτρέποντας μια επιλογή της βάσης β διαφορετική του 2, ένας μη μηδενικός κανονικοποιημένος αριθμός κινητής υποδιαστολής x ως προς τη βάση β, έχει τη μορφή: ή x = (-1) s d 1.d 2 d 3 d t β e x = ±rβ e (2.13) όπου e είναι ο εκθέτης, r η μάντισσα ή σημαινόμενο, t η ακρίβεια (precision), (-1) s το πρόσημο και (.d 2 d 3 d t ) είναι το κλάσμα (fraction). Να σημειώσουμε ότι, 0 d i < β, d 1 0 και ότι το t είναι πεπερασμένο. Το σύνολο όλων των αριθμών κινητής υποδιαστολής, το οποίο καλούμε σύστημα αριθμών κινητής υποδιαστολής, χαρακτηρίζεται από τέσσερις παραμέτρους: β η βάση t η ακρίβεια L, U ανώτερο και κατώτερο όριο για τον εκθέτη Οι παράμετροι L και U εξαρτώνται από τη μηχανή. Το MATLAB πάντα δουλεύει σε διπλή ακρίβεια και η παρουσίαση σε format Long E στην οθόνη δείχνει t = 16 και β = 10. Μπορούμε να ανακαλύψουμε το U της μηχανής με το εξής σύντομο πρόγραμμα: Κώδικας του MATLAB function U x=10; y=100; U=0; while x~=y, x=y; y=10*y; U=U+1; U

Εκτελώντας την παραπάνω συνάρτηση στο MATLAB έχουμε >> U U = 308 Παρόμοια μπορούμε να προσδιορίσουμε το L: Κώδικας του MATLAB function L x=1; y=.1; L=1; while x~=y, x=y; y=y/10; L=L-1; L Εκτελώντας την παραπάνω συνάρτηση στο MATLAB έχουμε >> L L = -323 Το σύστημα των αριθμών κινητής υποδιαστολής είναι ένα κάπως άτεχνο σύστημα αριθμών. Υπάρχουν 10 16 δυνατές μάντισσες, έτσι σε κάθε διάστημα [10 e, 10 e+1 ] υπάρχουν 10 16 αριθμοί κινητής υποδιαστολής. Το διάστημα όμως αυτό έχει μήκος 10 e+1-10 e = 9 10 e που είναι 10 φορές μακρύτερο από το προηγούμενο διάστημα [10 e-1, 10 e ] το οποίο έχει μήκος 9 10 e-1, και είναι 10 φορές κοντύτερο από το επόμενο διάστημα [10 e+1, 10 e+2 ] το οποίο έχει μήκος 9 10 e+2. Επομένως οι αριθμοί κινητής υποδιαστολής κατανέμονται πολύ πυκνά κοντά στο 0 και πολύ αραιά κοντά στο 10 U. Για να έχουμε μια εικόνα της κατανομής των αριθμών κινητής υποδιαστολής ας κάνουμε τη γραφική παράσταση των αριθμών κινητής υποδιαστολής με t = 1 για β = 10 και 0 e 3. >> x=1:9; >> x=[x,10*x,100*x]; y=ones(size(x)); plot(x,y,' ')

2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 200 400 600 800 1000 Ας συμβολίσουμε τώρα με F t το σύνολο των κανονικοποιημένων αριθμών κινητής υποδιαστολής με ακρίβεια t. Το σύνολο αυτό, στο οποίο είναι d 1 0, δεν είναι κλειστό ως προς τις γνωστές μας αριθμητικές πράξεις: το άθροισμα, η διαφορά, το γινόμενο και το πηλίκο δύο αριθμών κινητής υποδιαστολής από το σύνολο F t δεν είναι αναγκαία ένας αριθμός του F t. Για να το δούμε αυτό ας θεωρήσουμε το απλό παράδειγμα στο σύστημα με β = 10, t = 3, L = -1, U = 2: Το γινόμενο a b = 28.116 = 2.8116 10 1 δεν είναι στο F 3. Έτσι, κατά τη διάρκεια ενός υπολογισμού, ένας υπολογισμένος αριθμός μπορεί κάλλιστα να βρεθεί εκτός του F t. Υπάρχουν δύο περιπτώσεις να συμβεί κάτι τέτοιο: ο εκθέτης του αριθμού μπορεί να βρεθεί εκτός του διαστήματος [L, U] ή το κλασματικό μέρος μπορεί να περιέχει περισσότερα από (t - 1) ψηφία. Αν ο υπολογισμός δίνει έναν εκθέτη μεγαλύτερο του U (μικρότερο του L), τότε λέμε ότι έχουμε υπερεκχείλιση (overflow) του εκθέτη (υποεκχείλιση (underflow)) του εκθέτη). Η υπερεκχείλιση είναι ένα σοβαρό πρόβλημα και για τα περισσότερα συστήματα το αποτέλεσμα μιας υπερεκχείλισης είναι ±. Η υποεκχείλιση είναι συνήθως ένα λιγότερο σοβαρό πρόβλημα και το αποτέλεσμα μιας υποεκχείλισης είναι μια τιμή να τεθεί μηδέν, ένας μη κανονικοποιημένος αριθμός, ή ± 2 L.

Παράδειγμα 2.3 a) Υπερεκχείλιση. Έστω β = 10, t = 3, L = -3, U = 3. έχει σαν αποτέλεσμα υπερεκχείλιση γιατί ο εκθέτης 6 είναι πολύ μεγάλος για την περίπτωσή μας. b) Υποεκχείλιση. Έστω β = 10, t = 3, L = -2, U = 3. έχει σαν αποτέλεσμα υποεκχείλιση γιατί ο εκθέτης -6 είναι πολύ μικρός για την περίπτωσή μας. Υπερεκχείλιση και υποεκχείλιση είναι δυνατό μερικές φορές να αποφευχθούν αν κάνουμε τους υπολογισμούς με διαφορετικό τρόπο. Ας θεωρήσουμε, για παράδειγμα, τον υπολογισμό του μέτρου ενός διανύσματος x με συντεταγμένες x 1, x 2,, x n x = x + x + + x 2 2 2 1 2 n Αν κάποιο x i είναι πολύ μεγάλο (μικρό) τότε μπορεί να συμβεί υπερεκχείλιση (υποεκχείλιση) υπολογίζοντας με τον συνήθη τρόπο το x. Αν όμως διαιρέσουμε κάθε x i με s = max( x 1, x 2,, x n ) και στη συνέχεια σχηματίσουμε τα τετράγωνα και υπολογίσουμε το άθροισμά τους, τότε αποφεύγουμε το πρόβλημα της υπερεκχείλισης. Έτσι, ένας καλύτερος τρόπος να υπολογίσουμε το x είναι αυτός που περιγράφεται από τον αλγόριθμο ΑΛΓΟΡΙΘΜΟΣ Μέτρο Διανύσματος Βήμα 1: Εύρεση του value = max( x 1, x 2,, x n ) Βήμα 2: Υπολογισμός του y i = x i /value Βήμα 3: Υπολογισμός του αθροίσματος Ψευδοκώδικας Συνάρτηση Μέτρο(x) sumx = 0; sumx = value n i= 1 2 y i

value = max( x 1, x 2,, x n ) Για i=1 μέχρι n y i = x i /value sumx = sumx + y i 2 normx = value Κώδικας του MATLAB sumx %Η συνάρτηση C = normx(x) υπολογίζει την Ευκλείδεια νόρμα %ενός δεδομένου διανύσματος x. %Παρόμοια με την ενσωματωμένη συνάρτηση του MATLAB norm function C = normx(x) [m,n] = size(x); value=max(abs(x)); sumx=0; y=zeros(1,n); for i=1:n y(i)=x(i)/value; sumx=sumx+y(i)^2; normx=value*sqrt(sumx) 3. Σφάλματα Στρογγυλοποίησης Αν το υπολογισμένο αποτέλεσμα ενός πραγματικού αριθμού δεν είναι αναπαραστήσιμο από τη μηχανή, υπάρχουν δύο τρόποι για να αναπαρασταθεί τελικά. Θεωρούμε ±d 1.d 2 d t d t+1 Με τον πρώτο τρόπο, το κόψιμο (chopping), τα ψηφία μετά το d t απλά κόβονται. Με τον δεύτερο τρόπο, την στρογγυλοποίηση (rounding), κόβονται τα ψηφία μετά το d t και το ψηφίο d t στρογγυλοποιείται προς τα πάνω ή προς τα κάτω, ανάλογα με το αν είναι d t+1 β/2 ή d t+1 < β/2, αντίστοιχα. Έστω ότι fl(x) συμβολίζει την αναπαράσταση του πραγματικού αριθμού x στο σύστημα αριθμών κινητής υποδιαστολής. Θα θεωρούμε ότι όλα τα σφάλματα είναι σφάλματα στρογγυλοποίησης, εκτός αν δηλώνεται διαφορετικά. Παράδειγμα 3.1 Στρογγυλοποίηση. Έστω Τότε θα είναι β = 10 και x = 4.341596

Θα δώσουμε τώρα μια έκφραση του μέτρου του σφάλματος που γίνεται όταν αναπαριστάνουμε τον πραγματικό αριθμού x στον υπολογιστή και στη συνέχεια θα δούμε πώς αυτό το μέτρο μπορεί να χρησιμοποιηθεί προκειμένου να έχουμε κάποια φράγματα για τα σφάλματα κατά τους υπολογισμούς με αριθμούς κινητής υποδιαστολής. Ορισμός 3.1 Αν με x συμβολίσουμε μια προσέγγιση του x τότε λέμε: Το σχετικό σφάλμα είναι συχνά μια καλύτερη ένδειξη της ακρίβειας του αποτελέσματος. Ας δούμε ένα παράδειγμα. Παράδειγμα 3.2 Έστω x 1 = 1.31 x 1 = 1.30 και x 2 = 0.12 x 2 = 0.11 Τα απόλυτα σφάλματα στις δυο περιπτώσεις είναι τα ίδια: ενώ, το σχετικό σφάλμα στην πρώτη περίπτωση είναι και το σχετικό σφάλμα στη δεύτερη περίπτωση είναι Τα σχετικά σφάλματα δείχνουν ότι η x 1 είναι πλησιέστερα στην x 1 απ ότι είναι η x 2 στην x 2, ενώ τα απόλυτα δεν μας έδωσαν καμιά ένδειξη γι αυτό. Το σχετικό σφάλμα μας δίνει μια ένδειξη για τα σημαντικά ψηφία σε μια προσεγγιστική απάντηση. Ειδικότερα, έχουμε: Ορισμός 3.2 Λέμε ότι η τιμή x προσεγγίζει την τιμή x σε n σημαντικά ψηφία αν ο n είναι ο μεγαλύτερος μη αρνητικός ακέραιος για τον οποίο είναι

(2.14) Έτσι, στο παράδειγμα 3.1, οι x 1 και x 1 συμφωνούν σε δύο σημαντικά ψηφία, ενώ οι x 2 και x 2 σε ένα. Για το σχετικό σφάλμα ισχύει η εξής πρόταση, την απόδειξη της οποίας αφήνουμε ως άσκηση: Πρόταση 3.1 Αν fl(x) είναι η αναπαράσταση του πραγματικού αριθμού x στο σύστημα αριθμών κινητής υποδιαστολής τότε Παράδειγμα 3.3 Ας θεωρήσουμε την αναπαράσταση του δεκαδικού αριθμού x = 0.2346 στο σύστημα αριθμών κινητής υποδιαστολής με β = 10 και t = 3, (2.15) δηλ. την αναπαράσταση του δεκαδικού αριθμού 0.2346 με δεκαδικό αριθμό με τρία δεκαδικά ψηφία. Αν χρησιμοποιήσουμε στρογγυλοποίηση, έχουμε Αν χρησιμοποιήσουμε κόψιμο, έχουμε Ο αριθμός ε στην (2.15) λέγεται η ακρίβεια μηχανής (machine precision) ή μοναδιαίο σφάλμα στρογγυλοποίησης (unit round-off error) και είναι ο μικρότερος θετικός αριθμός κινητής υποδιαστολής για τον οποίο είναι fl(1 + ε) > 1 Ο ε είναι συνήθως της τάξεως του 10-16 και 10-6 (στις περισσότερες μηχανές) για διπλή και απλή ακρίβεια, αντίστοιχα. Στο MATLAB αυτός ο αριθμός παριστάνεται με τη μεταβλητή eps. Πηγαίνοντας στο help του MATLAB διαβάζουμε: EPS Floating point relative accuracy.

EPS returns the distance from 1.0 to the next largest floating point number Μπορούμε να ανακαλύψουμε το ε της μηχανής με το εξής σύντομο πρόγραμμα: Κώδικας του MATLAB function x=epsilon x=1.0; y=2.0; while y>1 z=x; x=0.5*x; y=x+1; x=z; Εκτελώντας την παραπάνω συνάρτηση στο MATLAB έχουμε >> Εpsilon 2.2204e-016 και χρησιμοποιώντας τη συνάρτηση eps για επαλήθευση, >> eps 2.2204e-016 4. Νόμοι Αριθμητικής Κινητής υποδιαστολής Πρότυπο IEEE Εργασία/Παρουσίαση

5. Διαγραφή και Αναδρομικοί Υπολογισμοί 5.1 Σφάλματα που οφείλονται σε διαγραφή Από διαίσθηση, είναι φανερό ότι αν έχουμε κάνει ένα μεγάλο αριθμό υπολογισμών κινητής υποδιαστολής, τότε το συσσωρευμένο σφάλμα μπορεί να είναι αρκετά μεγάλο. Όμως καταστρεπτικό σφάλμα στρογγυλοποίησης μπορεί να έχουμε και σε ένα μόνο υπολογιστικό βήμα. Για παράδειγμα, ας θεωρήσουμε την αφαίρεση των δύο αριθμών Το ακριβές αποτέλεσμα είναι x = 0.54617 και y = 0.54601 α = x y = 0.00016 Αν υποθέσουμε ότι χρησιμοποιούμε τετραψήφια αριθμητική με στρογγυλοποίηση, τότε έχουμε Το σχετικό σφάλμα είναι αρκετά μεγάλο Αυτό που συνέβη είναι το εξής: Στην τετραψήφια αριθμητική, οι αριθμοί 0.5462 και 0.5460 είναι σχεδόν του ιδίου μεγέθους. Έτσι, όταν ο δεύτερος αφαιρέθηκε από τον πρώτο, τα περισσότερο σημαντικά ψηφία διαγράφτηκαν και απόμεινε στην απάντηση το λιγότερο σημαντικό ψηφίο. Αυτό το φαινόμενο, γνωστό ως απώλεια σημαντικότητας ή ως καταστροφική διαγραφή, εμφανίζεται όταν αφαιρούνται δύο αριθμοί του ιδίου περίπου μεγέθους. Με λίγη προσοχή, μπορούμε σε πολλές περιπτώσεις να αποφύγουμε την καταστροφική διαγραφή. Για παράδειγμα, ας θεωρήσουμε την περίπτωση επίλυσης της δευτεροβάθμιας εξίσωσης ax 2 + bx + c = 0, a 0 Ο συνήθης τρόπος που υπολογίζουμε τις δύο ρίζες είναι:

Είναι φανερό ότι αν (σύμφωνα με την αριθμητική που χρησιμοποιούμε), τότε θα εμφανιστεί μια καταστροφική διαγραφή στον υπολογισμό της x 2 και θα έχει σαν αποτέλεσμα να είναι τελείως εσφαλμένη η υπολογισμένη τιμή της x 2. Παράδειγμα 5.1 Έστω a = 1, b = -10 5, και c = 1. Χρησιμοποιώντας β = 10, t = 8 και L = - U = -50, βλέπουμε ότι Η καταστροφική διαγραφή συνέβη γιατί με οκταψήφια αριθμητική είναι, Στο MATLAB (δεκαεξαψήφια αριθμητική) έχουμε: %Long E Format >> x1=(10^5+sqrt(10^10-4))/2 x1 = 9.999999999000000e+004 >> x2=(10^5-sqrt(10^10-4))/2 x2 = 1.000000338535756e-005 >> x2=(10^5-(10^10-4)^(1/2))/2 x2 = 1.000003976514563e-005 >> sqrt(10^10-4) 9.999999998000000e+004 %Short Format >> x1=(10^5+sqrt(10^10-4))/2 x1 = 1.0000e+005 >> x2=(10^5-sqrt(10^10-4))/2 x2 = 1.0000e-005 >> x2=(10^5-(10^10-4)^(1/2))/2 x2 =

1.0000e-005 >> sqrt(10^10-4) 1.0000e+005 Μπορούμε να αποφύγουμε τη διαγραφή αν κάνουμε τους υπολογισμούς χρησιμοποιώντας τους τύπους όπου sign(b) είναι το πρόσημο του b. Με αυτούς τους τύπους βλέπουμε ότι και στο MATLAB: %Long E Format >> x1=(10^5+sqrt(10^10-4))/2 x1 = 9.999999999000000e+004 >> x2=1/(1*x1) x2 = 1.000000000100000e-005 %Short Format >> x1 x1 = 1.0000e+005 >> x2 x2 = 1.0000e-005 Παράδειγμα 5.2 Ας δούμε άλλη μια περίπτωση για το πώς η διαγραφή μπορεί να μας οδηγήσει σε ανακρίβεια και με ποιο τρόπο μπορούμε να διορθώσουμε τα πράγματα. Έστω η συνάρτηση f με Χρησιμοποιώντας έξι ψηφία και στρογγυλοποιώντας βρίσκουμε για την τιμή f(0.01):

Αν για τους υπολογισμούς μας χρησιμοποιήσουμε το ανάπτυγμα της f (σε σειρά) κατά Taylor και μάλιστα αποκομμένη τη σειρά στους τρεις πρώτους όρους της βρίσκουμε Η απάντηση αυτή περιέχει λιγότερο σφάλμα και είναι η ίδια που προκύπτει στρογγυλοποιώντας την πραγματική απάντηση 0.50167084168057542 σε έξι ψηφία. Αν κάνουμε τους υπολογισμούς μας στο MATLAB έχουμε %Short Format >> (exp(0.01)-1-0.01)/(0.01)^2 0.5017 %Long E Format >> (exp(0.01)-1-0.01)/(0.01)^2 5.016708416794892e-001 >>relative_error = (0.5-5.016708416794892e-001)/5.016708416794892e-001 relative_error = -3.330553703092524e-003 %Short Format >> -3.330553703092524e-003-0.0033 >>rel_er = (0.501671-5.016708416794892e- 001)/5.016708416794892e-001 rel_er = 3.1559e-007 5.2 Αναδρομικοί υπολογισμοί Οι αναδρομικοί υπολογισμοί είναι υπολογισμοί που εκτελούνται αναδρομικά έτσι, ώστε ο υπολογισμός σ ένα βήμα να εξαρτάται από τα αποτελέσματα σε προηγούμενα βήματα. Σε τέτοιες περιπτώσεις, ακόμα κι αν το σφάλμα κατά το πρώτο βήμα είναι αμελητέο, το τελικό σφάλμα μπορεί να είναι αρκετά μεγάλο εξαιτίας της συσσώρευσης και της μεγέθυνσης του σφάλματος σε κάθε βήμα.

Ας δούμε ένα παράδειγμα. Παράδειγμα 5.3 Έστω ότι θέλουμε να υπολογίσουμε το ολοκλήρωμα για διάφορες τιμές του n. Με κατά παράγοντες ολοκλήρωση έχουμε ή Έτσι, αν είναι γνωστό το Ι 1, χρησιμοποιώντας αυτήν την αναδρομική σχέση μπορούμε να βρούμε το I n για τις διάφορες τιμές του n. Όντως, με β = 10 και t = 6, επειδή έχουμε Αν και x [0, 1] είναι x n e x-1 > 0, οπότε Ι n > 0, η υπολογισμένη τιμή του Ι 9 είναι αρνητική! Ας δούμε που οφείλεται αυτό. Το σφάλμα στον υπολογισμό του Ι 2 ήταν 2 επί το σφάλμα στον υπολογισμό του Ι 1, το σφάλμα στον υπολογισμό του Ι 3 ήταν 3 επί το σφάλμα στον υπολογισμό του Ι 2, κ.ο.κ. Έτσι, το σφάλμα στον υπολογισμό του Ι 9 ήταν(-2)(-3) (-9) = 9! επί το σφάλμα στον υπολογισμό του Ι 1. Το σφάλμα στο Ι 1 οφείλονταν στη στρογγυλοποίηση του 1/e σε έξι σημαντικά ψηφία το οποίο είναι περίπου ίσο με 4.412 10-7. Αν πολλαπλασιάσουμε αυτό το μικρό σφάλμα με 9! μας δίνει, 9! 4.412 10-7 0.1601 που είναι αρκετά μεγάλο.

Όπως είδαμε και σε προηγούμενα παραδείγματα, υπάρχει τρόπος να έχουμε καλύτερο αποτέλεσμα στους υπολογισμούς μας, αρκεί να τροποποιήσουμε την αναδρομική σχέση έτσι, ώστε σε κάθε βήμα το σφάλμα αντί να μεγεθύνεται να ελαττώνεται. Πράγματι, αν γράψουμε την αναδρομική σχέση, τότε σε κάθε βήμα το σφάλμα θα ελαττώνεται με ένα συντελεστή 1/n. Έτσι, ξεκινώντας με μια μεγάλη τιμή για το n (έστω για παράδειγμα n = 20) και δουλεύοντας προς τα πίσω, μπορούμε να δούμε ότι το αποτέλεσμα για το Ι 9 θα είναι α- κριβές σε εξαψήφια ακρίβεια. Για να πετύχουμε μια τιμή εκκίνησης πρέπει να παρατηρήσουμε ότι Για n = 20 είναι Ι 20 1/21 και ξεκινώντας με Ι 20 = 0 μπορούμε να καταλήξουμε ότι Ι 9 = 0.0916123 που είναι σωστό για εξαψήφια ακρίβεια. Ο λόγος που έχουμε αυτή την ακρίβεια είναι ότι το σφάλμα στο Ι 20 ήταν το πολύ 1/21, αυτό το σφάλμα πολλαπλασιάστηκε κατά τον υπολογισμό του Ι 19 με 1/20 προκαλώντας ένα σφάλμα το πολύ 1 1 = 0.0024 κ.ο.κ. 20 21 6. Ευστάθεια Αλγορίθμων Τα παραδείγματα της προηγούμενης ενότητας είχαν ένα κοινό χαρακτηριστικό: Η ανακρίβεια του αποτελέσματος σε κάθε περίπτωση οφείλονταν εξ ολοκλήρου στη μέθοδο υπολογισμού (αλγόριθμο) που χρησιμοποιήσαμε, γιατί από τη στιγμή που αλλάξαμε ή τροποποιήσαμε τον αλγόριθμο και τον εφαρμόσαμε στο πρόβλημα με τα ίδια δεδομένα, το αποτέλεσμα των υπολογισμών έγινε ικανοποιητικό. Έτσι, μιλάμε για δυο διαφορετικούς τύπους αλγορίθμων σε ένα δοσμένο πρόβλημα. Οι αλγόριθμοι του πρώτου τύπου που δίνουν ανακριβή αποτελέσματα είναι παραδείγματα ασταθών αλγορίθμων (unstable algorithms), ενώ οι αλγόριθμοι του δεύτερου τύπου που δίνουν ακριβή αποτελέσματα είναι οι ευσταθείς αλγόριθμοι (stable algorithms). Παράδειγμα 6.1 Ας θεωρήσουμε τη συνάρτηση f με για την οποία εύκολα βρίσκουμε ότι

και ας εκτελέσουμε το παρακάτω πρόγραμμα: >> for i=5:10; x=10^(-i); 1/(sqrt(x^2+1)+1) 4.999999999875000e-001 4.999999999998750e-001 4.999999999999988e-001 5.000000000000000e-001 5.000000000000000e-001 5.000000000000000e-001 Τώρα ας μετατρέψουμε σε ρητή παράσταση τον παρονομαστή ώστε να είναι και ας εκτελέσουμε το αντίστοιχο πρόγραμμα: >> for i=5:10; x=10^(-i); (sqrt(x^2+1)-1)/x^2 5.000000413701854e-001 5.000444502911705e-001 4.884981308350689e-001 0 0 0 Σύμφωνα με όσα έχουμε πει θα πρέπει να μπορούμε να εξηγήσουμε τη διαφορά.

Επίσης να πούμε ότι η πρώτη μέθοδος είναι ευσταθής ενώ η δεύτερη είναι ασταθής. Μια ασταθής μέθοδος μπορεί, όπως είδαμε και στο παραπάνω παράδειγμα, να οδηγήσει έναν υπολογισμό σε καταστροφική στρογγυλοποίηση. Η μελέτη της ευστάθειας, που είναι πολύ σημαντικό ζήτημα, γίνεται με τη λεγόμενη ανάλυση σφάλματος στρογγυλοποίησης (roundoff error analysis). Υπάρχουν δύο τύποι: προς τα μπρος ή ευθεία ανάλυση σφάλματος (forward error analysis) και προς τα πίσω ή αντίστροφη ανάλυση σφάλματος (backward error analysis). Στην ευθεία ανάλυση σφάλματος προσπαθούμε να δούμε σε τι βαθμό η λύση που πήραμε με τον αλγόριθμο διαφέρει από την ακριβή λύση που βασίζεται στα ίδια δεδομένα. Ένας αλγόριθμος θα λέμε ότι είναι προς τα μπρος ή ευθέως ευσταθής (forward stable) αν υπό κάποια έννοια, η υπολογισμένη λύση ˆx είναι κοντά στην ακριβή λύση x. Τα φράγματα για τα σφάλματα στρογγυλοποίησης που προέκυψαν για τις διάφορες αριθμητικές πράξεις είναι το αποτέλεσμα ευθέων αναλύσεων σφάλματος. Έτσι, από την Πρόταση 2.4.1 συμπεραίνουμε ότι οι αριθμητικές πράξεις κινητής υποδιαστολής (πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση) είναι ευθέως ευσταθείς. Από την άλλη μεριά, η αντίστροφη ανάλυση σφάλματος συσχετίζει το σφάλμα με τα δεδομένα του προβλήματος παρά με τη λύση του. Ένας αλγόριθμος θα λέμε ότι είναι προς τα πίσω ή αντιστρόφως ευσταθής (backward stable) αν παράγει μια ακριβή λύση σε ένα παραπλήσιο προς το δοσμένο πρόβλημα. Η αντίστροφη ανάλυση σφάλματος, θεμελιωμένη από τον J. H. Wilkinson (1919-1986), χρησιμοποιείται πλέον ευρέως στους υπολογισμούς με πίνακες και σε θέματα υπολογιστικής γραμμικής άλγεβρας με τον όρο «ευστάθεια» θα εννοούμε «αντίστροφη ευστάθεια», εκτός αν δηλώνεται διαφορετικά.

Ως ένα απλό παράδειγμα αντίστροφης ευστάθειας, ας θεωρήσουμε ξανά την περίπτωση του υπολογισμού του αθροίσματος δύο αριθμών κινητής υποδιαστολής x και y. Έχουμε δει προηγουμένως ότι fl(x + y) = (x + y)(1 + δ) = x(1 + δ) + y(1 + δ) = x + y Έτσι, το υπολογισμένο άθροισμα δύο αριθμών κινητής υποδιαστολής x και y είναι το ακριβές άθροισμα δύο άλλων αριθμών κινητής υποδιαστολής x και y. Επειδή δ ε, οι x και y είναι κοντά στους x και y αντίστοιχα. Έτσι καταλήγουμε στο συμπέρασμα ότι η πράξη της πρόσθεσης δύο αριθμών κινητής υποδιαστολής είναι αντιστρόφως ευσταθής και παρόμοιες προτάσεις ισχύουν για τις άλλες αριθμητικές πράξεις μεταξύ αριθμών κινητής υποδιαστολής. 7. Κατάσταση Προβλήματος Από όσα είπαμε μέχρι τώρα δεν πρέπει να σχηματίσουμε την εντύπωση ότι αν χρησιμοποιήσουμε έναν ευσταθή αλγόριθμο προκειμένου να λύσουμε ένα πρόβλημα, τότε η υπολογισμένη λύση θα είναι ακριβής. Υπάρχει μια ιδιότητα του προβλήματος, η καλούμενη κατάσταση (conditioning), η οποία αναφέρεται στην εξακρίβωση της ακρίβειας ή ανακρίβειας του υπολογισμένου αποτελέσματος και η οποία είναι ιδιότητα του ίδιου του προβλήματος και όχι της λύσης του. Έχει να κάνει με το πώς θα μεταβληθεί η λύση του προβλήματος αν τα δεδομένα εισόδου του προβλήματος διαταραχθούν κατά κάποιο τρόπο. Η θεωρητική μελέτη που γίνεται στην αριθμητική ανάλυση για να διερευνηθούν οι συνέπειες που έχουν οι διαταραχές στα δεδομένα και που είναι ανεξάρτητη από τον αλγόριθμο που χρησιμοποιήθηκε για την επίλυση του προβλήματος, λέγεται ανάλυση διαταραχών (perturbation analysis). Ορισμός 7.1 Ένα πρόβλημα (ως προς ένα δοσμένο σύνολο δεδομένων) λέγεται ότι είναι ένα πρόβλημα κακής κατάστασης αν ένα μικρό σχετικά σφάλμα στα δεδομένα προκαλεί ένα μεγάλο σχετικά σφάλμα στη λύση, ανεξάρτητα από τη μέθοδο της επίλυσης. Διαφορετικά, λέγεται ότι είναι ένα πρόβλημα καλής κατάστασης. Ο παραπάνω ορισμός της κατάστασης δεν είναι ανεξάρτητος από τα δεδομένα. Έτσι, ένα πρόβλημα το οποίο είναι κακής κατάστασης για ένα σύνολο δεδομένων μπορεί να είναι καλής κατάστασης για ένα άλλο σύνολο. Ας υποθέσουμε ότι ένα πρόβλημα Ρ είναι να λυθεί έχοντας ως ένα δεδομένο ω. Έστω ότι Ρ(ω) δηλώνει την τιμή του προβλήματος με δεδομένο ω και ότι δω δηλώνει τη διαταραχή στο ω.

Το Ρ λέγεται ότι είναι κακώς ορισμένο για το δεδομένο εισόδου ω αν το σχετικό σφάλμα στην απάντηση, είναι πολύ μεγαλύτερο από το σχετικό σφάλμα στα δεδομένα, Όπως προαναφέραμε, η κατάσταση ενός προβλήματος είναι μια ιδιότητα του ίδιου του προβλήματος και δεν έχει να κάνει με τον αλγόριθμο που χρησιμοποιήθηκε για τη λύση του προβλήματος. Ωστόσο, η ακρίβεια της υπολογισμένης λύσης με τη χρήση ενός αλγόριθμου συνδέεται άμεσα και με την ευστάθεια του αλγόριθμου και με την κατάσταση του προβλήματος. Αν το πρόβλημα είναι κακής κατάστασης, ανεξάρτητα από το πόσο ευσταθής είναι ο αλγόριθμος, δεν μπορούμε να εγγυηθούμε για την ακρίβεια της υπολογισμένης λύσης. Ο ορισμός της αντίστροφης ευστάθειας δεν αναφέρει ότι η υπολογισμένη, με τη χρήση ενός αντιστρόφως ευσταθούς αλγόριθμου, λύση ˆx θα είναι κοντά στην ακριβή λύση του δοσμένου προβλήματος. Ωστόσο, όταν ένας ευσταθής αλγόριθμος εφαρμόζεται σε πρόβλημα καλής κατάστασης, η υπολογισμένη λύση θα είναι κοντά στην ακριβή λύση επειδή, σ αυτή την περίπτωση, η ευστάθεια θα εγγυηθεί την ακριβή λύση ενός παραπλήσιου προβλήματος και η καλή κατάσταση θα εγγυηθεί ότι η λύση του δοσμένου προβλήματος και αυτή του παραπλήσιου προβλήματος είναι κοντά. Πριν ολοκληρώσουμε το κεφάλαιο ας δούμε δυο κλασσικά παραδείγματα προβλημάτων κακής κατάστασης. 1) Έστω η διαφορά d = a b: Με μια διαταραχή του a στην έκτη θέση: Δηλαδή, μια διαταραχή στο έκτο ψηφίο της εισαγόμενης τιμής προκάλεσε μια αλλαγή στο δεύτερο ψηφίο της απάντησης.

Το σχετικό σφάλμα στα δεδομένα είναι ενώ το σχετικό σφάλμα στο υπολογισμένο αποτέλεσμα είναι 2) Έστω το πολυώνυμο f(x) = x 2 2x + 1 με διπλή ρίζα x = 1. Διαταράσσουμε τον συντελεστή 2 του πολυωνύμου κατά 0.00001 και υπολογίζουμε τις ρίζες του διαταραγμένου πολυωνύμου f 1 (x) = x 2 2.00001x + 1. Η απάντηση είναι x 1 = 1.0032 και x 2 = 0.9968. Τα σχετικά σφάλματα στις x 1 και x 2 είναι 0.0032 ενώ το σχετικό σφάλμα στα δεδομένα είναι 5 10-6. Εργασία/Παρουσίαση Κακή κατάσταση ενός προβλήματος στην υπολογιστική Γραμμική Άλγεβρα (γραμμικά συστήματα εξισώσεων) αριθμός κατάστασης (condition number). Μερικές παρατηρήσεις: Η σύγκριση αριθμών κινητής υποδιαστολής πρέπει να αναφέρεται στο «αρκετά κοντά» και όχι στο «ακριβώς ίσοι». Τερματισμός των επαναλήψεων να γίνεται όταν διαδοχικές τιμές είναι «αρκετά κοντά». Μη ζητάς «είναι x ίσο y» if x == y // όχι αυτό Αντίθετα ζήτα «είναι x και y αρκετά κοντά» σε τιμές if abs(x-y) < tol % tol = tolerance (ανοχή) Εκφράζω το «κοντά» συναρτήσει της απόλυτης διαφοράς ή της σχετικής διαφοράς (βλ. παρακάτω).

Απόλυτο και σχετικό σφάλμα: Το «αρκετά κοντά μπορεί να μετρηθεί είτε με το απόλυτο είτε με το σχετικό σφάλμα: Έστω Τότε : α = μια ακριβής τιμή ή μια τιμή αναφοράς αˆ = μια υπολογισμένη τιμή απόλυτο σφάλμα Ε abs ( α )= α α σχετικό σφάλμα Ε rel ( α α α )= α ref συνήθως, α ref = α τιμή αναφοράς οπότε, Ε rel ( α α α )= α Παράδειγμα: Προσέγγιση του sinx για μικρό x (x<<1) 3 5 x x Επειδή, sin x = x +... 3! 5! x n μπορούμε για x << 1 sin(x) x ( 0 n!, για x <1) Άσκηση: Ε abs = ; E rel = ; και γραφική παράσταση του E abs, E rel για το sinx όταν κάνουμε την παραπάνω προσέγγιση. Λύση Είναι, σύμφωνα με τους παραπάνω τύπους, E abs = x sin x = 3 x 3! 5 x 5! + E rel = x sin x sin x = x sin x 1 και για τη γραφική τους παράσταση, εκτελώντας στο MATLAB τις σχετικές εντολές» x=linspace(-0.4,0.4);» Ea=x-sin(x);» Er=x./sin(x)-1;» plot(x,ea,x,er);

προκύπτει 0.03 0.025 0.02 0.015 0.01 0.005 0-0.005-0.01-0.015-0.4-0.3-0.2-0.1 0 0.1 0.2 0.3 0.4 Στην παραπάνω γραφική παράσταση παρατηρούμε ότι: Το απόλυτο σφάλμα είναι σχετικά επίπεδο (flat) γύρω από το 0. Το σχετικό σφάλμα αυξάνει πιο γρήγορα. Το σχετικό σφάλμα αντανακλά το γεγονός ότι το απόλυτο σφάλμα είναι μικρό κοντά στο x = 0. Σύγκλιση ακολουθίας επαναλήψεων Είπαμε σε προηγούμενο μάθημα ότι μια επαναληπτική διαδικασία δημιουργεί μια α- κολουθία αριθμητικών τιμών x κ, κ = 1, 2, 3, και ότι ακολουθία συγκλίνει σ ένα όριο ξ, αν m, κ > Ν, x m x κ < δ, όπου δ > 0 Στην πράξη, το τεστ (σύγκλισης) εφαρμόζεται ως: κ > Ν, x κ+1 x κ < δ Ο αριθμός των επαναλήψεων Ν, για να πετύχουμε σύγκλιση, εξαρτάται από την τιμή του δ. Γενικά όσο το δ μικραίνει, το Ν θα αυξάνει. Κριτήριο απόλυτης σύγκλισης : Με λόγια : Επανέλαβε μέχρι, x- x old < δ α Σε ψευδοκώδικα: x = // ανάθεση αρχικής τιμής

x old = while abs (x- x old ) > delta x old = x update x Κριτήριο σχετικής σύγκλισης : Με λόγια : Επανέλαβε μέχρι, (x x old )/ x old < δ r Σε ψευδοκώδικα: x = ; x old = ; while abs ((x x old )/xold) > delta x old = x update x Παράδειγμα : Λύση της εξίσωσης cos x = x με την επαναληπτική μέθοδο σταθερού σημείου (Fixed Point Iteration). Όπως θα δούμε παρακάτω (σε επόμενο μάθημα) η επαναληπτική μέθοδος σταθερού σημείου (FPI) συνίσταται στα εξής βήματα FPI : 1 o Εκτίμηση του x 0 2 o Θέσε x old = x 0 3 o Ανανέωσε εκτίμηση x new = cos ( x old ) 4 0 Αν x new x old STOP διαφορετικά θέσε x old = x new και επέστρεψε στο 3 0 Μια αρχική εκτίμηση της λύσης γίνεται γραφικά αφού αυτή θα βρίσκεται στην τομή των y = x και y = cosx: 2 1.5 1 0.5 0-0.5 0 0.5 1 1.5 2 0.6 < x 0 < 0.8

κακό τεστ #1 : while x new ~= x old Αυτό το τεστ θα είναι αληθές αν xnew και xold είναι ακριβώς ίσα, δηλ. όταν οι bit αναπαραστάσεις τους είναι ταυτόσημες. Αυτό καθιστά το τεστ κακό γιατί μπορεί να μην ικανοποιηθεί ποτέ κακό τεστ #2 : while ( x new x old ) > delta Θα αποτυγχάνει πάντα, αν x new < x old καλό τεστ #1: απόλυτη ανοχή while abs ( x new x old ) > delta // τι τιμή για το delta θα χρησιμοποιήσω ; καλό τεστ #2: σχετική ανοχή while abs ((x new x old )/x ref ) > delta Ο χρήστης εισάγει κατάλληλη τιμή για x ref. Για το παράδειγμά μας μπορούμε να χρησιμοποιήσουμε x ref = x old while abs ((x new x old )/x old ) > delta Υλοποίηση στο MATLAB: και function r=fixpocos(x0,delta,maxit) rold=x0; r=cos(rold); it=0; while abs(r-rold)>delta & (it<maxit) rold=r; r=cos(rold); it=it+1; function r=fixpocos1(x0,delta,maxit) rold=x0; r=cos(rold); it=0; while abs((r-rold)/rold)>delta & (it<maxit) rold=r;

r=cos(rold); it=it+1; Πειραματιστείτε με τις παραπάνω συναρτήσεις κάνοντας διάφορες επιλογές για τις μεταβλητές στην είσοδο Σφάλματα αποκοπής Αντίθετα από τα σφάλματα στρογγυλοποίησης, τα οποία ελέγχονται με το hardware και τη γλώσσα προγραμματισμού που χρησιμοποιείται, τα σφάλματα αποκοπής ελέγχονται από το χρήστη (αναλυτή προγραμματιστή). Παράδειγμα : e x = 1 + x + x k 2 x + + 2! k! + = x k k=0 k! ( Σειρά Taylor ) Για να αποφύγουμε υπερχείλιση (overflow) κατά τον υπολογισμό μεμονωμένων όρων (στον υπολογισμό σειρών), εφαρμόζουμε αναδρομή: Αν καλέσουμε r κ το λόγο των διαδοχικών όρων α κ-1 x κ-1 και α κ x κ, της σειράς, r k k 1 k ax k a = x k 1 a x = a τότε η ύψωση σε δύναμη μπορεί να παραληφθεί, υπολογίζοντας τον επόμενο όρο στη σειρά από τον τρέχοντα : a k (όρος) κ = x ( ) (όρος) κ-1 a k 1 Στο MATLAB: S = 0 ; // αρχικοποίηση term = α ο ; for k = 1 : n S = S + term ; term = r κ * term ; //r κ = λόγος διαδοχικών όρων k k 1 Στο παράδειγμά μας : r k x k k! x ( k 1)! 1 = = = x x x ( k 1)! k k ( k 1)! k k 1 k 1 ( r k 0 η σειρά συγκλίνει για όλα τα x)

Άσκηση: να γράψετε κώδικα για το παραπάνω παράδειγμα. Λύση function s=sersum(x,n) s=0; term=1; for k=1:n s=s+term; term=x*term/k; function s=sersum1(x,n) s=0; term=1; tol=e0; for k=1:n s=s+term; term=x*term/k; if abs(term)<tol break if k==n error ('divergent') function ssum = expseriesplot(x,tol,n) % expseriesplot Evaluate and plot series representation of exp(x) % % Synopsis: ssum = expseriesplot(x) % ssum = expseriesplot(x,tol) % ssum = expseriesplot(x,tol,n) % % Input: x = argument of the exp function, i.e., compute exp(x) % tol = (optional) tolerance on accumulated sum. Default: % tol = 5e-9 % Series is terminated when T_k/S_k < delta, where T_k is the % kth term and S_k is the sum after the kth term is added. % n = (optional) maximum number of terms. Default: n = 15 % % Output: ssum = value of series sum after n or tolerance is met if nargin < 2, tol = 5e-9;

if nargin < 3, n = 15; term = 1; ssum = term; Eabs(1) = abs(ssum-exp(x)); % Initialize fprintf('series approximation to exp(%f)\n\n',x); fprintf(' k term ssum Eabs\n'); fprintf('%3d %11.3e %11.3e %11.3e\n',1,x,ssum,Eabs(1)); for k=2:n term = term*x/(k-1); % Next term in the series ssum = ssum + term; Eabs(k) = abs(ssum-exp(x)); fprintf('%3d %11.3e %11.3e %11.3e\n',k,term,ssum,Eabs(k)); if abs(term/ssum)<tol, break; %True at convergence semilogy(1:k,eabs,'-'); xlabel('number of terms'); ylabel('absolute Error'); fprintf('\ntruncation error after %d terms is 11.3e\n\n',k,Eabs(k)); function ssum = expseriesplotst(x,tol,n) if nargin < 2, tol = 5e-9; if nargin < 3, n = 15; term = 1; ssum = term; Eabs(1) = abs(ssum-exp(x)); fprintf('series approximation to exp(%f)\n\n',x); fprintf(' k term ssum Eabs\n'); fprintf('%3d %11.3e %11.3e %11.3e\n',1,x,ssum,Eabs(1)); for k=2:n term = term*x/(k-1); ssum = ssum + term; Eabs(k) = abs(ssum-exp(x)); fprintf('%3d %11.3e %11.3e 11.3e\n',k,term,ssum,Eabs(k)); if abs(term)<tol, break; % διαφορά με expseriesplot semilogy(1:k,eabs,'-'); xlabel('number of terms'); ylabel('absolute Error'); fprintf('\ntruncation error after %d terms is 11.3e\n\n',k,Eabs(k));

Παρατηρήσεις: Η expseriesplotst υπολογίζει και κάνει τη γραφική παράσταση του E abs, n ως συνάρτηση του n. Είναι T k k x =, k! S n = 1+ E abs, n = S n e x n k= 1 Αν εκτελέσουμε την παραπάνω συνάρτηση στο MATLAB έχουμε,» expseriesplotst(10, 5e-12, 60) Series approximation to exp(10.000000) k term ssum Eabs 1 1.000e+001 1.000e+000 2.203e+004 2 1.000e+001 1.100e+001 2.202e+004 3 5.000e+001 6.100e+001 2.197e+004 4 1.667e+002 2.277e+002 2.180e+004 5 4.167e+002 6.443e+002 2.138e+004 6 8.333e+002 1.478e+003 2.055e+004 7 1.389e+003 2.867e+003 1.916e+004 8 1.984e+003 4.851e+003 1.718e+004 9 2.480e+003 7.331e+003 1.470e+004 10 2.756e+003 1.009e+004 1.194e+004 11 2.756e+003 1.284e+004 9.184e+003 12 2.505e+003 1.535e+004 6.679e+003 13 2.088e+003 1.744e+004 4.591e+003 14 1.606e+003 1.904e+004 2.985e+003 15 1.147e+003 2.019e+004 1.838e+003 16 7.647e+002 2.095e+004 1.074e+003 17 4.779e+002 2.143e+004 5.956e+002 18 2.811e+002 2.171e+004 3.145e+002 19 1.562e+002 2.187e+004 1.583e+002 20 8.221e+001 2.195e+004 7.609e+001 21 4.110e+001 2.199e+004 3.498e+001 22 1.957e+001 2.201e+004 1.541e+001 23 8.897e+000 2.202e+004 6.514e+000 24 3.868e+000 2.202e+004 2.646e+000 25 1.612e+000 2.203e+004 1.034e+000 26 6.447e-001 2.203e+004 3.894e-001 27 2.480e-001 2.203e+004 1.415e-001 28 9.184e-002 2.203e+004 4.964e-002 29 3.280e-002 2.203e+004 1.684e-002 30 1.131e-002 2.203e+004 5.529e-003 31 3.770e-003 2.203e+004 1.759e-003 32 1.216e-003 2.203e+004 5.424e-004 33 3.800e-004 2.203e+004 1.624e-004 34 1.152e-004 2.203e+004 4.722e-005 35 3.387e-005 2.203e+004 1.335e-005 36 9.678e-006 2.203e+004 3.671e-006 37 2.688e-006 2.203e+004 9.829e-007 T k

38 7.265e-007 2.203e+004 2.564e-007 39 1.912e-007 2.203e+004 6.520e-008 40 4.902e-008 2.203e+004 1.617e-008 41 1.226e-008 2.203e+004 3.918e-009 42 2.989e-009 2.203e+004 9.277e-010 43 7.117e-010 2.203e+004 2.146e-010 44 1.655e-010 2.203e+004 5.093e-011 45 3.762e-011 2.203e+004 1.455e-011 46 8.360e-012 2.203e+004 7.276e-012 47 1.817e-012 2.203e+004 7.276e-012 Truncation error after 47 terms is 7.276e-012 2.202646579480671e+004 10 5 10 0 Absolute Error 10-5 10-10 10-15 0 10 20 30 40 50 Number of terms Με x >> 1 το απόλυτο σφάλμα αρχικά αυξάνει επειδή οι αριθμητές αυξάνουν πιο γρήγορα απ ότι τα παραγοντικά στους παρονομαστές. Για x = -10 το παραγοντικό αρχίζει να αντισταθμίζει το μέγεθος των όρων για k > 10. Καθώς το n αυξάνει ακόμα, το E abs, n ελαττώνεται εξαιτίας της ελάττωσης του σφάλματος αποκοπής.