ΠΠΜ 500: Εφαρμογές Μηχανικής με Ανάπτυξη Λογισμικού 17. Εισαγωγή σε αριθμητικές μεθόδους για μηχανικούς και αλγορίθμους Εαρινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1
Θέματα Εισαγωγή Αριθμητικές μέθοδοι Επίλυσης μη γραμμικών εξισώσεων μέθοδος διχοτόμησης μέθοδος Requla-Falsi Αριθμητικής ολοκλήρωσης κανόνας του τραπεζίου κανόνας του Simpson Αλγόριθμοι Ταξινόμηση στοιχείων (ταξινόμηση με εισαγωγή) Αναζήτηση στοιχείων (δυαδική αναζήτηση) 2
Αριθμητικές μέθοδοι Επίλυση προβλημάτων των οποίων δεν υπάρχουν ή δεν έχουν βρεθεί ακόμη αναλυτικές λύσεις. Σειρά συγκεκριμένων βημάτων υπολογισμών με στόχο την εύρεση μιας έστω προσεγγιστικής λύσης με ικανοποιητική ακρίβεια. Χαρακτηριστικά μιας καλής αριθμητικής μεθόδου: Ακρίβεια λύσης (μικρή διαφορά από πραγματική λύση) Κόστος λύσης (απαιτούμενος χρόνος επίλυσης) Σύγκλιση και ευστάθεια μεθόδου Σφάλματα: απόλυτο σφάλμα (π.x. Υ προσεγ. - Υ ακριβές ) σχετικό σφάλμα (π.χ. Υ προσεγ. - Υ ακριβές / Υ ακριβές ) 3
Αριθμητική επίλυση μη-γραμμικών εξισώσεων Έχοντας μια συνάρτηση να βρεθεί (ή να βρεθούν) η ρίζα (ρίζες) για τις οποίες η συνάρτηση ισούται με μηδέν: y = f(x) = 0.0 Δηλαδή τα σημεία όπου τέμνεται ο άξονας των Χ 4
Μέθοδος διχοτόμησης 1. Εντοπίστε ένα διάστημα που συμπεριλαμβάνει την αναζητούμενη ρίζα 2. Μοιράστε το διάστημα αυτό στο μισό και κρατήστε το μισό που συμπεριλαμβάνει την ρίζα 3. Επαναλάβετε το βήμα 2 μέχρι να προσεγγιστεί ικανοποιητικά η αναζητούμενη ρίζα (δηλαδή να επιτευχθεί ικανοποιητική σύγκλιση) 5
Μέθοδος Requla-Falsi 1. Εντοπίστε ένα διάστημα που συμπεριλαμβάνει την αναζητούμενη ρίζα 2. Μοιράστε το διάστημα στο σημείο όπου η ευθεία από τα δύο άκρα του τέμνει τον οριζόντιο άξονα και κρατήστε το υποδιάστημα που συμπεριλαμβάνει την ρίζα 3. Επαναλάβετε το βήμα 2 μέχρι να προσεγγιστεί ικανοποιητικά η αναζητούμενη ρίζα (δηλαδή να επιτευχθεί ικανοποιητική σύγκλιση) 6
Εφαρμογή Γράψτε μία συνάρτηση που να υλοποιεί τη μέθοδο Requla-Falsi για λύση μη γραμμικών εξισώσεων και χρησιμοποιείστε την στη συνέχεια για υπολογίστε την πρώτη θετική ρίζα της πιο κάτω εξίσωσης με σχετικό σφάλμα μικρότερο από 1Ε-6 7
Αριθμητική ολοκλήρωση Έχοντας μια συνάρτηση Y=f(X) να υπολογιστεί το ολοκλήρωμα της συνάρτησης από κάποια τεταγμένη x 1 ως κάποια άλλη τεταγμένη x 2. Δηλαδή το εμβαδό μεταξύ της καμπύλης και του άξονα των x από x1 ως x2: x 1 x 2 8
Oλοκλήρωση με τη μέθοδο του τραπεζίου Προσέγγιση εμβαδού με το άθροισμα αριθμού τραπεζίων Εμβαδό λωρίδας πλάτους ΔΧ βάσει τύπου τραπεζίου f(x α ) f(x β ) x α x β x 1 x 2 9
Oλοκλήρωση με τον κανόνα του Simpson Προσέγγιση εμβαδού της κάθε λωρίδας χρησιμοποιώντας 3 σημεία, ώστε να προσεγγιστεί η συνάρτηση από 2 ου βαθμού πολυώνυμο Εμβαδό λωρίδας πλάτους ΔΧ βάσει του κανόνα: A i = {f(x a )+4f(x a +Δx)+f(x b )}*Δx/6 f(x α ) f(x β ) x α x β x 1 x 2 10
Εφαρμογή Ζητείται όπως γράψετε δύο συναρτήσεις που να υλοποιούν τον κανόνα του τραπεζίου και τον κανόνα του Simpson, αντίστοιχα, για σκοπούς αριθμητικού υπολογισμού ορισμένου ολοκληρώματος μιας συνάρτησης. Ορίστε τις δύο προαναφερθείσες αριθμητικές μεθόδους σαν στατικές μεθόδους, με τα ονόματα integratetrapezoid και integratesimpson, αντίστοιχα, στην τάξη: MyNumericalMethods Οι δύο μέθοδοι (integratetrapezoid και integratesimpson) θα πρέπει να λαμβάνουν ως παραμέτρους τα όρια ολοκλήρωσης (xmin και xmax) και τον αριθμό των επιμέρους τμημάτων που θα πρέπει να χρησιμοποιηθούν για την αριθμητική ολοκλήρωση. Θεωρείστε ότι η συνάρτηση της οποίας θα γίνει η ολοκλήρωση δίνεται από την επίσης στατική μέθοδο MyFun της τάξης MyNumericalMethods, η οποία παίρνει μια παράμετρο (την τιμή του x). Συγκρίνετε την ακρίβεια μεταξύ των δύο μεθόδων σε σχέση και με τον αριθμό των τμημάτων διαχωρισμού μεταξύ των ορίων. 11
Αλγόριθμοι Ορισμός και πλήρης κατανόηση του προβλήματος προς επίλυση Καθορισμός ενός αλγόριθμου, δηλαδή μιας συγκεκριμένης διαδικασίας βημάτων τα οποία οδηγούν σε συγκεκριμένα αποτελέσματα με ικανοποιητικά ελάχιστο δυνατό κόστος (μνήμης και χρόνου) Υλοποίηση του αλγορίθμου σε υπορουτίνα/προγράμμα με χρήση κάποιας κατάλληλης γλώσσας προγραμματισμού Έλεγχος της υπορουτίνας/προγράμματος για διάφορες περιπτώσεις δεδομένων, ειδικά όλων των ακραίων περιπτώσεων. Χρήση υπορουτίνας/προγράμματος για επίλυση σχετικών προβλημάτων. 12
Aλγόριθμοι ταξινόμησης (Sorting methods) Η ταξινόμηση είναι χρήσιμη σε πολλά προβλήματα, π.χ. για την διευκόλυνση της αναζήτησης ενός στοιχείου από πλήθος στοιχείων 5-2 6 4 23 7 45 3 9 0-3 4 7-3 5 6-4 11-4 -3-3 -2 0 3 4 4 5 5 6 6 7 7 9 11 23 45 Μεθόδοι ταξινόμησης (Ν) στοιχείων: απλές μέθοδοι: συνήθως απαιτούν βήματα τάξης Ο(Ν^2)) μέθοδος ταξινόμησης με εισαγωγή (insertion sort) μέθοδος ταξινόμησης με επιλογή (selection sort) μέθοδος ταξινόμησης τύπου κελύφους (shellsort), κλπ. προχωρημένες μέθοδοι: συνήθως απαιτούν βήματα τάξης Ο(Ν.logN)) γρήγορη μέθοδος ταξινόμησης (quicksort) μέθοδος ταξινόμησης με συγχώνευση (mergesort) 13
Παράδειγμα: αλγόριθμος ταξινόμησης τύπου εισαγωγής Θεωρώντας ότι τα στοιχεία είναι αποθηκευμένα σε ένα διάνυσμα Α Σε κάθε βήμα το στοιχείο A(i) πρέπει να εισαχθεί στην σωστή θέση αναμέσα στα ήδη ταξινομημένα από τα προηγούμενα βήματα στοιχεία A(0), A(1),.,A(i-1) Υλοποίηση αλγορίθμου χρησιμοποιώντας το Matlab: Εξωτερικός βρόγχος function asorted = insertionsort(a) asorted=a; for stoixeio = 2 : length(a) value = asorted(stoixeio); thesh = stoixeio; while thesh>1 & asorted(thesh-1) > value asorted(thesh) = asorted(thesh-1); thesh = thesh-1; end asorted(thesh)=value; disp(asorted); end return Εσωτερικός βρόγχος 14
Παράδειγμα εφαρμογής αλγόριθμου ταξινόμησης τύπου εισαγωγής 3-4 2-6 7 0 3-1 2-4 3 2-6 7 0 3-1 2-4 2 3-6 7 0 3-1 2-6 -4 2 3 7 0 3-1 2-6 -4 2 3 7 0 3-1 2-6 -4 0 2 3 7 3-1 2-6 -4 0 2 3 3 7-1 2-6 -4-1 0 2 3 3 7 2-6 -4-1 0 2 2 3 3 7 15
Παράδειγμα εφαρμογής αλγόριθμου ταξινόμησης τύπου εισαγωγής 16
Aλγόριθμοι αναζήτησης στοιχείων (Searching methods) Ας υποθέσομε να βρούμε ένα στοιχείο με κλειδί τον αριθμό 9 5-2 6 4 23 7 45 3 9 0-3 4 7-3 5 6-4 11 Γραμμική αναζήτηση (Linear search) Η αναζήτηση στοιχείων διευκολύνεται από την ταξινόμηση των στοιχείων -4-3 -3-2 0 3 4 4 5 5 6 6 7 7 9 11 23 45 Δυαδική αναζήτηση (Βinary search) Μεθόδοι αναζήτησης (Ν) στοιχείων: γραμμική αναζήτηση (Linear search): απαιτούνται βήματα τάξεως O(N) δυαδική αναζήτηση (Binary search): απαιτούνται βήματα τάξεως O(logN) 17
Παράδειγμα: αλγόριθμος δυαδικής αναζήτησης στοιχείων Θεωρώντας ότι τα στοιχεία είναι ταξινομημένα σε ένα διάνυσμα Α διαστάσεως Ν χρησιμοποιούμε το διαίρει και βασίλευε Μοιράζοντας το διάνυσμα στην μέση, κρατάμε το μισό όπου μπορεί να βρίσκεται το αναζητούμενο στοιχείο και επαναλαμβάνομε αυτό το βήμα, μοιράζοντας διαδοχικά το διάνυσμα στα δύο, μέχρι να βρούμε, αν υπάρχει, το στοιχείο που ψάχνομε. Υλοποίηση αλγορίθμου δυαδικής αναζήτησης με χρήση Matlab: function binarysearch(a,x) arxh = 1; telos = length(a); while arxh <= telos meso = floor((arxh+telos)/2); if x < a(meso) telos = meso-1; elseif x > a(meso) arxh = meso+1; else fprintf('to stoixeio %d bre8hke sthn 8esh: %d.', x, meso) return end end fprintf('to stoixeio %d den bre8hke.', x) return 18
Παράδειγμα εφαρμογής αλγόριθμου δυαδικής αναζήτησης -6-4 -1 0 2 2 3 3 7 >> binarysearch(b,0) To stoixeio 0 bre8hke sthn 8esh: 4. >> binarysearch(b,5) To stoixeio 5 den bre8hke. >> binarysearch(b,7) To stoixeio 7 bre8hke sthn 8esh: 9. >> binarysearch(b,17) To stoixeio 17 den bre8hke. >> binarysearch(b,-6) To stoixeio -6 bre8hke sthn 8esh: 1. >> binarysearch(b,-1) To stoixeio -1 bre8hke sthn 8esh: 3. 19
Παράδειγμα εφαρμογής αλγοριθμών αναζήτησης Εύρεση στοιχείου 33 με αλγόριθμο γραμμικής αναζήτησης: Εύρεση στοιχείου 33 με αλγόριθμο δυαδικής αναζήτησης: 20