1 ΕΙΣΑΓΩΓΗ 11 Τι είναι η αριθµητική ανάλυση Στα µαθητικά και φοιτητικά µας χρόνια, έχουµε γνωριστεί µε µία ποικιλία από µαθηµατικά προβλήµατα των οποίων µαθαίνουµε σταδιακά τις λύσεις Παραδείγµατος χάριν, οι δευτεροβάθµιες εξισώσεις της µορφής ax 2 + bx + c = (11) επιλύονται στοιχειωδώς µε τη µέθοδο της διακρίνουσας Είναι γνωστό ότι υπάρχουν γενικοί τύποι που επιτρέπουν να λύσουµε µε αλγεβρικές µεθόδους πολυωνυµικές εξισώσεις µέχρι και τέταρτου βαθµού Σε ορισµένες περιπτώσεις χρησιµοποιούµε ειδικές τεχνικές, όπως τη µέθοδο της παραγοντοποίησης του πολυωνύµου (πχ µε το σχήµα Horner) Στο παράδειγµα της εξίσωσης 3 2 P( = x 6x + 11x 6 = (12) το πολυώνυµο P( παραγοντοποιείται στη µορφή 2 P( = ( x 3)( x 3x + 2) (13) µε προφανείς ρίζες τις =, x = 1, x 2 x 1 3 2 3 = Από την εµπειρία µας αυτή είναι δυνατό να δηµιουργηθεί η εντύπωση ότι για όλες τις πολυωνυµικές εξισώσεις θα υπάρχει κάποια "µέθοδος" η οποία να επιτρέπει να βρεθούν οι ρίζες, έστω και αν η µέθοδος αυτή αναµένεται γενικά να αυξάνει σε δυσκολία καθώς αυξάνει ο βαθµός του πολυωνύµου Εντούτοις, ηεντύπωσηαυτήδενανταποκρίνεταιπροςτηνπραγµατικότητα Αντίθετα, είναι γνωστό ότι για πολυώνυµαβαθµού µεγαλύτερου του 4, δεν υπάρχει γενικός τύπος που να παρέχει τις ρίζες της αντίστοιχης πολυωνυµικής εξίσωσης, εκτός από πολυώνυµα ειδικής µορφής Παρ' όλα αυτά, το γεγονός ότι δεν διαθέτουµε κανόνα για τον αναλυτικό υπολογισµό των ριζών δεν σηµαίνει φυσικά ότι δεν υπάρχουν ρίζες Αντίθετα, σε πολλές περιπτώσεις µπορούµε να αποδείξουµε αυστηρά την ύπαρξη µίας ή περισσότερων ριζών Παραδείγµατος χάριν, µπορεί να αποδειχθεί εύκολα ότι η εξίσωση 5 P( = x + x + 1 = (14) έχει τουλάχιστον µία πραγµατική ρίζα Πράγµατι, λαµβάνοντας υπόψη ότι P( 1) = 1 < ενώ P ( 1) = 3 > µπορούµε ναεφαρµόσουµε τοθεώρηµα Bolzano για
1 ΕΙΣΑΓΩΓΗ 2 τη συνεχή συνάρτηση P( στο κλειστό διάστηµα [ 1,1 ] τουλάχιστον µία πραγµατική ρίζα του πολυωνύµου στο ανοικτό διάστηµα ( 1,1 ) συµπεραίνοντας ότι υπάρχει Βρισκόµαστε εδώ στην παράδοξη κατάσταση αφενός µεν να γνωρίζουµε τηνύπαρξη µιας ρίζας, και µάλιστα ενός διαστήµατος τιµών στο οποίο ανήκει η ρίζα Εντούτοις, δεν διαθέτουµε µία γενική αναλυτική µέθοδο που θα µας επιτρέψει να προσδιορίσουµε ποιά είναι η ρίζα αυτή! Στο σηµείο αυτό επεµβαίνει η αριθµητική ανάλυση Σκοπός της, στο προηγούµενο παράδειγµα, είναι να µας δώσει µία ή περισσότερες αριθµητικές µεθόδους, οι οποίες ανάγονται συστηµατικά σε αντίστοιχους υπολογιστικούς αλγόριθµους που θα µας επιτρέψουν να προσδιορίσουµε προσεγγιστικά την αριθµητική τιµήτηςζητούµενης ρίζας, έστω και αν είναι αδύνατη η διατύπωση ενός γενικού αναλυτικού τύπου για τη ρίζα Θα πρέπει να τονισθεί ότι η λύση που δίνεται εδώ στο πρόβληµα δεν είναι αλγεβρική, αλλά καθαρά αριθµητική Ενας συνδυασµός πράξεων, σε µορφή αλγόριθµου, µας δίνει µία αριθµητικήλύσηηοποίασυγκλίνειπροςτηνπραγµατική λύση του προβλήµατος µέσα σε ορισµέναόριαεπιθυµητής ακρίβειας Ηεύρεση των προσεγγιστικών µεθόδων αριθµητικής επίλυσης ενός προβλήµατος και η µελέτη των ιδιοτήτων σύγκλισής τους αποτελούν το αντικείµενο της αριθµητικής ανάλυσης Ακριβώς επειδή οι αριθµητικές µέθοδοι είναι αλγοριθµικές και βασίζονται τελικά στην εκτέλεση απλών αριθµητικών πράξεων, η υλοποίησή τους υπολογιστικά αρµόζει να γίνεται µε τη βοήθεια του ηλεκτρονικού υπολογιστή Στις σηµειώσεις που ακολουθούν γίνεται εισαγωγή στις αριθµητικές µεθόδους τόσο από τη σκοπιά της θεωρίας της αριθµητικής ανάλυσης όσο και από τη σκοπιά της υλοποίησης των αλγόριθµων σε προγραµµατιστικό περιβάλλον 12 Παραδείγµατα χρήσης αριθµητικών µεθόδων Ας δώσουµε ορισµένα ακόµη παραδείγµατα µαθηµατικών προβληµάτωντωνοποίωνη λύση µπορεί να βρεθεί µε τηβοήθειατωναριθµητικών µεθόδων 12α) Επίλυση γραµµικών συστηµάτων µε σταθερούς συντελεστές Ως γνωστό, ένα γραµµικό σύστηµα Ν x Ν, δηλαδή Ν εξισώσεων µε Ναγνώστουςτης µορφής a 11 x 1 + a 12 x 2 + + a 1N x N = b 1 a 21 x 1 + a 22 x 2 + + a 2N x N = b 2 a N1 x 1 + a N2 x 2 + + a N x NN = b Ν
1 ΕΙΣΑΓΩΓΗ 3 µπορεί να παρασταθεί από τον επαυξηµένο πίνακα των συντελεστών και των σταθερών όρων a 11 a 12 a 1N b 1 a 21 a 22 a 2N b 2 a N1 a N2 a NN b Ν Για το σύστηµα αυτό υπάρχουν, ως γνωστό, γενικές µέθοδοι λύσης οι οποίες βασίζονται είτε στη χρήση των οριζουσών, είτε στη διαγωνιοποίηση του πίνακα των συντελεστών µε τη µέθοδο της απαλοιφής του Gauss Οι πράξεις είναι δυνατόν να γίνουν "µε το χέρι" όταν το πλήθος Ν αγνώστων και εξισώσεων είναι µικρό Σε πολλές, ωστόσο, εφαρµογές χρειάζεται να επιλυθούν συστήµατα µε µεγάλο Ν, πχ Ν=1 ήν=1 Στην περίπτωση αυτή χρειαζόµαστε ένα πρόγραµµα σεη/υ που να υλοποιεί τους υπολογιστικούς αλγόριθµους που απαιτούν ένα τεράστιο πλήθος πράξεων 12β) Υπολογισµός της τιµής ορισµένων ολοκληρωµάτων Ως γνωστό, το ολοκλήρωµα π sin xdx υπολογίζεται αναλυτικά αµέσως και δίνει π π [ cos x] = 2 sin xdx = (15) Εντούτοις, για το φαινοµενικάελάχισταδιαφορετικόολοκλήρωµα π sin( x 2 ) dx δεν φαίνεται να υπάρχει κάποιος απλός τρόπος αναλυτικού υπολογισµού µε συνδυασµό των γνωστών µεθόδων, πχ αλλαγή µεταβλητής, ολοκλήρωση κατά παράγοντες κλπ (στην πραγµατικότητα το εν λόγω ολοκλήρωµα εκφράζεται µε τη βοήθεια της ειδικής συνάρτησης FresnelS, που εµφανίζεται συχνά στη µαθηµατική φυσική Αριθµητικές τιµές της συνάρτησης FresnelS δίνονται σε ειδικούς πίνακες τιµών)
1 ΕΙΣΑΓΩΓΗ 4 Με τη χρήση αριθµητικών µεθόδων είναι δυνατό να υπολογιστεί µε πολύ µεγάλη ακρίβεια η αριθµητική τιµή του ολοκληρώµατος, έστω και αν δεν είναι δυνατή η εύρεση µε αναλυτικές µεθόδους µιας παράγουσας της υπό ολοκλήρωση συνάρτησης 12γ) Λύση διαφορικών εξισώσεων Η συνήθης διαφορική εξίσωση y' '( + y( = (16) έχει τη γνωστή γενική λύση y = y sin( x ) x (17) όπου οι σταθερές y και Ωστόσο, η λίγο πιο σύνθετη εξίσωση x προσδιορίζονται από τις αρχικές συνθήκες y' ' + sin y = (18) είναι πολύ δυσκολότερο να λυθεί Η γενική λύση της εκφράζεται και πάλι µε τη βοήθεια ειδικών συναρτήσεων που είναι γνωστές ως ελλειπτικές συναρτήσεις, και των οποίων οι τιµές διατίθενται σε πίνακες Η αριθµητική ανάλυση µας παρέχει µεθόδους για την αριθµητική επίλυση µιας διαφορικής εξίσωσης η οποία είτε είναι δύσκολο να επιλυθεί αναλυτικά, είτε δεν έχει γνωστές µεθόδους αναλυτικής επίλυσης Βεβαίως, υπάρχει εδώ µία σηµαντική διαφορά ανάµεσα στην αναλυτική και την αριθµητική επίλυση: ηαναλυτικήεπίλυση µαςδίνειτηλύσηστηµορφή µιας νέας συνάρτησης µε γνωστότύπο Αντίθετα, η αριθµητική επίλυση δεν µπορεί να µας δώσει τον τύπο καµµίας συνάρτησης Αντιθέτως, µας δίνει ένα προσεγγιστικό υπολογισµόενός µεγάλου πλήθους ζευγών τιµών ( x, y) της άγνωστης συνάρτησης y ( Εχοντας ένα µεγάλο πλήθος σηµείων τηςγραφικήςπαράστασηςτης y ( µπορούµε να εξαγάγουµε τησυµπεριφορά της συνάρτησης (µονοτονία, ακρότατα, σηµεία καµπής, κυρτότητα, ασυµπτωτική εξέλιξη) µε πολύ ικανοποιητική ακρίβεια, έστω και αν δεν γνωρίζουµε έναν αναλυτικό τύπο για την y ( 12δ) Υπολογισµός τιµών ειδικών συναρτήσεων Ενα πολύ απλό παράδειγµα που µπορεί να δοθεί εδώ είναι ο υπολογισµός των τριγωνοµετρικών συναρτήσεων sin x,cos x, tan x για διάφορες τιµές του τόξου x εκφρασµένου σε ακτίνια Είναι γνωστοί σε όλους οι τριγωνοµετρικοί αριθµοί ορισµένων βασικών γωνιών, όπως πχ π 1 sin = 6 2
1 ΕΙΣΑΓΩΓΗ 5 που προκύπτουν εύκολα από θεωρήµατα της Ευκλείδιας γεωµετρίας Το τόξο π/6 αντιστοιχεί σε επίκεντρη γωνία 3 Εποµένως γνωρίζουµε µε απλέςµεθόδους το ηµίτονο των 3 Εντούτοις, στο ερώτηµα, πόσο είναι το ηµίτονο των 27, ηαπάντηση δεν είναι και τόσο απλή! Πράγµατι, το ηµίτονο των 27 υπολογίζεται χρησιµοποιώντας αναπτύγµατα, πχ σε σειρά Taylor, γύρωαπότοτόξοµιαςάλληςγωνίαςµε γνωστούς τριγωνοµετρικούς αριθµούς Ο ρόλος των αναπτυγµάτων στην αριθµητική ανάλυση είναι πολύ σηµαντικός Χρησιµοποιούµε τααναπτύγµατα α) γιανακατασκευάσουµε αριθµητικές µεθόδους κατάλληλες στην προσέγγιση ενός προβλήµατος και β) για να ελέγξουµε τις ιδιότητες σύγκλισης των αριθµητικών µεθόδων 13 Αλγόριθµοι και τυπική αλγοριθµική γλώσσα Οπως είπαµε ήδη, ένα σηµαντικό στοιχείο κάθε αριθµητικής µεθόδου είναι το γεγονός ότι µια τέτοια µέθοδος δοµείται "αλγοριθµικά" Πριν παρουσιάσουµε εποµένως τις αριθµητικές µεθόδους, πρέπειι να κάνουµε µία σύντοµη αναφορά στην έννοια του αλγόριθµου που συνδέεται αναπόφευκτα µε κάθεαριθµητική εφαρµογή Μπορούµε ναορίσουµε τοναλγόριθµο ωςµία διαδικασία που απαρτίζεται από ένα καλά καθορισµένο, πεπερασµένο πλήθος βηµάτων, που οδηγούν µονοσήµαντα από την είσοδο ορισµένων δεδοµένων στην εξαγωγή ορισµένων αποτελεσµάτων Για να δώσουµε ένα απλό παράδειγµα, ας αναλογιστούµε πώς διαιρούµε ένα 3 2 πολυώνυµο, πχ, P ( = x 6x + 11x 6 µε τοδιώνυµο x 3 χρησιµοποιώντας το σχήµα Horner: 1-6 11-6 3 3-9 6 1-3 2 Αν ονοµάσουµε a3, a2, a1, a τους συντελεστές του πολυωνύµου ως προς τις αντίστοιχες δυνάµεις του x στην πρώτη σειρά, και b3, b2, b1, b τους αντίστοιχους συντελεστές στην τρίτη σειρά, τότε έχουµε διαδοχικά τις σχέσεις: b 3 = a 3 b 2 = b3 3 + a b 1 = b2 3 + a b = b1 3 + a 2 1 (11) όπου τα τρία τελευταία βήµατα αποτελούν, ουσιαστικά, ένα µόνο βήµα που δίνεται απότηγενικήαναδροµική σχέση b µε i = 3,, 1 µε βήµα -1 (111) i 1 = bi 3 + ai 1
1 ΕΙΣΑΓΩΓΗ 6 Το σχήµα Horner αποτελεί µία τυπική περίπτωση αλγόριθµου Η διαδικασία τερµατίζεται µετά από µία συγκεκριµένη σειράπεπερασµένων σε πλήθος βηµάτων που οδηγούν σε ορισµένο αποτέλεσµα Ο αλγόριθµος δέχεται ως είσοδο τις τιµές των συντελεστών του αρχικού πολυωνύµου και την τιµή ρ του µονωνύµου (x-ρ), και επιστρέφει ως αποτέλεσµα τις τιµές των συντελεστών του νέου πολυωνύµου και του υπολοίπου που προκύπτει από τη διαίρεση των δύο πολυωνύµων Ενα βασικό πρόβληµα που τίθεται στους αλγόριθµους είναι ο τρόπος περιγραφής ενός συγκεκριµένου αλγόριθµου Πχ για να εξηγήσουµε παραπάνω τον αλγόριθµο του σχήµατος Horner χρησιµοποιήσαµε ορισµένες µαθηµατικές σχέσεις καθώς και µία "περιγραφή" του αλγόριθµου σε ελληνική γλώσσα Είναι φανερό ότι αυτού του είδους η περιγραφή δεν είναι πάντα ακριβής και µπορεί να προκαλέσει παρεξηγήσεις Αναζητούµε ένα πιο σύντοµο, τυποποιηµένο τρόπο γραφής των αλγόριθµων, που να καθιστά κρυστάλλινη τη δοµή και αλληλουχία των βηµάτων του αλγόριθµου, ώστε να µη αφήνει περιθώρια για ενναλακτική ερµηνεία του τί ακριβώς υλοποιείται σε κάθε βήµα τουαλγόριθµου Ενας τυποποιηµένος τρόπος γραφής αλγορίθµων είναι η τυπική αλγοριθµική γλώσσα και βασίζεται στην ύπαρξη ορισµένων δοµών που αναλύονται παρακάτω Τις ίδιες αυτές δοµές, µε διαφορετικές µεταξύ τους συντακτικές παραλλαγές, συναντούµε στις περισσότερες σύγχρονες γλώσσες προγραµµατισµού Αν και κάθε γλώσσα περιέχει και πολλά επιπλέον στοιχεία, ο "πυρήνας" κάθε γλώσσας προγραµµατισµού υψηλού επιπέδου προκύπτει από την ενσωµάτωση σ'αυτήν των θεµελιωδών αλγοριθµικών δοµών Αυτές είναι: 13α) Ακολουθιακές εντολές Εντολή εκχώρησης a 5 Η εντολή εκχώρησης a 5 (το σύµβολο του αριστερού βέλους σηµαίνει εκχώρηση τιµής) σηµαίνει να αποδοθεί, ως τρέχουσα τιµή τηςµεταβλητής a ητιµή 5 Θα πρέπει να τονισθεί ότι η εντολή εκχώρησης ενεργεί "στιγµιαία" και δεν δηµιουργεί οποιαδήποτε συναρτησιακή σχέση ανάµεσα σε µεταβλητές που εµφανίζονται πιθανώς στο δεξιό µέλος µιας εντολής εκχώρησης, και στη µοναδική µεταβλητή που εµφανίζεται στο δεξιό µέλος Παραδείγµατος χάριν, ηεντολήεκχώρησης y 2*x δεν δηµιουργεί συναρτησιακή σχέση ανάµεσα στο x και στο y, δηλαδή δεν διαβάζεται "έστω y=2x", οπότε το y εφεξής θα έπρεπε να προσαρµόζεται αυτόµατα σε κάθε αλλαγή της τιµής του x Αντίθετα, η εντολή εκχώρησης διαβάζεται "στη µεταβλητή y να εκχωρηθεί τιµήίσηµε την τρέχουσα τιµήτηςµεταβλητής x πολλαπλασιασµένης επί δύο" Ηεντολήαυτήσυνδέειστιγµιαία τις y και x Μετά από την εκτέλεσή της παύει
1 ΕΙΣΑΓΩΓΗ 7 οποιαδήποτε σχέση ανάµεσα στις y και x, και είναι δυνατόν σε κάθε µία από τις δύο µεταβλητές να εκχωρείται οποιαδήποτε νέα τιµή, η οποία δεν επιδρά στην τιµή της άλλης µεταβλητής Εντολές Εισόδου - Εξόδου Read a,b Print a,b Οι εντολές εισόδου - εξόδου είναι ο τρόπος να διαχωριστεί η διαδικασία εισαγωγής των δεδοµένων του αλγόριθµου από τη διαδικασία επιστροφής των ζητούµενων του αλγόριθµου Με τις εντολές εισόδου (Read) εισάγουµε τιςτιµές των µεταβλητών που αποτελούν δεδοµένα του αλγόριθµου, ενώ µε τις εντολές εξόδου(print) ζητούµε την εµφάνιση των τιµών των µεταβλητών που αποτελούν εξαγόµενα αποτελέσµατα του αλγόριθµου 13 β οµή επανάληψης for i=1 to 17 step 2 εντολές 1 for j=25 to 2 step -2 εντολές 2 endfor endfor Ηδοµή επανάληψης for i=1 to 17 step 2 εντολές στο εσωτερικό βρόγχου endfor σηµαίνει επανάληψη µε τηνµεταβλητή i να παίρνει διαδοχικά την τιµη από1 ως 17 αυξανόµενη σε κάθε επανάληψη κατά δύο Η αρχή του επαναληπτικού βρόγχου οριοθετείται µε την εντολή for, ενώ το τέλος του βρόγχου οριοθετείται µε την εντολή endfor Είναι δυνατόν µέσα σε ένα βρόγχο for να υπάρχει και δεύτερος εµφωλευµένος βρόγχος for, του οποίου το τέλος endfor δεν διασταυρώνεται µε το αντίστοιχο endfor του εξωτερικού βρόγχου Στην περίπτωση αυτή, για κάθε βήµα που εκτελείται στον εξωτερικό βρόγχο, εκτελείται µία πλήρης επανάληψη όλων των βηµάτων του εσωτερικού βρόγχου
1 ΕΙΣΑΓΩΓΗ 8 13γ) οµή ελέγχου if( a 4 and b 3) then εντολές 1 else if(συνθήκη) then εντολές 2 else εντολές 3 endif Η εντολή ελέγχου if έχει ως αποτέλεσµα να εκτελεσθεί τοτµήµα του αλγόριθµου στο εσωτερικό που οριοθετείται από την if µόνο εφόσον η συνθήκη εντός της παρένθεσης της if είναι αληθής Αν η εντολή είναι ψευδής, τότε, εφόσον υπάρχει else, εκτελείται το τµήµα του αλγόριθµου κάτω από την else Αλλιώς, η ροή του αλγόριθµου µεταβαίνει απευθείας κάτω από την εντολή endif, η οποία οριοθετεί το τέλος της if Οι πιο συνηθισµένες συνθήκες που ελέγχονται στο εσωτερικό της παρένθεσης της if αντιστοιχούν σε λογικές προτάσεις που συντάσσονται µε τηβοήθειατωνακόλουθων λογικών συµβόλων και τελεστών: Λογικός Τελεστής Σύµβολο Τελεστή Λογικό ΟΧΙ ΝΟΤ Λογικό ΚΑΙ AND Λογικό 'Η OR Ισότητα = Ανισότητα Μικρότερο < Μεγαλύτερο > Μικρότερο ή ίσο <= Μεγαλύτερο ή ίσο >= 13δ) οµή επανάληψηςµε έλεγχο while( 4 εντολές enddo a and b 3 ) do Η εντολή whiledo συνδυάζει την επανάληψη µε τον έλεγχο της ισχύος ορισµένης συνθήκης Ο βρόγχος που οριοθετείται από τις whiledo και enddo εκτελείται την πρώτη φορά µόνο αν η συνθήκη στο εσωτερικό της while είναι
1 ΕΙΣΑΓΩΓΗ 9 αληθής Μετά το τέλος της πρώτης εκτέλεσης, ελέγχεται ξανά κατά πόσο η συνθήκη στο εσωτερικό της while παραµένει αληθής Αν αυτό εξακολουθεί και ισχύει, εκτελείται ο εσωτερικός βρόγχος µία δεύτερη φορά Στη συνέχεια ελέγχεται ξανά κατά πόσο η συνθήκη στο εσωτερικό της while παραµένει αληθής, αν ισχύει εκτελείται ο βρόγχος τρίτη φορά και ούτω καθεξής