Διάλεξη 6 / Διάλεξη 6 / σύντομη περιγραφή - Καρατζάς Κωνσταντίνος (ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ, 2015)
σύντομη περιγραφή: Παρακαλώ. Καλημέρα σας, λοιπόν, και πάλι τελευταία εβδομάδα μάθημάτων πριν από τις διακοπές του Πάσχα. Και έχω την εντύπωση ότι οι διακοπές έχουν κάνει ήδη αισθητή την παρουσία τους μέσω απουσιών. Αυτή την εβδομάδα, λοιπόν, θα συνεχίσουμε προσπαθώντας να εμπεδώσουμε περισσότερο όλα όσα έχουμε δει σε σχέση με το πώς χτίζουμε έναν αλγόριθμο που βασίζεται στη λογική των δομών επανάληψης και ελέγχου και πώς, στην περίπτωση που αυτό μας σκέφτεται, θα μπορούμε να δούμε πώς μπορούμε να το κάνουμε. Στην λογική των δομών επανάληψης και ελέγχου και πώς, στην περίπτωση που αυτό μας είναι επιθυμητό και εφικτό, μπορούμε να υποκαταστήσουμε αυτές τις δομές με πιο εύκολους, ευσύνοπτους, αποτελεσματικούς και αν θέλετε και κομψούς τρόπους, γραφείς του κώδικά μας με το λεγόμενο διανισματικό ή αποτελεσματικό, βάλτε το σε εισαγωγικά, το αποτελεσματικό τρόπο προγραμματισμού. Ξαναλέω όμως ότι η βασική μας έγχνοια παραμένει αυτό που από την αρχή λέγαμε, δηλαδή εμείς θέλουμε να μάθουμε, να σκεφτόμαστε αλγοριθμικά και να επιλύουμε προβλήματα, γι' αυτό και δουλεύουμε πάρα πολύ με παραδείγματα. Σήμερα θα ξεκινήσω με το να ξαναδούμε κάτι που την προηγούμενη φορά είχαμε συναντήσει και που έχει να κάνει με το παράδειγμα της μεθόδου της διχοτόμησης και την μέθοδο αυτή-καθέ αυτή και βέβαια τον αλγόριθμο πίσω από αυτή που όλοι πλέον έχετε δουλέψει και στα πλαίσια του εργαστηρίου. Και ο λόγος είναι ότι θα ήθελα να συνοψήσουμε, ενθυμούμενοι το ποιο είναι το ζητούμενο, να προσπαθήσουμε πραγματικά να προχωρήσουμε μπροστά έχοντας ξεκαθαρίσει το αλγοριθμικό μέρος, διότι η συζήτηση που είχαμε αρκετάς αρκετούς από εσάς, η εμπειρία από το εργαστήριο και από τα προηγούμενα έτη, καταδείχνει πως ακόμη και μετά από μια αναλυτική παρουσίαση υπάρχουν θολά σημεία. Υπάρχουν θολά σημεία που αφορούν πρώτα απ' όλα το πώς δουλεύει η μέθοδος και το πώς την αντιμετωπίσουμε αλγοριθμικά. Και γι' αυτό σας θυμίζω και το συγκεκριμένο παράδειγμα της COSINUS-X, η οποία λέμε ότι έχει μία λύση εκεί κοντά στην περιοχή, στη γειτονιά του μ.1.1, και αυτή η έννοια της γειτονιάς είναι που χρησιμοποιήσαμε στην επίλυση, τι κάναμε δηλαδή, εμείς είπαμε ότι έχουμε δύο όρια, δύο σημεία μέσα στα οποία η συνάρτησή μας αλλάζει πρόσιμο, άρα προφανώς μηδενίζεται τουλάχιστον μία φορά τα δύο άκρα του διαστήματος α και β, και ότι ξεκινώντας από το μέσο αυτού του διαστήματος εξετάζουμε κάθε φορά αν αυτή είναι η νοητεία ευθεία των πραγματικών και έχουμε κάπου το σημείο α και κάπου ολού το σημείο β. Εξετάζουμε λοιπόν, ξεκινώντας από το μέσο, εάν η συνάρτηση σε σχέση με το α ή σε σχέση με το β είναι ομόσυμη ή ιδερόσημη και το κάνουμε αυτό απλά προλπλασιάζοντας με τη στιγμή, όπως είδαμε στο εργαστήριο. Δηλαδή, η τιμή της συνάρτησης στο α σε σχέση με τη τιμή του μέσου είναι ομόσυμες. Εάν ναι, τότε σημαίνει ότι αποκλείεται η λύση να βρίσκεται σε αυτό το ημιδιάστημα, θα βρίσκεται στο υπόλοιπο. Εάν είναι ιδερόσημες, τότε ξέρουμε ότι έχουμε κόψει το διάστημα στη μέση και έχουμε αρχίσει να το περιορίζουμε. Αυτό το επαναλαμβάνουμε αρκετές φορές και εκεί μπαίνει η έννοια της επαναληπτικότητας στη διαδικασία. Θυμίζω και πάλι, και πρέπει αυτά να τα βλέπουμε συνεχώς, ότι οι δομές επαναλήψης έχουν δύο βασικά ξεχωριστά, διακριτά χαρακτηριστικά. Αυτές οι δομές τις οποίες γνωρίζουμε ή θέλουμε να προσδιορίσουμε με ακρίβεια το μέγεστο αριθμό των επαναλήψεων, πόσες φορές το πολύ θα επαναληφθεί μια διαδικασία, είναι οι δομές που υλοποιούνται με τη χρήση της φορ. Για έναν μετρητή που ξεκινά από μία τιμή, πηγαίνει μέχρι ένα πέρας αυτής της τιμής, επαναλαμβάνουμε 10, 20, 30, 50 χιλιάς, όσες φορές ο μετρητής αλλάζει μια διαδικασία, έναν υπολογισμό. Και υπάρχει και η άλλη προσέγγιση, η προσέγγιση στη βάση του while, όπου δεν μας ενδιαφέρει ή δεν ξέρουμε και δεν μπορούμε να γνωρίζουμε τον αριθμό των επαναλήψεων, έχουμε μια άλλη προσέγγιση στο πρόβλημα. Εδώ, για παράδειγμα, εμείς είπαμε ότι αποφασίσαμε να έχουμε το εξής κριτήριο έβρεσης της λύσης. Παίρνουμε τα α και β και επειδή το κόβουμε στη μέση και το μισό στη μέση και το μισό στη μέση, τελικά καταλήγουμε να περιορίσουμε, είναι κάπου η λύση, εδώ ας πούμε, και περιορίζουμε το διάστημα, το αρχικό β το αλλάζουμε, το πηγαίνουμε εδώ γιατί αντιλαμβανόμαστε ότι εδώ μέσα αλλάζει πρόσιμο η συνάρτηση, μετά αυτό το β πάλι θα το πάμε στη μέση με τον τρόπο που έτυχε να χαράξω τη λύση. Μετά θα αλλάξουμε τη μη στο α, μετά θα αλλάξουμε τη μη στο β και σιγά σιγά λοιπόν τα περιθώρια μέσα στα οποία βρίσκεται η λύση στενεύουν, άρα προσδιορίζεται όλο και με μεγαλύτερη ακρίβεια. Λοιπόν, όταν θα φτάσει τελικά αυτή η τιμή, να φτιάξω πάλι την ευθεία μας, όταν λοιπόν έχω μια λύση R εδώ και προσδιορίσω πολύ στενά με μεγάλη ακρίβεια να το α, να και το β, το εύρος του διαστήματος, αυτό προφανώς το εύρος είναι απόλυτη τιμή της διαφοράς των τιμών α και β, το εύρος του διαστήματος μπορώ να το συγκρίνω με μια πολύ μικρή τιμή, μια τιμή τόσο μικρή, που να θεωρώ ότι επαραικώς αντιπροσωπεύει αυτό που θέλω ως ακρίβεια της λύσης. Το tolerance που είχαμε χρησιμοποιήσει στην επίλυση και αυτό χρησιμοποιώ ως κριτήριο. Αυτό λοιπόν το κριτήριο το έχω στην while για να βλέπω κάθε φορά που αλλάζω τα όρια, κάθε φορά που υπολογίζω το μεσαίο και κόβω και κόβω και ξανά ξανά και ξανά, να δω τελικά αν κάποια στιγμή αυτό το διάστημα μέσα στο οποίο έχω στριμώξει τη λύση γίνεται τόσο μικρό που είναι μικρότερο από την ανοχή που έχω ορίσει. Και άρα έχω προσδιορίσει πλέον ακρίβεια το διάστημα μέσα στο οποίο βρίσκεται η λύση και μπορώ να βαφτίσω ως λύση πάντα το R ίσον α συν β δεύτερα. Αυτή είναι λοιπόν η λογική με την οποία δουλέψαμε. Και η while έχει αυτή εδώ την λογική, έτσι, όπου αυτό που βλέπετε τρέχει φυσιολογικά και το μόνο που χρειαζόμαστε εδώ είναι τι, το έχω αφήσει επί τη δεσκενό, αυτό που χρειαζόμαστε εδώ είναι το εξής, ότι αρχικά υπολογίζουμε την ρίζα μέσα στο while, οπότε κάθε φορά η ρίζα επαναπροσδιορίζεται, υπολογίζονται αυτά εδώ τα πρόσημα, το α' πι αφ του ρίζαν είναι μικρότερο από το μητέ, σημαίνει υπολογισμός των ορίων και με αυτόν τον τρόπο τρέχει η διαδικασία έτσι ώστε στο τέλος να στριμώξουμε όπως είπα την λύση σε μια πολύ στενή περιοχή των α και β. Από εκεί και πέρα μπορούμε να δουλέψουμε και με χρήση της φορ και βέβαια σημειώνω ως σχόλιο εδώ ότι όσο η απόλυτη τιμή του α' πι αφ του β είναι μεγαλύτερη του tolerance, μπορεί να έχουμε μια μη μονοτονική συμπεριφορά, οπότε δεν είμαστε σίγουροι ότι μια κατεύθυνση θα αλλάξει το πρόσιμο, αλλά είμαστε σίγουροι ότι θα αλλάξει. Δύο παραδείγματα εδώ, εάν έχω τη συναρτήση χ κοζινούς χ και σας την πλωτάρω σε ένα μεγαλύτερο διάστημα, πάλι το μηδέν βρίσκεται στο σημείο που ξέρουμε, έτσι βλέπετε τη συμπεριφορά της, αυτή την κυματιστή συμπεριφορά. Έχει μια λύση κοντά στο μίον 0.74, έχουμε μάθει να χειριζόμαστε και τα λεγόμενα handles στην αρχιεριστήρια των συναρτήσεων, δηλαδή έχουμε πλέον μετατρέψει τη μέθοδο διχοτόμηση σε συναρτήση, όπως είδαμε, στο εργαστήριο, την οποία καλούμε με ένα όνομα συναρτήσης με τα δύο όρια. Εγώ την έχω μετατρέψει έτσι ώστε να δέχεται και το tolerance αρχικά ή την αρχική τιμή. Και μία άλλη συναρτήση εδώ, η οποία είναι πολυονομικού χαρακτήρα, η χ5 sin 5 χ4 μίον 3 χ3 sin 2 χ4 η οποία, προσέξτε, έχει μια ενδιαφέροντα συμπεριφορά, εδώ είναι το μηδέν. Και φαίνεται ότι είναι μηδέν, σαν ένα πολύ μεγάλο ευρωστημόν, έτσι. Πλησιάζεται το μηδέν από το μίον 4 μέχρι και το 4 σχεδόν. Εδώ πραγματικά η μέθοδος δείχνει την αξία της, ότι μπορεί να εντοπίσει το ένα και μόνο σημείο, γιατί είναι μία η λύση εδώ, είναι μονότονη η συναρτήση έντονα, οπότε, λοιπόν, υπάρχει ένα και μόνο σημείο, στο οποίο βρίσκεται η λύση και είναι το 0,8862, είναι κάπου εδώ. Τώρα, είχαμε χρησιμοποιήσει και είχα αφήσει ασχολίαστο μία εντολή, την break, μέσα στις δομές επανάληψης, ίσως το θυμάστε αυτό, να δω να το έχω εδώ, να το, προσέξτε. Υπολογίζω μια αρχική τιμή, λοιπόν, της λύσης. Εάν τυχαίνει η τιμή της συναρτήσης για αυτή την αρχική ρίζα να είναι ίση με το 0, τότε αγοράστε λαχείο, όπως είπα και σε κάποιους στο εργαστήριο. Δεν συμβαίνουν αυτά τα πράγματα, είναι ένας έλεγχος που γίνεται απλά και μόνο για να έχουμε πληρότητα της λύσης. Και σε αυτή την περίπτωση εμφανίζεται η εντολή break. Τι θα κάνει η break? Η break είναι μια εντολή η οποία διακόπτει την εκτέλεση δομών επανάληψης. Την βλέπετε εσείς όμως μέσα σε μια δομή ελέγχου, μέσα σε μια if. Οι if έχουν ανωσία στην break. Θα την καταπιούν και θα την αφήσουν στη θέση που βρίσκεται χωρίς να την επεξεργαστούν. Αφού λοιπόν φύγει η break από την if, που μέσα συνεχίζει να βρίσκεται? Στην while, στην δομή επανάληψης, έτσι δεν είναι? Η while, ως δομή επανάληψης, θα διακοπεί, θα σταματήσει η λειτουργία της. Αυτή είναι η έννοια της break. Και θα μου πείτε και τι θα συμβεί μετά. Θα εκτελεστεί η πρώτη εντολή που υπάρχει μετά το πέρας της δομής επανάληψης. Ό,τι κι αν υπάρχει. Εάν δεν υπάρχει κάτι, σημαίνει ότι το πρόγραμμα έχει τελειώσει, έτσι δεν είναι? Άρα σταματά η εκτέλεση του προγράμματος. Αυτό σχολιάζω εδώ, ότι η break αφορά δομές επανάληψης και μεταφέρει τη συνέχεια της εκτέλεσης του προγράμματος στην πρώτη γραμμή εντολής που υπάρχει μετά την δομή επανάληψης. Αυτά, λοιπόν, ήθελα να δούμε ως συμπλήρωμα όλων όσων έχουμε δει από την προηγούμενη ήδη εβδομάδα. Πριν να συνεχίσουμε στην ίδια λογική, αλλά κάνοντας πράγματα που είναι καινούργια και που σχετίζονται με την χρήση, εφόσον οι διαφάνειες μας τα εκτρέψουν, θα δουλέψουμε με προγραμματισμό χωρίς δομές. Η γνώση των δομών προγραμματισμού είναι απαραίτητη διότι βρίσκονται σε κάθε γλώσσα. Άρα, είτε δουλεύουμε σε MATLAB, είτε δουλεύουμε σε FORTRAN, τις δύο γλώσσες και υπολογιστικό περιβάλλον και γλώσσα το MATLAB, γλώσσα ή FORTRAN, αυτά τα δύο θα τα συναντήσετε εν τόνος στη σπουδέ σας στο τμήμα, είτε δουλέψετε σε οποιασδήποτε άλλες γλώσσες προγραμματισμού, Python, Java, C, Basic, Pascal, οι δομές είναι εκεί και η σύνταξή τους επίσης είναι εκεί. Δηλαδή, θα πρέπει να αναφέρουμε το παράδειγμα του ότι στην FORTRAN η σύνταξη είναι πάρα πολύ συναφής με την σύνταξη σε MATLAB. Σε MATLAB τι έχουμε, στην φόρα ας πούμε, έτσι, φοράει από 1 έως με βήμα 2 έως 10. Σωστά ένα παράδειγμα, εκτελώ εντολές, έστω display, ούτε count display, υπολογίζω το i τετράγωνο, το αναθέτω σε μια μεταβλητή α, end. Ένα στοιχειώδες πρόγραμμα σε MATLAB. Σε FORTRAN, do αντί της for, end, do αντί του end. Και από εκεί και πέρα, η μόνη διαφορά είναι ότι ο δίκτης έχει τη λογική, εδώ από βήμα έως, στη FORTRAN από έως βήμα. Do i από 1 και δεν χρησιμοποιούμε την άνοκα το τελείωμα, αλλά το κόμμα έως 10 με βήμα 2. Πόσες διαφορές βλέπουμε. Πόσο δυσκολό είναι να προσαρμοστούμε σε όλο, πολύ λίγες οι διαφορές, πολύ μικρή η προσπάθεια που πρέπει να καταβάλουμε για να προσαρμοστούμε. Και έτσι, λοιπόν, μπορούμε να προγραμματίζουμε με χρήση αυτής της δομής επανάληψης σε FORTRAN. Είναι ένα παράδειγμα του πόσο συναφείς είναι οι γλώσσες, ειδικά αυτού του είδους οι γλώσσες που έχουν φτιαχτεί για ιππιστημονικούς, όπως λέμε, υπολογισμούς. Από εκεί και πέρα, ο διανισματικός τρόπος, αυτό που ονομάζω εγώ εδώ και πολλοί άλλοι, αποτελεσματικό τρόπο προγραμματισμού, είναι χαρακτηριστικό του MATLAB και υπολογιστικών περιβαλλόντων ομοίων με το MATLAB, το OCTAVE, του SILAB και τα λοιπά. Και δεν τον βρίσκουμε σε γλώσσες όπως η FORTRAN ή η Java, για παράδειγμα. Και βασίζεται στο γεγονός πως υπάρχουν εγγενείς αποικονίσεις ποιών πραγμάτων, πινάκων ακριβώς, επειδή όλα είναι πίνακες στο MATLAB, μπορούμε να χρησιμοποιούμε αυτήν την έννοια του διανίσματος συνεχώς. Για να δούμε λοιπόν το με και το χωρίς. Αλγόριθμοι με δομές και υλοποίηση, αλγόριθμοι οι οποίοι περιλαμβάνουν τη χρήση δομών και η υλοποίηση με τη χρήση δομών ρεπανάληψης και χωρίς. Παράδειγμα, έστω πως έχω ως πρόβλημα το να υπολογίσω το άθροισμα των αριθμών από 1 έως 9. Στιχειόδοστα μου πείτε, εντάξει, έχετε κάνει πολύ πιο ενδιαφέροντα πράγματα. Ας δούμε όμως πώς θα δουλέψουμε. Θα αρχικοποιήσουμε προφανώς μια μεταβλητή μας αρχικά, τη μεταβλητή του αθρίσματος. Μετά θα ξεκινήσω να προσθέτω τους αριθμούς σε αυτού του καταλόγου αυτής της λίστας αριθμών και σε κάθε αποτέλεσμα θα προσθέτω το προηγούμενο. Έτσι δουλεύω και σορεύω έτσι το άθροισμα. Υπολογίζω το άθροισμα. Απλή λογική, τελειώνω όταν φτάσω στο πέρας της λίστας. Άρα, με μια απλή δομή, πώς θα ήταν αυτό, αρχική τιμή της μεταβλητής του αθρίσματος, θα μας άθρισμα, ίσο με δουλειάν και για i από 1 έως ν, η νέα τιμή του αθρίσματος είναι η προηγούμενη συν 1. Άρα, προφανώς, κάθε φορά θα πάει και θα ρίχνει μέσα στην αθρίσμα όλες τις προηγούμενες τιμές και θα τις αθρίσει. Αυτό θα το έκανα και σε φόρτραν. Σε φόρτραν, λοιπόν, αν θα ήθελα να το γράψω, η αντίστοιχη, αν θέλετε, διαδικασία μου, η υπολογιστική, θα ήταν do για i, ίσον ένα κόμμα ν, αυτά έχουν οριστεί πιο πριν πόσο είναι το ν και το αθρίσμα, αθρίσμα, ίσον αθρίσμα, συν i. Ακριβώς το ίδιο. Δεν θα άλλαζε τίποτα. Ούτε ονοματολογία, ούτε κάτι άλλο. Τί θα είχε προηγηθεί, τι θα υπήρχε πάνω από την δομή, θα είχε προηγηθεί το ότι θα έπρεπε να ορίσω την μεταβλητή αθρίσμα, κάτι που δεν το κάνω σε MATLAB, την χρησιμοποιώ χωρίς να χρειαστεί να την ορίσω, σε φόρτραν θα έπρεπε να την ορίσω, να πω στο πρόγραμμα ότι άκου, θα χρησιμοποιήσεις την μεταβλητή αθρίσμα, η οποία θα είναι, εδώ τι, ακέραιο ή πραγματική, δηλαδή θα πρέπει να καθορίσουμε το τίδους περιεχόμενο θα έχει, να ορίσω την I, που χρησιμοποιώ ως μεταβλητή του δίκτη, έχω λοιπόν την ανάγκη να λάβω κάποιες συγκεκριμένες πρόνοιες στη φόρτραν, που στο MATLAB δεν το χρειάζομαι. Κατά τα άλλα είναι ακριβώς το ίδιο πράγμα. Όμως, σε MATLAB μπορώ να το κάνω και ως εξής. Αντί λοιπόν έχω απλά και μόνο την δομή μου, να γράψω SAM, έτσι. Και βέβαια, την SAM την έχω και στη φόρτραν, ως εντολή. Πρέπει να πω, ακριβώς την ίδια. Δηλαδή, ανάειτά την έλευση του προτύπου της φόρτραν 95, η φόρτραν έχει διάφορες γενιές. Είναι μια παλιά γλώσσα. Η έλευση λοιπόν της φόρτραν 95, η οποία βγήκε κοντά στο 1995, δεν είναι ακριβώς ίδιο. Ας πούμε τώρα, συζητούμε για τη φόρτραν 2008. Είμαστε στο 15, έτσι, για το πρότυπο του 2008. Μετά την έλευση αυτού του 95, είχαμε τέτοιου είδους συναρτήσεις, ιδιαίτερα χρήσιμες για τον υπολογισμό στοιχείων πινάκων. Γιατί και εκεί φάνηκε, προφανώς, οι πινάκες παίζουν ρόλο κλειδί σε κάθε επιστημονικό υπολογισμό. Αλλά, για να δούμε όμως κάτι διαφορετικό. Εάν, για παράδειγμα, εγώ ήθελα κάτι τέτοιο, το 1 τετράγωνο συν 2 τετράγωνο συν 2 τετράγωνο, έτσι, πώς θα το έκανα με συμβατικό τρόπο, για να μη σας ζαλίζω, ώστε να εμφανίζω, και εμφανίζω και το διανισματικό. Σαν χ τελεία τετράγωνο. Έληξε. Δηλαδή έχω τα στοιχεία του διανίσματος χ, έχω ορίσει πιο πριν ως χ τ, ένα διανισμα με τιμές από 1 έως νί, σωστά. Από 1 έως 10, για παράδειγμα. Πώς θα υπολογίσω, αν έχω ως πρόβλημα, την ανάγκη, να υπολογίσω το άθροισμα του 1 τετράγωνο, συν 2 τετράγωνο, συν 3 τετράγωνο, μέχρι και το 10. Έχω δηλαδή την ανάγκη να υπολογίσω το άθροισμα αυτό. Τότε θα δημιουργούσα ένα διανισμα χ, ίσο από 1 έως την τιμή του νί, έτσι 10. Άρα τι θα δημιουργούσα, προφανώς τις τιμές. Το χ μου, λοιπόν, θα ήταν το διανισμα 1, 2, 3, κτλ, 10. Και θα μπορούσα να εφαρμόσω την πράξη της ύψωσης σε δύναμη, σε κάθε στοιχείο του χ, απλά λέγοντάς ότι θέλω το χ τελεία. Είπαμε ότι η τελεία μπαίνει αριστερά της πράξης, όταν θέλουμε να δουλώσουμε στοιχείο προς στοιχείο. Ποια είναι η πράξη που θέλω να κάνω, ύψωσης σε δύναμη τετράγωνο. Και έλειξε. Αυτή, λοιπόν, είναι μια ευκολία, μια δυνατότητα, που την έχω σε μάτλα περιβάλλον. Ο που χ λοιπόν, το διανισμα των συγκεκριμένων τιμών. Εύκολο, γρήγορο και παραγωγικό, εφόσον έχουμε πλέον συνηθίσει τη λογική. Και βέβαια, τι κρύβεται σε αυτή εδώ την απλή διαδικασία, κρύβεται μια επανάληψη. Αυτό δεν του λέμε, ότι πήγαινε και κάνε αυτή την πράξη, σε ένα προς ένα όλα τα στοιχεία του χ, έως θα του σαρώσει σε όλα τα στοιχεία του. Αυτό του λέμε. Αυτή τη δυνατότητα πλέον την ξέρουμε. Και θα ήθελα να τη δούμε σε ένα παράδειγμα, που θεωρώ ότι έχει μεγαλύτερο ενδιαφέρον, από τον φρωτόλιου χαρακτήρα. Παραδείγματα που είναι πολύ καλά για εισαγωγική χρήση. Να δούμε έναν άλλο παράδειγμα, τον αριθμό ISBN. Ο αριθμός ISBN, έχετε πάρει και βιβλία από διάφορα μαθήματα, και γενικά, ως αναγνώστες, ίσως έχετε παρατηρήσει, ότι είναι ένας αριθμός, ο οποίος συνήθως φιλοξενείται στο πισθόφυλο. Και πρέπει να πω ότι δεν είναι ένας στοιχαίος αριθμός. Είναι ένας αριθμός 13 πλέον ψηφίων, ο οποίος περιέχει στοιχεία για τον εκδότη, τη χώρα προέλευσης, κτλ. Άρα είναι ένας κωδικός αριθμός, μοναδικός για κάθε βιβλίο, κάθε έκδοση NDP ή ηλεκτρονική στον κόσμο, και αφορά βιβλία και επιστημονικά περιοδικά τουλάχιστον, και μονογραφίες κτλ. Το τελευταίο ψηφίο χαρακτηρίζεται ως ψηφείο ελέγχου και προκύπτει από τα προηγούμενα 12. Να σβήσω λίγο εδώ, γιατί μπορεί να χρειαστούμε μέρος του πίνακα. Με ποιον τρόπο υπολογίζεται το ψηφείο ελέγχου, είναι κάτι σαν ένα ψηφείο που μας δείχνει αν ο αριθμός ISBN είναι αληθής ή όχι. Ανοίγει σε βιβλίο πραγματικό ή είναι μαϊμού, όπως λέμε και λέτε, έτσι. Υπολογίζεται ως εξής το τελευταίο ψηφείο ελέγχου. Παίρνουμε τους 12 πρώτους αριθμούς και τους αθροίζουμε με τον εξής τρόπο. X1X3X2XX3X4XX5XX6XXXX11XXX12 Άρα έχουμε, συντελεστεί 1 για ποιους 1, 3, 5, 6 όρους, άρα για τους περιτούς όρους, και συντελεστεί 3 για τους 2, 4, 6, 8, 10, 12, για τους άρτιους όρους. Δημιουργούμε αυτό το άθρισμα, αυτό το άθρισμα το χρησιμοποιούμε για να υπολογίσουμε το ακέραιο υπόλοιπο της διαίρεσης του με το 10, υπολογίσουμε το mode του αθρίσματος ως προς το 10, και αφαιρούμε αυτό το υπόλοιπο διαίρεσης από το 10. Αυτή η τιμή είναι η τιμή του τελευταίου και 10 του τρίτου ψηφίου. Και είναι το ψηφίου ελέ. Πώς θα μπορούσαμε λοιπόν εμείς, άραν το ξαναπεριγράφω, έχουμε 13 αριθμούς. Εστιάζουμε στους 12 πρώτους για να δούμε αν ο ISBN είναι γνήσιος. Θα πρέπει να τους αθρίσω τους 12 πρώτους με τον τρόπο που αναφέρω εδώ. X1 συν 3X2, X3 συν 3X4. Άρα, με συντελεστή 1 τους περιτούς, με συντελεστή 3 τους άρτιους. Αυτό το άθρισμα το χρησιμοποιώ για να υπολογίσω το μόντ του ως προς 10. Τι σημαίνει μόντ του αθρίσματος προς 10, αν ας πούμε αυτό το άθρισμα είναι το 111. Το μόντ του 111,10 πόσο είναι, είναι το ακέραιο υπόλοιπο της διαίρεσης του 111 με το 10. Είναι 1 λοιπόν. Διότι το 10 φοράει 111 φορές και περισσέβει 1. 1 είναι το ακέραιο υπόλοιπο της διαίρεσης. Και αυτό το 1 το αφαιρώ από το 10. Άρα το στοιχείο ελέγχου μου είναι το 9 τελικά. Θέλω λοιπόν, με τη βοήθεια αυτού του παραδείγματος, να αναπτύξω ένα αλγόριθμο και να ενοιολοποιήσω το σχετικό πρόγραμμα, που θα με βοηθά να ελέγχω αν ένας αριθμός ΑΙΣΜΕΝ είναι γνήσιος ή όχι. Εδώ λοιπόν έχω πολλές ιδέες με τις οποίες μπορώ να δουλέψω. Θα έλεγα το εξής, ότι αν έχω αυτού τον αριθμό ΑΙΣΜΕΝ, που είναι ένα συγκεκριμένος όντως πραγματικός αριθμός, το πρώτο πράγμα που θα μου έρχονταν στο μυαλό, εάν δεν είχα κάνει καθόλου πληροφορική, φαντάζομαι ότι θα ήταν πολύ απλά να κάνω αυτό. Να πάω και να προσθέσω με το χέρι όπως λέμε, όλα τα στοιχεία. Προφανώς αυτό είναι σωστό. Επίσης προφανώς όμως έχει κάποιους περιορισμούς. Δηλαδή, ναι μεν δουλεύει ως μέθοδος υπολογισμού του αθρίσματος, σίγουρα δεν είναι η καλύτερη μέθοδος, έχουμε δει πολλά άλλα, πολλές άλλες προσεγγίσεις. Γιατί δεν είναι καλή μέθοδος, διότι κάθε φορά πρέπει να ξαναγράφουμε τα συγκεκριμένα στοιχεία ή ακόμα και αν γράφουμε όλο το διάνεσμα χ, έχουμε μια πολύ μεγάλη παράσταση που είναι μπελάς στο να την υπολογίσουμε. Ποιος άλλος είναι ο λόγος? Το ότι μαθαίνουμε πληροφορική. Το ότι μαθαίνουμε να σκεφτόμαστε αλγοριθμικά, να σχεδιάζουμε αλγορίθμους και να τους υλοποιούμε με τη βοήθεια γλωσσό προγραμματισμού. Έτσι, διαφορετικά, γιατί να δώσουμε μία λύση που θα δίναμε μόνο εάν δεν είχαμε ιδέα. Πώς αλλιώς μπορώ να το κάνω, λοιπόν? Ας αρχίσουμε να αποδομούμε το πρόβλημα. Αυτή είναι η καλή μέθοδος. Πάντα αυτό δεν κάνουμε. Και στον υπολογιστή αυτό χρειάζεται, λοιπόν, να κάνουμε. Αποδομούμε το πρόβλημα στα στοιχειώδη στοιχεία του. Παρατηρήσαμε ότι οι περιττοί όροι του αθρίσματος έχουν συντελεστεί ένα. Οι αρτιόροι έχουν συντελεστεί τρία. Άρα, εγώ τι θέλω? Εάν θέλω μία μέθοδο έβρεσης αθρίσματος αριθμών όπου όλοι οι περιττοί να έχουν συντελεστεί ένα, να απολυθιάζονται με το ένα, και οι άρτιοι με το τρία. Ζήτημα. Πρέπει να βρω μια λύση. Πώς θα το κάνω αυτό? Διανεισματικά μπορώ να το κάνω πάντως, έτσι δεν είναι. Δηλαδή να του πω ξεκίνα από ένα συγκεκριμένο αριθμό, πήγαινε μέχρι ένα συγκεκριμένο και χρησιμοποίησε ένα συγκεκριμένο βήμα. Δηλαδή, μπορώ να του πω ότι άκου να δεις. Αν θέλω να υπολογίσω όλους τους περιττούς που έχουν συντελεστεί ένα, έτσι, ξεκίνα από το ένα, προχώρησε με βήμα 2 μέχρι το 11, έτσι, και υπολόγησε το άθρισμα όλων των αριθμών από τους οποίους θα περάσεις. Το 1 συν 2, τον χ3, συν 2 τον χ5, συν 2 τον χ7, συν 2 χ9, συν 2 χ11. Μάζεψε αυτό το άθρισμα. Τελείωσες μεταπεριτά. Έχουμε τώρα τους ζηγούς. Κάνε το ίδιο ξεκινώντας από ποιον όμως τώρα, από τον 2, πήγαινε μέχρι το 12, με βήμα πάλι 2. Και κάθε φορά σε όποιο αριθμό βρίσκεσαι, πολλαπλασίασε με το 3 και μετά άθλησε. Ξεκίνα τον χ2, πολλαπλασίασε τον με το 3. Πήγαινε στο χ4, πολλαπλασίασε τον με το 3, προσέθεσε τον στο ότι είχες. Κάνε το ίδιο με τον χ6, με τον χ8, με τον χ10, με τον χ12. Διανεισματικά λοιπόν πώς μπορώ να το κάνω αυτό. Προφανώς με ένα τέτοιο τρόπο. Έχω την Σαμ, ως εγγενή συνάρτηση. Του λέω λοιπόν, άκου να δεις φίλε μου, φίλοι μου ή ό,τι άλλο θέλετε. Ξεκίνα, και εδώ θέλω την προσοχή σας, να κάνεις τι. Να μου βρεις πρώτα απ' όλα τα στοιχεία του διανείσματος Χ. Διανείσμα Χ δεν έχει τις 12 τιμές. Τις έχει. Να μου βρεις τα στοιχεία του διανείσματος Χ που βρίσκονται στις θέσεις από 1 έως 12 με βήμα 2. Πού θα πάει λοιπόν στη θέση 1, 3, 5, 7, 9, 11. Και προσέθεσέτες όλες αυτές τις τιμές Σαμ. Εφήρμοσε δηλαδή την Σαμ επί του περιεχομένου του Χ που αντιστοιχεί στις θέσεις αυτές. Τώρα, πήγαινε και βρες μου τα στοιχεία του Χ που αντιστοιχούν στις θέσεις από 2 έως 12 με βήμα 2. Τσακ. 2 τα στρεξουχτό μπλα μπλα. Και εφήρμοσε πάλι Τι το στη Σαμ και μετά προαπλασήσε με το 3 επειδή μπορώ να το κάνω και έτσι και αλλιώς. Δηλαδή, ή να τις αφρήσω και όλα επί τρία ή όλα επί τρία και μετά να τις αφρήσω. Τι ίδιο δεν είναι. Επί τρία λοιπόν αφού τις αφρήσω όλες. Με αυτόν τον τρόπο έχω το συνολικό άθροισμα. Σωστά, γλιτώνω δύο δομές επανάληψης εδώ. Διότι θα έπρεπε να του πω για να υπολογίσεις τα περητά στοιχεία του αθροίσματος. Ξεκίνα γιάει από 1 έως 12 με βήμα 2. Το νέο άθροισμα είναι το παλιό συν 1. Άρα θα πάρεις το I1 στο I3, 5, 7, 9 κτλ. Και κάνε το ίδιο για τα ζηγά. Μέσα σε μία γραμμή λοιπόν έχω ολοκληρώσει κάτι που θα ήθελε δύο δομές. Ερώτημα. Ευχαριστώ γι' αυτό. Ήδη μία παρατήρηση η οποία δείχνει ότι εφ' ενός, προφανώς και ξέρετε, αφετέρου, ότι υπάρχουν και ενδιάμεση τρόπι. Λέει στην αδερφό σας, και έχει απόλυτος δίκιο, ότι θέλω μια δομή επανάληψης. Εδώ. Γιατί θέλω μόνο μια δομή επανάληψης, διότι θα μπορούσα να του πω, άκου να δεις, για I από 1, έως με βήμα 2 έως 12. Κάνε τι, προσθέθεσε όλα τα x του I, άρα το S, τον αρτιόν, Sα, είναι ίσο με το προηγούμενο Sα, έχω κάνει αρχικοποίησης έξω από τη δομή, εννοείται έτσι, δεν με ενδιαφέρει αυτό, Συν το x του I, όχι, Sπεριτό δεν είναι, ίσον Sπεριτό συν x του I, με αυτόν τον τρόπο θα δημιουργήσω τάθρησμα των περητών, έτσι δεν είναι, και Sα ίσον Sα συν 3 φορές το x του I. του I όμως, όχι, του I συν 1. Οπότε θα πάει και θα πει εδώ, στην αρχή θα προσθέσει το στοιχείο x1, εδώ όμως θα ξεκινήσει από το x2, μετά θα πάει στο x3, x5, x7, x9, x11, σωστά, εδώ όμως θα πάει πάντοτε στο x1, θα προσθέσει το x12, και μπορώ και αυτά όλα μαζί να τα βάλω στο ίδιο άθρησμα παρεπιπτόντος, έτσι δεν είναι, δηλαδή αντί να έχω δύο αθρίσματα εδώ, ποιος θα μου πει πως θα μπορούσε να το γράψω σαν ένα άθρησμα, και να τα έχω όλα μαζί. Γράφω από κάτω και θα σβήσω, σαν λοιπόν, ίσον σαν, συν xi, συν xi, συν τρεις φορές του xi, συν ένα. Μέσα σε μία δομή. Παρ' όλα αυτά, είναι ακόμη συντομότερος ο τρόπος, έτσι δεν είναι, και αν μπούμε στη λογική φαίνεται πως μπορούμε εύκολα να μεταβούμε από το ένα στο άλλο, και βέβαια να υιοθετήσουμε τον σύντομο τρόπο, όταν αυτό είναι εφικτό από τα χαρακτηριστικά του προβλήματος. Έτσι λοιπόν, αν θέλαμε τώρα να το υλοποιήσουμε σε μορφή συνάρτησης, πως θα μπορούσαμε να το κάνουμε. Με την κλασική διαδικασία, και χθες που δουλεύσαμε μαζί στο εργαστήριο, εκτάκτως με ένα άλλο τμήμα, και με το δικό μου τμήμα, την ίδια εικόνα από κομμίζω, δηλαδή δεν έχουμε κατακτήσει πλήρως τη λογική του ότι έχω συγκεκριμένη μορφή περιεχομένου για κάθε συνάρτηση. Όταν λοιπόν λέμε συνάρτηση στο MATLAB πάντοτε, έχουμε ένα τμήμα κώδικα, μικρό μεγάλο δεν μας ενδιαφέρει. Το μόνο που το καθιστά συνάρτηση είναι, όχι το μόνο, ένα βασιλικό χαρακτηριστικό, που το καθιστά συνάρτηση εδώ το τμήμα κώδικα, είναι ότι ξεκινά και έχει σαν πρώτη γραμμή την εντολή function. Αμέσως μετά μπορεί ή μπορεί και να μην έχει απόδοση περιεχομένου ανάλογο με τη συνάρτηση, αλλά function έχει. Και ένα όνομα έχει. Εγώ λοιπόν φτιάχνω εδώ μια συνάρτηση, άρα function. Έχει όνομα. Το ονόμασα isbn underscore vectorized. Τα ονόματα είπαμε μπορούν να είναι οποιαδήποτε, αρχικά ήταν λεγόμενα νόμιμα ονόματα. Άρα να μην ξεκινούν από αριθμό και να έχουν όλο το συνδυασμό χαρακτήρων που επιτρέπεται σε MATLAB. isbn vector θα παίρνει ένα διάνσμα X ως περιεχόμενο και θα πρέπει να κάνει όλο τον υπολογισμό. Και επειδή είναι μια συνάρτηση που πρέπει να αποφασίζει αν είναι σωστός ο αριθμός isbn, άρα εγώ θα χρησιμοποιήσω λογική μεταβλητή, την correct και αρχικά θα της αποδώσω την τιμή false. Είσαι λάθος ρε φίλε. Και μετά θα κάνω τον υπολογισμό και θα δω, είσαι λάθος ή όχι. Οπότε αρχικά η τιμή correct, βλέπετε ότι η correct είναι το αποτέλεσμα της συνάρτησης, έτσι. Είναι δηλαδή τι, η τιμη μεταβλητή, η οποία θα λάβει τιμή μέσα στη συνάρτηση και θα μπορέσει να την κουβαλήσει μαζί της έξω από τη συνάρτηση. Ξαναθυμίζω κάτι που και χθες το συζητήσαμε και πρέπει συνεχώς να το επαναλαμβάνουμε. Ό,τι συμβαίνει μέσα στη συνάρτηση είναι σε απόλυτη άγνοια σε σχέση με το τι συμβαίνει στο πρόγραμμα. Το πρόγραμμα δεν έχει ιδέα. Χρησιμοποιεί τη συνάρτηση καλόντας την. Το μόνο που θα κάνει αυτό είναι ότι όταν θα συμπληκτολογίσουμε εμείς isbn underscore vec και μέσα σε παρένθεση θα βάλουμε το χ, το διάνισμα, ο υπολογιστής μας θα πάει να ψάξει και να δει έχω κάποια εγγενή συνάρτηση που να ονομάζεται έτσι, όχι. Έχω κάτι άλλο βρε αδερφέ, που να το δημιούργησε ο χρήστης να είναι στο φάκελο εργασίας, εκεί όπου βρίσκομαι, στον διερέκτηρο που βρίσκομαι και να έχει αυτό το όνομα, το έχω. Βάλιστα. Λοιπόν, τι μου λέει, ρίξε μέσα σε αυτό το αρχείο το χ. Το ρίξα. Το τι θα κάνει εκεί μέσα δεν μας ενδιαφέρει. Αν δεν το ρυθμίσουμε σωστά για να γίνουν σωστά οι ενέργειες, την κάτσαμε. Πολύ απλά. Αυτό όμως, έτσι όπως το έχουμε ρυθμίσει που θα κάνει, είναι ότι στο τέλος θα υπολογίσει μια τιμή για την correct. Και η correct, ως μεταβλητή, είναι η μόνη η οποία μπορεί να περάσει το γαλαξιακό κενό μεταξύ του μικροσύμπαντος της συνάρτησης και του σύμπαντος του κυρίου σπρόγραμματος. Και κουβαλάει αυτή τη τιμή στο κυρίως πρόγραμμα. Και λέει στο κυρίως πρόγραμμα, correct is true or false. Εδώ λοιπόν αυτή είναι η λογική μας. Άρα, τι είπαμε, μονά επί ένα, ζηγά επί τρία. Αυτό δεν είπαμε. Ας το κάνουμε. Να το. Ορίστε το άθεσμά μας. Και τον έλεγχο του υπόλοιπου της διαίρεσης. Αυτό τον άφησα απ' έξω, γιατί τον θεωρώ εύκολο. Δηλαδή, πώς θα το κάνω αυτό, θα του πω. Εάν το 10 το τρίτο στοιχείο έχει τιμή που ταυτίζεται με το 10-mode του S.10, αυτό που είπαμε ότι είναι ο τρόπος υπολογισμού, τότε τι είναι το ISBN, σωστό. Λήξεις. Ένας τρόπος είναι αυτός. Άλλος τρόπος, θα μπορούσε να είναι και λίγο οποιος. Θα το δείχνω εδώ και πάλι. Κοιτάξτε. Προφανώς υπολογίζω το SAM και μετά το βάζω μέσα σε μια δομή ελέγχου για να δω εάν είναι σωστό το στοιχείο του 10 το τρίτο, η τιμή του 10 το τρίτο στοιχείου ταυτίζεται με αυτήν. Υπολόγησα αν είναι γνήσιος ο ISBN. Εάν όμως δεν είναι, προφανώς θα παραμένει οικοερέκτη με ποια τιμή με αυτή που είχε αρχικά. Ποια είχε αρχικά? False. Άρα, όταν θα κουβαλήσει το αποτέλεσμα της συνάρτησης στο κυρίως πρόγραμμα, αν είναι ορθός ο ISBN θα κουβαλήσει την τιμή true, αν είναι λάθος ο ISBN θα κουβαλήσει την τιμή false. Το ερώτημα. Αν θέλω να το συντιμήσω ακόμη περισσότερο, μπορώ να το βάλω όλα μαζί. Φαντάζομαι ότι κάτι τέτοιο πλέον... Ουσιαστικά, τι θέλω να του πω, εάν το X του 13 είναι το 10-1, το άθροισμα ακόμα 10, τότε true, έτσι δεν είναι. Το άθροισμα δεν το έχω όμως υπολογίσει. Να το. Και έτσι λοιπόν το μήχρι είναι ακόμη περισσότερο. Θα μου πείτε, γιατί κάνω ασκήσεις συμπίκνουσης. Δεν τις κάνω για λόγους κομψότητας μόνο, τις κάνω γιατί με αυτόν τον τρόπο αρχίζω να αντιλαμβάνομαι, ελπίζω, καλύτερα, και το ξέρω, δεν το ελπίζω απλά, αρχίζω να αντιλαμβάνομαι καλύτερα τον τρόπο με τον οποίο λειτουργεί ο αλγόριθμός μου. Δηλαδή, αυτή τη μετάβαση τη θεωρώ σημαντική. Εμείς αυτό δεν θέλουμε να υπολογίσουμε τελικά. Μια απλή σχέση υπαλλήθευσης είναι. Είναι το 10 μοιον μότ του αθρίσματος κόμμα 10, ίσο με το περιεχόμενο του 10 του 3ου στοιχείου. Τώρα, το ότι το άθρισμα μπορεί να είναι μία τιμή ή ένα απίστευτο μακρινάρι, ή το αποτέλεσμα μιας άλλης συνάρτησης, ή το αποτέλεσμα ενός άλλου προγράμματος, παίζει κανένα ρόλο, όχι. Το θέμα είναι να το βάλουμε στη θέση του. Εδώ είναι το αποτέλεσμα αυτής της πράξης. Θα μπορούσε να είναι το αποτέλεσμα μιας άλλης συνάρτησης. Να ήταν μια πολύπλοκη διαδικασία υπολογισμού και να έπρεπε αυτό το άθρισμα να το υπολογίσει μία άλλη συνάρτηση και να το πάρει αυτή η συνάρτηση για να κάνει αυτόν τον έλεγχο. Πάλι δεν θα άλλαζε κάτι. Ερώτημα. Μια αλληλεγγύη θα μειωθεί ο πρώτος της τελετίας. Να ένα επίσης πολύ καλό ερώτημα. Κάτι που δεν μας έχει απασχολήσει ακόμη και θα μας απασχολήσει στη συνέχεια, θα ήθελα να το σχολιάσω τώρα που οδεύουμε προς το πρώτο μας διάλειμμα. Μέχρι τώρα δεν σας έχω πει τίποτα, και δεν έχετε ακούσει και από κανέναν άλλον από τους συμμετέχοντες στο μάθημα, τίποτα που να αφορά τον χρόνο εκτέλεσης. Δηλαδή συμπεριφερόμαστε στα προγράμματά μας, στους αλγορίθμους μας, ως αν να μπορούν να εκτελεστούν αστραπιέα. Στον ανοιγό κλίμα των ματιών, όπως λέγαν παλιά. Δεν είναι έτσι. Θα σας δείξω, ήδη είχαμε δει κάποια στιγμή, το πώς μπορείτε να χρονομετρήσετε την εκτέλεση των προγραμμάτων, αλλά μετά το διάλειμμα του Πάσχα, αφού κάνουμε την πρώτη μας επανάληψη, το πρώτο σουμάρισμα, θα πάμε στο δεύτερο σκέλος του μαθήματος, που όπως θα έχετε δει από το περιεχόμενο από το σύλλαμβους, περιλαμβάνει στοιχεία υπολογιστικής πολυπλοκότητας. Εκεί θα μιλήσουμε λοιπόν για το χρόνο εκτέλεσης. Και βέβαια εκεί θα δούμε και πράγματα που έχουν πολύ μεγάλο ενδιαφέρον. Όπως για παράδειγμα, γιατί στο κλασικό παραμύθι του Σκακιού, το ξέρετε αυτό και έτσι θα πάμε στο διάλειμμα. Τι λέει λοιπόν το παραμύθι, ότι κάποιος έδειξε σε έναν βασιλιά στην Περσία ή κάπου αλλού, δεν θυμάμαι χαρακτηριστικά το Σκάκι και ο βασιλιάς ενθουσιάστηκε, οπότε του είπε ζήτε αμότι θέλεις. Τόσο ωραίο παιχνίδι, σου αξίζει μία ανταμοιβή. Και αυτός του είπε ο Φέρον το Σκάκι, του είπε βασιλιά μου εγώ δεν θέλω τίποτα, ένας απλός άνθρωπος, κοίταξε να δεις τι σκέφτηκα, θα μου δώσεις για το ένα κουτάκι της Σκακέρας ένα σπυρισιτάρι, για το δεύτερο κουτάκι το διπλάσιο του πρώτου, δύο σπυριά, για το τρίτο το διπλάσιο του δεύτερου. Τέσσερα σπυριά. Στο τέλος όμως πας στο δύο στην εξικοστή τετάρτη. Το δύο στην εξικοστή τετάρτη είναι ένας αριθμός μεγαλύτερος από τους κόκκους άμμους της Γη. Έχοντας ήδη, χαίρετε και πάλι, έχοντας ήδη δει τρόπους και διαδικασίες χρήσης και δομών, αλλά και διανισματικού τρόπου προσέγγισης προβλημάτων. Θα είναι χρήσιμο να δοκιμάσουμε αυτή τη λογική σε ένα λίγο πιο σύνθετο πρόβλημα, το οποίο επίσης έχει έντονα αριθμητικό χαρακτήρα. Τι σημαίνει αυτό? Αποτελεί πρόβλημα της αριθμητικής ανάλυσης. Θα το δείτε αναλυτικά όταν θα δουλέψετε στην περιοχή της αριθμητικής ανάλυσης. Είχα αναφερθεί ήδη στην μέθοδο του τραπεζίου την προηγούμενη φορά και προφανώς δεν την είχαμε δει αναλυτικά, γιατί το πρόγραμμα ήταν να τη δούμε σήμερα. Η μέθοδος αυτή βασίζεται στη λογική πως χωρίζουμε την περιοχή, το εμβαδό δηλαδή, άρα το ολοκλήρωμα που θέλουμε να υπολογίσουμε σε στοιχειώδη τραπέζια, υπολογίζουμε το εμβαδό του καθενός από αυτά, το άθροισμά του δε θεωρούμε και όντως είναι μια πολύ καλή προσέγγιση του πραγματικού εμβαδού. Εδώ λοιπόν στο συγκεκριμένο παράδειγμα το τραπέζιό μου έχει ως εμβαδό, το άθροισμα των πλευρών, ποιες είναι οι πλευρές, οι πλευρές είναι τη μή της f του α συν f του β, σωστά, το βλέπουμε εδώ ξανά το τραπέζιο, άρα είναι η πάνω και η κάτω πλευρά, f του α συν f του β επί το ύψος, το οποίο είναι β μειών α. Με αυτή την λογική θα δουλέψουμε, επιμερίζοντας το ολοκλήρωμα σε επιμέρους στοιχειώδια ολοκληρώματα. Για να το κάνουμε αυτό χωρίζουμε το διάστημα μέσα στο οποίο θέλουμε να υπολογίσουμε το ολοκλήρωμα, το διάστημα ολοκλήρωσης, το α β, σε n συγγνώμης ατμήματα που το καθένα έχει πλάτος β μειών α διανή. Άρα, εάν είναι 10 ατμήματά μου, τότε το α είναι β μειών α 10. Με αυτόν τον τρόπο λοιπόν καταλήγουμε σε μια σχέση που θέλω να την δούμε αναλυτικά. Το κόκκινο ίσως δεν ήταν η καλύτερη επιλογή εδώ. Αυτό που γράφω εδώ στην κόκκινη περιοχή είναι ότι το α είναι β μειών α διανή. Αλλά θέλει προσοχή το να αντιληφθούμε και τελικά το πόσο απλή είναι αυτή η σχέση ενώ φαίνεται πολύπλοκη. Δηλαδή, έχω ένα ολοκλήρωμα, σωστά. Τα ορισμένα ολοκληρώματα δεν μπορώ να τα υπολογίσω σπάζοντας το διάστημα ολοκλήρωσης επιμέρους και ολοκληρώνοντας κατ' ατμήματα. Γνωστή απλή μέθοδος. Άρα, μπορώ να ολοκληρώσω από το α έως α, μετά από το α συν α έως το α συν δύο α, από το α συν δύο α μέχρι το α συν τρία α, από το α τελικά ν πλην ένα α έως το β. Με αυτόν τον τρόπο τελικά η σχέση ολοκλήρωσης μπορεί να γραφεί με τον εξής τρόπο. Αν τα βάλω όλα αυτά κάτω. Η σχέση ολοκλήρωσης γράφεται ως το γινόμενο του β-α προς δύο ν, επί μια μεγάλη παρέθεση που έχει την τιμή της συνάρτησης στην αρχή του διαστήματος ολοκλήρωσης, εφ του α, την τιμή της συνάρτησης στο τέλος του διαστήματος ολοκλήρωσης, εφ του β, και ένα άθροισμα όρων που πολλαπλασιάζεται με το δύο, όπου ο κάθε όρος είναι η τιμή της συνάρτησης στο α συν αιτς, συν. Ποιο είναι αυτό το άθροισμα, η εφ του α συν αιτς, στο σημείο α συν αιτς, η εφ του α συν δύο αιτς, η εφ του α συν τρία αιτς. Άρα λοιπόν είναι η τιμή της συνάρτησης σε κάθε ένα από τα σημεία ολοκλήρωσης. Αν θέλουμε να κάνουμε την γραφική μας παράσταση, έστω ότι έχω μια καμπύλη, θέλω το ολοκλήρωμα από το σημείο α έως το σημείο β, άρα το εμβαδό κάτω από την καμπύλη αυτή, χωρίζω σε ας πούμε τέσσερα εις ατμήματα. Το κάθε ατμήμα λοιπόν έχει πλάτος αιτς, διότι το αιτς είναι β μιον α διά τέσσερα εδώ, όπως έχουμε γράψει. Και άρα η σκέση ολοκλήρωσης μου λέει ότι κοίταξε να δεις, ο κανόνος του τραπεζίου ουσιαστικά, μου λέει ότι κοίταξε να δεις, για να υπολογίσεις αυτό το εμβαδό, το μόνο που χρειάζεσαι είναι, την τιμή της συνάρτησης στην αρχή του διαστήματος ολοκλήρωσης, F του α, την τιμή της συνάρτησης στο τέλος του διαστήματος ολοκλήρωσης, F του β, θέλεις μετά την τιμή της συνάρτησης σε κάθε ένα από τα ενδιάμαστε σημεία, θέλεις, F του α'συν έτσι είναι αυτό λοιπόν, α'συν δύο έιτς, α'συν τρία έιτς, και τις αντίστοιχες τιμές της συνάρτησης εδώ. Γιατί, διότι με αυτόν τον τρόπο, προσθέτω την εμβαδά αυτών των στοιχειωδών τραπεζίων. Εδώ έχω τραπέζια. Και με αυτόν τον τρόπο έχω μια καλή προσέγγιση, διότι πάντοτε μου λείπουν τα τιμή αυτών των εμβαδού που είναι κάτω από την καμπύλη και πάνω από την πλευρά του τραπεζίου. Έτσι, μια καλή προσέγγιση αυτού του εμβαδού. Και βέβαια φαίνεται από τη γεωμετρική επικόνιση πως όσο πιο λεπτός είναι αυτός ο διαμερισμός, όσο πιο μεγάλη η διακριτοποίηση, πιο ισχυρή η διακριτοποίηση, όσο πιο μεγάλο είναι αυτό το ν, τόσο πιο πολύ πλησιάζει το εμβαδό του τραπεζίου, το πραγματικό εμβαδό. Άρα, όταν εμείς βλέπουμε ένα άθροισμα εδώ, ήδη μέσα μας χτυπούν τα καμπανάκια που λένε, ρε εσύ, αυτό για επανάληψη μου μυρίζει. Θέλω ένα άθροισμα το οποίο πρέπει να υπολογιστεί αρκετές φορές. Το χ, λοιπόν, εδώ, έτσι όπως το έχω γράψει, είναι το ασυνάγια επί αιτς, και προφανώς με αυτόν τον τρόπο μπορώ να υπολογίσω και τέτοιου είδους πολύπλοκης γεωμετρίας, εμβαδά, άρα και ολοκληρώματα. Γιατί μου χρειάζονται αυτές οι μέθοδοι, ελπιστώ ότι έχετε και τέτοιους ερωτήματα στο μυαλό σας, έτσι, διότι στην πράξη έχω την ανάγκη πολλές φορές να υπολογίσω ολοκληρώματα, των οποίων τις αναλυτικές σχέσεις δεν μπορώ να χρησιμοποιήσω, είναι δυσχερής η ολοκλήρωση. Και από τα μαθηματικά ένα, ήδη θα γνωρίζετε περιπτώσεις ολοκληρωμάτων όπου πραγματικά ο αναλυτικός οικολογισμός ήταν εξαιρετικά δυσχερής. Ειδικά ολοκληρώματα που εμπλέγουν παράξενες τριγωνομετρικές, με εκθετικές, με πολυονυμικές, όλες μαζί. Εκεί όπου δεν μπορώ να εφαρμόσω εύκολα κανέναν από τους τρόπους που έχω μάθει και που σε κάθε περίπτωση ο οικολογισμός είναι πολύ δύσκολος. Θα προσπαθήσουμε τώρα να το δούμε αυτό στη βάση ενός συγκεκριμένου παραδείγματος, έστω ότι έχω την συνάρτηση η μήτρου του x3-2x4 συν χ. Και θέλω να υπολογίσω το ολοκλήρωμα αυτής της συνάρτησης μεταξύ συγκεκριμένων σημείων α και β. Για να δούμε πώς θα προχωρήσω. Έχω τον κανόνα του τραπεζίου μου εδώ, ο οποίος ουσιαστικά μου λέει τι. Μου λέει ότι για κάθε συνάρτηση το integral, το ολοκλήρωμα μεταξύ των σημείων α και β της f του x, έχω μια συνάρτηση μιας μεταβλητής, είναι ίσο με το β-α προς δύο ν, όπου ν ο αριθμός των κλειμάτων στον οποίο θα χωρίσω το διάστημα αβ επί f του α συν f του β συν δύο φορές ένα άθροισμα του f του α συν rx για i από 1 έως δίπλυν 1. Αυτή είναι η σχέση που έχω και στη διαφάνεια και τη γράφω και στον πίνακα για να φαίνεται ίσως καλύτερα. Με αυτή τη σχέση λοιπόν κατά νου ας προσπαθήσω να φτιάξω έναν αλγόριθμο. Τι θέλω εδώ. Θέλω πραγμανός το α, το β, τα δύο όρια δηλαδή ολοκλήρωσης. Θέλω το ν, τον αριθμό των διαστημάτων στον οποίο θα χωρίσω το α β και από εκεί και πέρα θέλω μια διαδικασία υπολογισμού κατά βάση αυτού του αθρίσματος. Εδώ δεν βρίσκετε το όλο πρόβλημα. Τα υπόλοιπα, τί τώρα, το f του α και το f του β τα έχω. Εύκολα δηλαδή είναι μια εφαρμογή μιας σχέσης. Έστω λοιπόν ότι θέλω να ολοκληρώσω για το διάστημα από 0 έως π αυτή τη συγκεκμένη συνάρτηση. Την χ τρίτης είναι η f του χ ίση με το ζήνους της χ τρίτης μίον 2χ τετράγωνο και συχ. Έχω ως όρια ολοκλήρωσης, στο παράδειγμα αυτό το α και το π, χωρίζω σε 100 ίσα μέρη. Τι μπορώ να χρησιμοποιήσω αρχίζει λοιπόν εδώ να μπαίνει σε λειτουργία το σύνολο των γνώσεων που έχω από το MATLAB μέχρι τώρα. Εάν θέλω να χωρίσω ένα διάστημα σε ν ίσα μέρη, μπορώ να χρησιμοποιήσω την πολύ ωραία συνάρτηση, την lean space. Άρα χωρίζω ένα διάστημα από το line space προφανώς. Η lean space λοιπόν συντάσσεται ως εξής, αρχί τέλος διαστήματος και αριθμό τμήματος. Άρα θέλω να χωρίσω το διάστημα από 0 έως π σε 100. Θα μου δημιουργήσει αυτόματα ένα διάνυσμα χ που θα έχει όλες αυτές τις τιμές. Δεν χρειάζεται λοιπόν εγώ να ενδιαφερθώ στο να βρω, ναι πώς χωρίζω το διάστημα από 0 έως π σε 100 ίσα. Γίνεται αυτόματα. Το έχω λοιπόν στη διάθεσή μου. Επίσης ορίζω τη συνάρτησή μου και επειδή το χ μπορεί να είναι διάνυσμα, χρησιμοποιώ την τελεία έτσι. Άρα ορίζω τη συνάρτηση ευχή ίσον με ζήνους κτλ. Με αυτό τον τρόπο μπορώ να κάνω μια γραφική παράσταση. Να πλωτάρω δηλαδή τη συνάρτηση, συναρτήση του χ. Τι είναι η γραφική παράσταση, έχω βάλει και την γραμμή 0 απλά για να σας δείξω πού βρισκόμαστε. Και την έχω τονίσει με κύκλους. Έχει μια πολύ ενδιαφέρουσα μορφή αυτή η συνάρτηση. Και προφανώς το ολοκλήρωμά της θα είναι επίσης ενδιαφέρων από την έννοια πως αντιπροσωπεύει περιοχές διαφορετικές. Η μέθοδος λοιπόν του τραπεζίου εδώ μας λέει το εξής. Ότι για να προχωρήσεις θα πρέπει πρώτα απ' όλα, γιατί να σας το παρουσιάσω έτσι, θα ήθελα να σας ρωτήσω, βιάστηκα να πατήσω το next, πώς θα το κάνω αυτό. Αν σκεφτείγουμε τι θέλω εγώ να δημιουργήσω, έχω την περιοχή τιμών μου. Στο παράδειγμα αe0, το κάτω όριο ολοκλήρωσης, βp, το άνω όριο ολοκλήρωσης και έχω και εκατό τιμές ενδιάμεσα. Τις οποίες ξέρω πολύ καλά ποιες είναι, διότι τις έφτιαξα με τη χρήση της line space. Ο υπολογισμός αυτού του αθρίσματος μου λέει ότι, στην αρχή του διαστήματος θα υπολογίσεις την τιμή της συνάρτησης, f του α, στο τέλος του διαστήματος θα υπολογίσεις την τιμή της συνάρτησης, το f του β, και για όλα τα ενδιάμεσα σημεία θα υπολογίσεις την τιμή της συνάρτησης, αλλά θα πολλαπλασιάσεις επί δύο. Και για όλα τα ενδιάμεσα σημεία θα τα αθρίσεις. Τι θα αθρίσεις από το δεύτερο σημείο μέχρι το πρώτο τελευταίο. Αυτό θα αθρίσεις. Άρα λοιπόν, πώς θα δημιουργήσεις αυτό το αθρίσμα. Έχω διάφορους τρόπους, έτσι. Θα έλεγα να ξεκινήσεις ένα βήμα πιο πριν. Εμείς θέλουμε εκατό όρους εδώ, έτσι δεν είναι. Άρα εκατό όρους σε αυτό το τάθεσμα είναι ένας, δύο και η υπόλοιπη 98. Έτσι δεν είναι. Άρα λοιπόν, αφού θέλω εκατό όρους, και μάλιστα για να είμαι ακριβής εδώ, να τον είναι εκατό, θα ξεκινήσω από δύο. Δύο έως 99 πηγαίνει έτσι. Λοιπόν, αφού θέλω εκατό όρους, θέλω λοιπόν τελικά ένα διάνυσμα με εκατό μέρη, το οποίο μετά θα το χρησιμοποιήσω για να προσθέσω όλα τα στοιχεία του. Αυτό που θα κάνω πρώτα και αυτό που μπορώ να κάνω πάντα είναι να δημιουργήσω τις θέσεις αυτού του διανύσματος και να βάλω στη θέση τους εκατό άσους. Γιατί? Για να τους έχω ως συντελεστές της κάθε τιμής της συνάρτησης. Άρα λοιπόν, δημιουργώ αυτό το στοιχείο με τη χρήση της Swans και του λέω, δημιούργησέ μου ένα διάνυσμα το C με μία γραμμή και εκατό στήλες και γέμισέ το με άσους. Για ποιον λόγο το θέλω αυτό, για ποιον λόγο να το κάνω αυτό. Για να του πω αμέσως μετά ότι σε αυτό το διάνυσμα πάρε τα στοιχεία από τη δεύτερη θέση έως την πρώτα-ελευταία, ποιά αλλάξέ τα από ένα, κάν τα δύο. Γιατί το κάνω αυτό, διότι θέλω να δημιουργήσω ένα διάνυσμα με συντελεστές του γινωμένου και μετά να κάνω πολλαπλασιασμό στοιχείο προς στοιχείο. Δηλαδή, δεν έχω εδώ τις εκατό τιμές της συνάρτησης. Την F του α, την F του α όσο είναι το age, την F του δεύτερης θέσης, της τρίτης θέσης, της τέταρτης, της 99 θέσης και της εκατοστής θέσης. Εάν λοιπόν μπορούσα να δημιουργήσω και ένα σύνολο από 100 συντελεστές και πολλαπλασίαζα σημείο προς στιχείο, σημείο της τιμές της συνάρτησης μαθούς τους συντελεστές, όπου ο πρώτος και ο τελευταίος συντελεστής να είναι ένα και όλοι οι υπόλοιποι να είναι δύο, τότε δημιουργούσα όλο αυτό το άθροισμα, έτσι δεν είναι και μπορούσα να το υπολογίσω. Αυτό λοιπόν πάω να χτίσω αυτό το άθροισμα. Αρχικά δημιουργώ τους εκατό άσους, τους συντελεστές δηλαδή, τους αρχικούς και μετά για τις θέσεις δύο έως νύπλειν ένα, ουσιαστικά αντικαθιστώ με τη τιμή δύο. Του λέω δηλαδή ότι κοίτα ξαναδείς, στον πίνακα, στο διάνισμα σε που έχεις δημιουργήσει, οι τιμές από τη δεύτερη θέση μέχρι τη νύπλειν ένα θέση, άρα μέχρι την 99, είναι ίσως με δύο, διότι το διάνισμα σε είναι ένα διάνισμα γραμμή που έχει εκατό άσους. Σωστόν, τώρα θέλω να κρατήσω ως άσους τον πρώτο και τον τελευταίο στοιχείο και όλα τα υπόλοιπα να τα κάνω ίσα με το δύο. Και πώς ουσιαστικά θα κάνω τώρα αυτό το άθροισμα, πώς σας φαίνεται. Αυτό είναι το άθροισμά μας. Κύριοι, κυρίες, δεν προσέχετε και θα έχουμε θέματα. Το άθροισμά μας θα είναι αυτό. Για ποιον λόγο? Δεν θέλω να πολλαπλασιάσω ένα προς ένα τα στοιχεία της τιμής της συνάρτησης με τους αντίστοιχους συντελεστές. Έχω λοιπόν το διάνισμα, το τιμό της συνάρτησης. Ευτυχή. Και έχω και το διάνισμα των συντελεστών. Πολλαπλασιάζω στοιχείο στοιχείο σε τελεία επιευτυχή και προσθέτω τα στοιχεία αυτού του αθρίσματος. Έχω λοιπόν δημιουργήσει πιο πριν το διάνισμα των τιμών της συνάρτησης για κάθε ένα από αυτά τα 100 στοιχεία. Έχω δημιουργήσει το διάνισμα των συντελεστών. Πολλαπλασιάζω στοιχείο στοιχείο και αθρίζω όλα αυτά για να δημιουργήσω το άθρισμα. Και το άθρισμα όλο το πολλαπλασιάζω με β-α δυο ιστινοί. Ερωτήσεις ή σχόλοι εδώ. Παρακαλώ. Ναι, αν το κρατήσουμε έτσι. Άλλο γο με το πώς θα ορίσουμε το άλλαξε αυτό γιατί για κάποιους θα πρέπει να είναι ίσο με δύο. Τι εννοώ εδώ. Λέει ο συνάδεφός σας ότι το ιότ παίρνεται μέσα από ένα έως εκατό. Έτσι δεν είναι. Ουσιαστικά το πρώτο βήμα είναι αυτό. Άρα θα πρέπει να ξεκινήσει από ένα. Και να πάει μέχρι το βήμα το 1929. Σχόλια ή παρατηρήσεις εδώ. Κάτι άλλο. Ναι, ουσιαστικά, ας το γράψω εδώ λοιπόν καλύτερα. Έχω παρακάμψει ένα δήμα στη διαθάνεια. Αυτό που κάνουμε είναι το εξής. Έχουμε ένα διάνυσμα τιμών της συνάρτησης. Αρχικά λοιπόν λέμε ότι έχω εκατό τιμές μεταξύ του α και του β. Πώς το έκανε αυτό? X ίσον line space του α, β, ν. Με αυτόν τον τρόπο δημιούργησα τις εκατό τιμές μεταξύ του α και β συμπεριλαμβανομένων των άκρων. Άρα, όταν εγώ υπολογίζω την fΧ ίσομαι χ τελεία τρίτης μίον 2x τετράγωνο συν χ, έχω πάρει όλες αυτές τις εκατό τιμές και τις έχω βάλει στη σχέση της συνάρτησης. Υπολόγησα λοιπόν εκατό τιμές της συνάρτησης για κάθε ένα από αυτά τα στοιχεία μεταξύ του α και του β. Έτσι, λοιπόν, στην ευθεία των πραγματικών τώρα, για να προσπαθήσω να το απεικονίσω αυτό με κάποιον τρόπο, εφόσον έχω το α και το β ως όρια ολοκλήρωσης και τις εκατό τιμές του χ ενδιάμεσα, εδώ έχω, ας πούμε, από κάτω, ας το κάνω πίνακα διπλή σησόδου, χ και fΧ. Εδώ, λοιπόν, έχω το χ ίσον α και την fΧ, εδώ έχω χ ίσον β και την fΧ και ενδιάμεσα έχω όλες τις τιμές. Έτσι δεν είναι. Οπότε, λοιπόν, βάζοντας ως στοιχείο εισόδου στη συνάρτησή μου το διάνισμα των τιμών χ, παράγω αυτόματα, προφανώς, το διάνισμα των τιμών της fΧ. Έτσι, λοιπόν, έχω εδώ τα δύο διανύσματα που χρειάζομαι, το διάνισμα τιμών της fΧ και το διάνισμα τιμών των συντελεστών του αθρίσματος για να τα πολλαπλασιάσω στοιχείο προς στοιχείο. Έχω εκατό τιμές στη fΧ, έχω εκατό συντελεστές. Ο συντελεστής είναι ένα της πρώτης τιμής, ένα της τελευταίας και δύο όλων των υπολύπων. Δημιούργησα το διάνισμα των συντελεστών, δημιούργησα το διάνισμα των τιμών της συνάρτησης, τα πολλαπλασιάζω στοιχείο προς στοιχείο. Εφόσον το κάνω αυτό, μπορώ να υπολογίσω το αθρισμά τους και εφόσον το κάνω αυτό, μπορώ να πολλαπλασιάσω όλη αυτή τη τιμή με το β-α προς δύο στη ν και να υπολογίσω το ολοκλήρωμα. Το οποίο στη συγκεκριμένη περίπτωση προκύπτει 0,4985, έτσι προς χάρη του παραδείγματος. Σωστό, αλλά όμως, ξανά. Λοιπόν, πώς δουλέψαμε. Έχουμε τις εκατό τιμές του χ από χ-α έως χ-β, σωστό. Αυτές οι εκατό τιμές του χ βρίσκονται μέσα σε ένα διάνισμα στο διάνισμα χ, το οποίο δημιουργήθηκε με τη χρήση της line space. Άρα, είμαστε σίγουροι ότι με τη χρήση της line space δημιουργήσαμε ένα διάνισμα εκατό τιμών. Η μικρότερη είναι το α, η μεγαλύτερη είναι το β και ενδιάμεσα εκατό ισοδύναμα. Όλα αυτά είναι ισοδύναμα, είναι εκατό αυτές οι τιμές. Μέχρι εδώ, πιστεύω ότι δεν έχουμε κάποιο θέμα. Πιστεύω ότι το θέμα μας βρίσκεται μέσος μετά. Πώς υπολογίζω το διάνισμα τιμών της συνάρτησης, βάζω ως είσοδος τη συνάρτηση, όλο το διάνισμα τιμών του χ. Γι' αυτό και κάνω πράξεις στοιχείο προς στοιχείο. Άρα, ταΐζω, επιτρέψτε μου την έκφραση, την συνάρτησή μου με το διάνισμα τιμών του χ. Με αυτόν τον τρόπο, επειδή την ταΐζω με εκατό τιμές ισόδου, θα παραχθεί ένα διάνισμα τιμών της εφ. Με πόσα στοιχεία, εκατό επίσης. Έχω λοιπόν εκατό τιμές του χ. Πρώτο το α, τελευταίο το β, εκατό τιμές της εφ του χ. Πρώτο το εφ του α, τελευταίο το εφ του β. Άρα βρίσκονται και τα εκατό εδώ. Και μετά του λέω ότι, κοίταξε να δεις, αυτά τα στοιχεία της εφ του χ, εγώ θέλω να τα πολλαπλασιάσεις με συντελεστές. Το πρώτο στοιχείο, επειδή είναι το εφ του α με το 1, το τελευταίο με το 1 και το τελευταίο με το 2. Άρα θέλω να τα πολλαπλασιάσεις με ένα καινούργιο διάνισμα, το διάνισμα των συντελεστών, που είναι αυτό το σε που φτιάξαμε από την αρχή, που του είπαμε στην αρχή βάλε άσους και μετά αντικατέστησα το δεύτερο μέχρι το πρώτο τελευταίο με δύο. Γι' αυτό το λόγο το δημιουργήσαμε. Άρα η συνολική μας σκέψη πώς είχε τελικά, για να το δούμε. Είπαμε ότι έχω ένα άθρησμα. Όταν χωρίζουμε στα ελάχιστά του. Από τι αποτελείται το άθρησμα, αποτελείται από τιμές της F, 100 τιμές από Fα έως Fβ και όλα τα ενδιάμεσα. Έτσι? Αποτελείται από αυτές τις τιμές πολλαπλασιαζόμενες η κάθε μια με ένα συντελεστή, η πρώτη με το 1, η τελευταία με το 1 και οι ενδιάμεσες με το 2. Βλέποντας λοιπόν ότι έχω Ένα διάνισμα τιμών της συνάρτησης F και ένα διάνισμα συντελεστών αυτών των τιμών, συνειδητοποίησαμε ότι πρέπει να φτιάξουμε, να κατασκευάσουμε αυτά τα δύο διανείσματα. Για να φτιάξουμε το διάνισμα τιμών της F, χρειαζόμασταν το διάνισμα τιμών της X. Φτιάξαμε, λοιπόν, το διάνισμα τιμών της X, λέγοντας ότι θέλουμε, με τη χρήση της line space, τις τιμές του X που να ξεκινούν από α, να καταλήγουν σε β και να έχουν 100 ενδιάμεσα. Και να είναι συνολικά 100 ενδιάμεσες. Αυτές τις τιμές του X, τις δώσαμε ως είσοδο στην συνάρτηση. Με αυτό τον τρόπο δημιουργήσαμε το διάνισμα τιμών της συνάρτησης. Αυτές τις τιμές του διανείσματος τιμών της συνάρτησης, τις πολλαπλασιάσαμε στοιχείο προς στοιχείο με το διάνισμα των συντελεστών. Έτσι, φτιάξαμε το 1 επί εφ του α, το εφ του α, 1 επί εφ του β, εφ του β μέσα στην τετραγωνική αγγήλη και όλα τα υπόλοιπα, 2 επί το δεύτερο, συν 2 επί το τρίτο, συν 2 επί το τέτατο, συν 2 επί το πρώτο-ελευταίο. Και με αυτόν τον τρόπο, φτιάχνοντας αυτό το συνολικό άθρησμα με τη Σαμ, μπορέσαμε να υπολογίσουμε τον όρο μέσα στη τετραγωνική αγγήλη, τον οποίο κατόπιν πολλαπλασιάζουμε πολύ απλά με τον συντελεστή β'α προς διονύ, που προέκυψε από τη μέθοδο του τραπεζίου. Και έτσι κατορθώνουμε να κάνουμε τον συνολικό υπολογισμό. Είναι ο μόνος τρόπος που έχουμε σε επίπεδο MATLAB, προφανώς όχι, όπως θα έχετε υποπτευθεί, υπάρχουν έτοιμες συναρτήσεις, υπάρχουν έτοιμα διάφορα πράγματα. Άρα, κάτι που πρέπει να πούμε εδώ είναι ότι υπάρχουν πολλές έτοιμες συναρτήσεις που κάνουν αριθμητική ολοκλήρωση στο MATLAB. Μία από αυτές είναι η Quad, από το Quadratic. Φαρμόζει μία από τις πολλές μεθόδους ολοκλήρωσης που θα βρούμε στο MATLAB. Η σύνταξή της είναι συναρτήση ολοκλήρωσης μέσα σε παρένθεση ως ορίσματα. Το όνομα της συναρτήσης, είτε με χειριστήριο, είτε όσοι έχει σαν παράσταση μεταξύ απλών εισαγωγικών, εγώ επέλεξα αυτόν τον τρόπο γιατί δεν τον έχουμε ξαναδεί να τον δούμε σήμερα, κ, κάτω όριο ολοκλήρωσης, κ, αν όριο ολοκλήρωσης. Η απάντηση είναι 0.5040. Και αυτή είναι μια ακριβέστερη μέθοδος. Άρα λοιπόν εμείς προφανώς έχουμε κάποια διαφορά. Πού οφείλεται η διαφορά στο ότι είναι προσεγγιστική η μέθοδος του τεραπεζίου, έτσι δεν είναι. Πώς είναι αυτή η διαφορά για ν, για 100 επιμερήσεις του διαστήματος ολοκλήρωσης. Αυτή η διαφορά είναι ίση στη συγκεκριμένη περίπτωση με 0,055. Εάν κάνω τον υπολογισμό με 1000 επιμερήσεις, τότε η διαφορά γίνεται αισθητά μικρότερη. Και προφανώς εάν επιμερήσω ακόμη πιο αναλυτικά, βάλω 1 εκατομμύριο επιμερήσεις, η διαφορά θα γίνει απειροελάχιστη. Άρα η μέθοδος του τεραπεζίου προσεγγίζει μια πολύ πιο ακριβέστερη μέθοδο και τα βάση γίνεται ισοδύναμη της. Εξάλλου και σε MATLAB έχουμε διαθέσιμες και τη μέθοδο του τραπεζίου ως μέθοδο ολοκλήρωσης. Τι βλέπουμε λοιπόν και τι είδαμε μάλλον ως εδώ. Είδαμε ότι έχουμε δομές επανάληψης για υπολογισμό αθρησμάτων. Κάθε φορά, και αυτό θα ήθελα να περάσει ας το πούμε έτσι στην υπολογιστική μας συνείδηση, κάθε φορά που βλέπουμε ένα αθρησμά θα πρέπει να σκεφτόμαστε ότι εδώ μπορώ να το υλοποιήσω με τη χρήση δομών επανάληψης. Σε κάθε γλώσσα προγραμματισμού αυτός είναι κοινός κανόνας. Σε MATLAB τώρα υπάρχουν και άλλες δυνατότητες, δηλαδή εκτός από τις κλασικές δομές επανάληψης μπορώ να χρησιμοποιήσω κατάλληλες συναρτήσεις και αναλυτικούς αποδοτικούς, όπως τους λέμε τρόπους, διανισματικούς αν θέλετε, τρόπους υπολογισμού. Με αυτό τον τρόπο κάνω την ίδια δουλειά πιο γρήγορα και πιο αποτελεσματικά. Από εκεί και πέρα, αυτό που πρέπει να προσέξω πολύ είναι το προσδιορισμό της αρχής του βήματος και του τέλους. Εξατάται πάρα πολύ από τη φύση του προβλήματος. Σε προβλήματα αριθμητικής ανάλυσης έχω θέματα ακριβίας. Και η ακρίβεια εξατάται από τον αριθμό των βημάτων που επιλέγουμε ή της λογικής συνθήκης εντός ενός while, για παράδειγμα στη μέθοδο της διχοτόμησης. Θα θυμάστε ότι ανάλογα με το πόση ήταν η τιμή tolerance, άλλαζε και η ακρίβεια του υπολογισμού. Για όσους από εσάς είχατε τη δυνατότητα, με κάποιους, μπορέσαμε να το κάνουμε στο εργαστήριο, να πειραματιστείτε με την ακρίβεια του υπολογισμού, θα είδατε ότι η λύση απέχει πολύ όταν το tolerance είναι μικρό και γίνεται πολύ ακριβής όταν το tolerance είναι μεγάλο και γίνεται πολύ ακριβής όταν το tolerance γίνεται πολύ μικρό, όταν γινόμαστε δηλαδή πολύ αυστηρεί ως προς την ακρίβεια. Ως προς την ακρίβεια, επίσης, σε θέματα επαναλαμβανόμενων διαδικασιών, κανόνα τραπεζίου για υπολογισμό ολοκληρωμάτων, τα σημεία υπολογισμού είναι πολύ σημαντικά. Πόσα σημεία υπολογισμού θα χρησιμοποιήσω? Υπάρχει ένας κανόνας που λέει ότι για να αυξήσω την ακρίβεια, θα πρέπει να αυξήσω τα σημεία υπολογισμού. Μόνο που, όταν εμφανίζομαι, θα πρέπει να αυξήσω τα σημεία υπολογισμού, μόνο που, η αύξηση των σημείων υπολογισμού, έχει υπολογιστικό κόστος. Δεν γίνεται ερήνη. Όπως και στην καθημερινή ζωή, έτσι και στους υπολογισμούς, δεν υπάρχει δωρεάν γεύμα. Τι θέλω να πω. Είναι μια φράση που ίσως την έχετε ακούσει, ότι όπου βλέπεις ένα δωρεάν γεύμα, κάτι άλλο δεν είναι δωρεάν, ενώ νομίζεις ότι είναι. Όπου βλέπεις ότι ένας υπολογισμός είναι δωρεάν, κάτι άλλο δεν είναι. Αυτό σημαίνει ότι, εάν απλά αντικαθισθώντας τις επιμερίσεις από 100 σε 1.000, νομίζουμε ότι δεν κληρώνουμε κόστος, κάνουμε λάθος. Ο λόγος για τον οποίο δεν μας φαίνεται αυτό το κόστος, δεν εμφανίζεται, είναι πως στην κλίμακα των προβλημάτων, στην οποία δουλεύουμε, για παράδειγμα αυτά, ο χρόνος είναι ελάχιστος σε σχέση με τις υπολογιστικές δυνατότητες που έχουμε διαθέσιμες. Είχα σκεφτεί, πρέπει να σας πω και είχα μπει στον πειρασμό, να σας βάλω να δουλέψετε σε ένα προσωπικό υπολογιστή του 1988, γιατί μου φαίνεται ότι έχουμε έναν στο εργαστήριο που ακόμη δουλεύει. Αυτό σημαίνει εκεί ότι για παράδειγμα έδινες ή πληκτρολογούσες την εντολή dir, που σας είπα ότι είναι η εντολή που σας δείχνει το περιεχόμενο του καταλόγου και δεν έρχεται ως απαντάσταση αυτό που έχετε συνηθίσει να βλαμβάνετε, δηλαδή αυτό το πέταγμα στην οθόνη όλου του περιεχομένου, αλλά γίνεται ένα αργό scrolling, έρχονται σιγά σιγά, κλα κλα κλα, τα σκέφτεται. Άρα εκεί, αν τρέξατε μια τέτοια διαδικασία, δεν θα κάνει ένα δέκατο του δευτερολέπτου ή ένα εκατοστό ή ένα χιλιοστό, μπορεί να κάνει δύο δευτερόλεπτα, τρία, πέντε. Και σας το λέω αυτό για να θυμίσω ότι ένα από τα μεγαλύτερα επιτύγματα μηχανικής, η προσελήνωση, είχε υπολογιστές που είχαν πραγματικά ελάχιστη υπολογιστική ισχύ σε σχέση με αυτούς που έχουμε διοθέσιμους. Έτσι πρέπει να σκεφτόμαστε, να έχουμε διοθέσιμους ελάχιστοις τους υπολογιστικούς πόρους και όχι τους μέγιστοις. Πρέπει δηλαδή να εθίσουμε τον εαυτό μας στην οικονομία ως προς τις πράξεις και τους υπολογισμούς. Μόνο έτσι θα μπορέσουμε να αντιμετωπίσουμε με αυτά τα προβλήματα. Γιατί τώρα το λέω αυτό, διότι εάν για παράδειγμα δούμε κάποια προβλήματα με τα οποία ίσως ασχοληθείτε πριν το πέραστο σπουδόν σας ή και μετά, να δώσω παραδείγματα. Θέλετε να υπολογήσετε με πεπερασμένα στοιχεία τον εξοσκελετό ενός ανθρώπου. Τι είναι ο εξοσκελετός. Λιώσους έχουν δει την ταινία Alien, παλιά κλασική ταινία από τις καλύτερες του είδους. Η ροΐδα μπαίνει μέσα σε ένα ρομπότ, φορά ουσιαστικά ένα ρομπότ, με το οποίο χειρίζεται βάρη πολύ μεγάλα. Αυτή η κατασκευή πλέον είναι πραγματική. Αυτή η κατασκευή υπάρχει. Φτιάχτηκε αρχικά για στρατιωτική χρήση, με στόχο να τρέψει στον στρατιώτη του μέλλοντος να κουβαλά 200 κιλά εξοκλισμού στην έρημο, αλλά ευτυχώς χρησιμοποιείται τώρα για να αντιμετωπιστούν προβλήματα ανθρώπων που έχουν έντονη παραπληγία. Δηλαδή είσαστε ένας άνθρωπος που δεν μπορεί να κινήσει εύκολα χέρια η πόδια, αλλά που εγκεφαλικά μπορείτε να δώσετε εντολές σε αυτή τη μηχανή. Αυτή η μηχανή σας παίρνει αγκαλιά και αποφασίζει να περπατήσει για εσάς. Αναλαμβάνει να περπατήσει για εσάς, να ανεβεί σκαλοπάτια για εσάς. Περπατάτε για πρώτη φορά. Αυτή η μηχανή υπολογίζεται κάπως. Ο υπολογισμός αυτής της μηχανής συνεπάγεται ότι θα πρέπει να έχουμε 20, 30, 40 χιλιάδες στοιχεία σε έναν πίνακα. Αυτά τα στοιχεία μπορεί να χρειαστεί να αντιστραφούν, να αποτελέσουν στοιχείο μιας ολοκλήρωσης για την υπολογισμή του έργου, μιας δύναμης, έτσι. Είναι χρονοβόροι οι υπολογισμοί. Όταν λοιπόν στείνουμε ένα τέτοιο πρόγραμμα, δεν θα πρέπει να το σκεφτόμαστε, είναι ένα τέτοιο αλγόριθμο, δεν θα πρέπει να το σκεφτόμαστε στη λογική του, εντάξει μωρέ, και τι έγινε, από τα 10 σημεία πήγαμε στα 100 και από τα 100 στα 1.000. Δεν είναι αυτό η πρόκληση. Στα 10 εκατομμύρια στοιχεία πώς πας. Στα 100 εκατομμύρια στοιχεία τα καταφέρνεις. Στα 550 εκατομμύρια στοιχεία πώς πηγαίνει το πρόγραμμά σου. Θα αντέξει. Ο υπολογισμός θα ολοκληρωθεί ή θα κρασάρει στη μέση. Αυτό λοιπόν είναι κάτι που θέλω να το ακούσετε, για αυτό και σας το λέω, και θέλω να εθιστούμε σε τη διαδικασία. Άρα ολοκληρώνω και πάλι, θυμίζοντας το τι κάναμε, διότι η μέθοδος του τραπεζίου είναι σημαντικό παράδειγμα για να μπούμε σε αυτή τη διαδικασία. Έχουμε, επειδή ξέρω ότι για κάποιους ακόμη υπάρχει το ερώτημα, έχουμε λοιπόν τα όρια ολοκλήρωσης α και β, χωρίζουμε αυτό το διάστημα σε ν ή σα μέρη, έχουμε αυτοματισμού στο MATLAB, ευτυχώς, την line space άνεσης, line space το α, β, κ, ν, 100, 200, 500. Συνολικά λοιπόν έχω 100 τιμές, χ1 είναι η α, χ100 είναι η β. Συνηδητοποιώ ότι θέλω αυτές τις τιμές να τις βάλω ως είσοδο στην συνάρτηση για να υπολογίσω 100 τιμές της συνάρτησης, της f του χ. f του χ και χ. Βάζω ως είσοδο λοιπόν τις τιμές αυτού του διανύσματος στην f του χ και υπολογίζεται η f του α, η f του χ1, η f του χ99, η f του β. Αυτές τώρα τις τιμές της συνάρτησης, εγώ βλέπω στην σχέση υπολογισμού ότι θέλω να τις πολλαπλασιάσω ως εξίσμενες συντελεστές. Βλέπω και την τελευταία με τη μονάδα και όλες τις υπόλοιπες με το 2. Επειδή λοιπόν είμαι πλέον στον διανυσματικό τρόπο σκέψεις λέω ότι αυτό σημαίνει πως πρέπει να φτιάξω ένα διανύσμα που να έχει 100 στοιχεία όσες και οι τιμές της συνάρτησης, το πρώτο στοιχείο και το τελευταίο να είναι η μονάδα και τα υπόλοιπα να είναι 2. Πώς το κάνω? Κάνω χρήση της ONCE, της συνάρτησης MATLAB για να δημιουργήσω ένα διανύσμα με 100 μονάδες, 100 άσους και μετά του λέω άκου να δεις τα στοιχεία από 2, από τη θέση 2 μέχρι τη θέση 99, κάντε ίσα με το 2. Οπότε δημιουργώ αυτό εδώ το διανύσμα. 1, 2, 2, 2, 2, 2, 1. Γνωρίζω πλέον, διότι είμαι ακριβώς στο μέσο του εξαμίνου, έκτη εβδομάδα μαθημάτων σήμερα, ότι μπορώ να κάνω πράξεις στοιχείο προς στοιχείο. Άρα τι θέλω, να πολλαπλασιάσω κάθε στοιχείο του διανύσματος τιμών της συνάρτησης με κάθε στοιχείο αυτού του διανύσματος των συντελεστών. F του α' επί 1, F του επόμενου επί 2, F του 99 επί 2, F του β' επί 1. Πώς θα το κάνω? X, το διανύσμα τιμών της συνάρτησης, τελεία, επί σε, το διανύσμα των συντελεστών. Και θέλω όλο αυτό να το αθρίσω. Some, αυτού εδώ. Έληξε ο υπολογισμός μου. Διάλειμμα. Τρίτη ώρα με image processing. Είμαστε λοιπόν εδώ και πάλι την τρίτη ώρα με ένα διαφορετικό θέμα πάνω στην ίδια λογική βέβαια, στιμένο. Δεν ξέρω εάν έτυχε ποτέ να ασχοληθείτε με το να πειράξετε μια φωτογραφία. Βγάζετε φωτογραφίες, ενδεχομένως με κινητά ή με άλλες συσκευές. Προσπαθείτε για παράδειγμα να απαλείψετε τα κόκκινα μάτια όπως λέμε ή κάποια προβλήματα χρώματος, να αλλάξετε τη φωτεινότητα. Πολλές συσκευές, ακόμη και σε επίπεδο έξυπνων κινητών όπως λέγονται πλέον, είναι εξοπλισμένες με λογισμικό που σας δίνει τη δυνατότητα να κάνετε αυτού του είδους την απλή επεξεργασία. Έχετε σκεφτεί ποτέ πώς γίνεται η επεξεργασία αυτή. Σε τι συνίσταται για παράδειγμα το να εντοπίσεις και να αφαιρέσεις το έντονο κόκκινο που μπορεί να μπει και σε μια φωτογραφία εξαιτίας ότι τη βγάλατε με παράξενη γωνία ως προς τον ήλιο ή το έντονο κίτρινο ή το έντονο πράσινο. Τι σημαίνει το να μετατρέψετε μια φωτογραφία από έγχρωμη σε ασπρό-μαύρη στον ψηφιακό κόσμο πλέον, διότι δεν είμαστε στην εποχή του φιλμ μόνο, είμαστε στην εποχή όπου όλα τα στοιχεία αυτά είναι ψηφιακού χαρακτήρα. Πρέπει να πούμε, παρακαλώ, ότι οι εικόνες ως ψηφιακά αρχεία πρώτα απ' όλα, ίσως θα σας ξαφνιάσω αν πω, ότι είναι πίνακες. Κάθε εικόνα, είτε ακίνητη είτε κινούμενη είναι πίνακας. Άρα είναι ένα σύνολο από αριθμούς. Κάθε διαδικασία φιλτραρίσματος, επεξεργασίας και μεταβολής είναι μια διαδικασία πράξεων, υπολογισμών, που έχουν ως στοιχείο εισόδου την αρχική φωτογραφία και ως στοιχείο εξόδου την επεξεργασμένη φωτογραφία. Όταν λοιπόν εσείς θέλετε με τη χρήση ενός απλού φίλτρου για παράδειγμα, να μετατρέψετε μια έγχρωμη φωτογραφία σε ασπρό-μαύρη, να κόψετε το χρώμα, ή όταν θέλετε να εμφανίσετε το αρνητικό όπως λέμε της φωτογραφίας, τότε αυτό που κάνετε είναι κάποιες πράξεις, χωρίς να το συνειδητοποιείτε. Τα πράξεις της αναλαμβάνουν τα προγράμματα, το λογισμικό με το οποίο κάνετε αυτή την επεξεργασία. Ένα αρχείο εικόνας έγχρωμης έχει διάφορες μορφές και δομές, αλλά η βασική του λογική είναι η εξής. Αποτελείται από τρεις πίνακες. Ενώ ένας πίνακας αφορά το κόκκινο χρώμα, ένας πίνακας αφορά το πράσινο χρώμα και ένας πίνακας αφορά το μπλε χρώμα. Αυτό στην περίπτωση που η εικόνα μας ακολουθεί την χρωματική κωδικοποίηση RGB όπως λέμε, δηλαδή δημιουργεί όλες τις χρωματικές παραλλαγές που βλέπουμε, συνδυάζοντας τα τρία βασικά χρώματα red, green, blue, κόκκινο, πράσινο και μπλε. Προφανώς δεν είναι η μόνη χρωματική κωδικοποίηση που υπάρχει, είναι μία από τις πιο συνηθισμένες. Ενώ αντίστοιχα, εάν μιλούμε για ασπρό-μαύρη εικόνα, τότε μία από τις πιο συνηθισμένες κωδικοποίησης συνεπάγεται πως έχουμε έναν πίνακα, ένα επίπεδο και κάθε χρώμα αντιστοιχεί σε αποχρώσεις του γκρι. Έχουμε την απόλυτη έλλειψη της απόχρασης που είναι το λευκό και το απόλυτο αντίθετό του που είναι το μαύρο. Και ενδιάμεσα ένα σύνολο από αποχρώσεις. Είναι 64, είναι 128 συνήθως είναι αποχρώσεις, των οποίων ο αριθμός καθορίζεται από τον αριθμό, των bytes, της πληροφορίας που μπορούμε να κουβαλήσουμε. Άρα λοιπόν, αν ανοίξουμε ένα ασπρό-μαύρο αρχείο, θα δούμε ότι σε κάθε σημείο του, σε κάθε σημείο που αντιστοιχεί σε ένα λεγόμενο εικονοστιχείο όταν το δείχνουμε, αντιστοιχεί ένας ακέραιος αριθμός, το 38, που στην χρήμακα του γκρι μεταξύ 0 και 64 για παράδειγμα, η 128 μπορεί να είναι το ανοιχτό ή το σκούρο ή οτιδήποτε άλλο. Πηγαίνω όμως στις έχρωμες εικόνες γιατί είναι πολύ πιο συνηθισμένες πλέον. Και αναφέρομαι στο RGB πρότυπο γιατί είναι το πρώτο ή από τα πρώτα βασικά πρότυπα. Εδώ λοιπόν, εάν ανοίξουμε ένα αρχείο, τι σημαίνει ανοίξω, ανοίξω με τον editor, δοκιμάστε το αυτό, ανοίξτε ένα αρχείο το οποίο να έχει μια εικόνα με χρώμα. Θα δείτε ότι υπάρχουν αριθμοί, πως είναι διετοιταγμένοι, σε τρία επίπεδα ξαναλέω. Το πρώτο επίπεδο, ο πρώτος πίνακας αντιστοιχεί σε αποχρώσεις του Red, από 0 μέχρι 255. Πολύ ή λίγο Red, 256 δηλαδή συνολικά διαφορετικά τιμές. Το δεύτερο επίπεδο αντιστοιχεί σε αποχρώσεις του Green, του πράσινου. Το τρίτο σε αποχρώσεις του Blue. Το χρώμα που βλέπουμε σε ένα στοιχείο είναι ο συνδυασμός λοιπόν τριών στιμών, που μπορούμε να πούμε ότι είναι κάτι σαν το πόσο ποτήπος ως το Red, Green και Blue υπάρχει σε ένα συγκεκριμένο σημείο, για να δώσει Yellow για παράδειγμα, για να δώσει Κίτρινο, για να δώσει Mauve, για να δώσει Magenta, για να δώσει οποιαδήποτε άλλα από τα χρώματα που βλέπουμε. Οι δομές λοιπόν εντός ενός αρχείου μπορούν να φανούν με διάφορους τρόπους. Στο Matlab έχουμε πάρα πολλά εργαλεία για να επεξεργαστούμε εικόνα. Μπορούμε πρώτα απ' όλα να φορτώσουμε ένα αρχείο εικόνας και στατικής και δυναμικής και βίντεο μπορούμε να φορτώσουμε, αλλά δεν θα πάμε εκεί. Πώς το κάνουμε αυτό εάν για παράδειγμα το αρχείο μας ονομάζεται όπως αυτό που χρησιμοποιώ εγώ εδώ σαν παράδειγμα RGB.jpg, η κατάληξη jpg έχει να κάνει με το είδος της κωδικοποίησης που χρησιμοποιείται για να συμπιεστεί το αρχείο και να έχει μια μεταφερσιμότητα και συμβατότητα με συσκευές και με άλλα πράγματα επίσης. Εάν θέλω λοιπόν να φορτώσω τα αριθμητικά δεδομένα που αντιστοιχούν στην εικόνα που είδατε γιατί είναι αυτή συγκεκριμένη RGB.jpg τότε μπορώ να το κάνω αυτό χρησιμοποιώντας την ImageRead και να αναθέσω το περιεχόμενο σε μια μεταβλητή στην φώτο. Αν το κάνω αυτό θα δω ότι η φώτο δημιουργήθηκε και έχει ένα αριθμό γραμμών και στυλών και έχει τρία επίπεδα δηλαδή δημιουργήθηκε ένας πίνακας μη επί μη γραμμές επί στήλες επί τρία, ένας τρισδιάστατος πίνακας. Εάν λοιπόν τρέξω την size του φώτο, η size είναι η εντολή που μου δίνει αριθμό γραμμών, στυλών κτλ προς όλες τις κατευθύνσεις. Εδώ θα μπορούσα να μου απαντήσει για παράδειγμα τετρακόσια, τριακόσια και τρία, τετρακόσχες γραμμές, τριακόσχες στήλες και τρία επίπεδα. Είπαμε ένα επίπεδο αναχρώμα. Από εκεί και πέρα, αν τρέξω την N-dims, αριθμός διαστάσεων του πίνακα φώτο, θα μου απαντήσει τρία. Είναι τριών διαστάσεων ο πίνακας και βροφανώς μπορώ να έχω και πίνακες περισσότερων διαστάσεων, έτσι. Όχι μάλλον και σε ίματσες, αλλά δεν θα πάμε εκεί. Οπότε, λοιπόν, εάν θέλω για παράδειγμα να βρω ποια είναι η μικρότερη τιμή, αν πούμε ότι το 0 είναι η μικρότερη και το 255 μεγαλύτερη σε ένα ίματσ, ποια είναι η μικρότερη τιμή, μπορώ να κάνω χρήση των σχετικών συναρτήσεων MATLAB. Και εδώ βλέπετε δύο φορές την minimum, γιατί η minimum υπολογίζει το ελάχιστο αναστήλι. Οπότε, εάν εφαρμόσω την minimum σε έναν πίνακα 2x2, μην του πίνακα 2x2, θα μου δώσει ως απάντηση ένα διάνεσμα με το ελάχιστο της κάθε στήλης. Οπότε το ελάχιστο αυτόν των ελαχίστων, δύο φορές το ελάχιστο, είναι το απόλυτο ελάχιστο του πίνακα. Και βέβαια μπορώ να βρω το μέγιστο, ενώ μπορώ και να οπτικοποιήσω την εικόνα, αφού την φορτώσω, μπορώ να την οπτικοποιήσω, να την δώ σε MATLAB, κάνοντας χρήση της image, της εντολής image, και δίνοντάς της ως είσοδο το αρχείο με τα αριθμητικά δεδομένα που διαβάστηκαν ως περιεχόμενο του, στο παράδειγμα εδώ, RGB αρχείου. Οπότε λοιπόν, και αυτό σας το λέω διότι είναι μια πολύ χρήσιμη εφαρμογή, γι' αυτό και θα σας βάλουμε στη διαδικασία να δουλέψετε και σε ένα τέτοιο είδους πρόβλημα στο δεύτερο θέμα, που ήδη έχει αναρτηθεί από χθες το βράδυ, όπως είχαμε προγραμματίσει από την αρχή του εξαμίνου. Οι εικόνες είναι πίνακες. Οπότε λοιπόν, εάν αγαπάτε πολύ την φωτογραφία, την εικόνα και το βίντεο, τότε μπορεί να μην το γνωρίζετε, αλλά αγαπάτε πάρα πολύ τους πίνακες και την άλλη γευραπινάκων. Αν σας αρέσει να παίζετε με φίλτρα, να αλλάζετε χρωματικές κλίμακες, να σας αρέσει το design, τότε είστε οι άνθρωποι που χρησιμοποιείτε λογισμικό εξειδικευμένο, το οποίο υπάρχει είτε στην περιοχή του open source, άρα ελεύθερα διαθέσιμου κώδικα, χωρίς εμπορικά χαρακτηριστικά, είτε στην περιοχή του εμπορικού λογισμικού, αλλά σε κάθε περίπτωση, χωρίς να το ξέρετε ενδεχομένως, χρησιμοποιείτε άλλη γευραπινάκων. Κάνετε πράξεις με πίνακες. Οπότε, λοιπόν, κάθε φορά που πηγαίνετε, έχετε βγάλει μια φωτογραφία με το κινητό σας, και πηγαίνετε να εφαρμόσετε ένα φίλτρο του τύπου αφαίρεση κόκκινων ματιών ή σε μερικά προγράμματα, σε μερικά στοιχειελογισμικού, υπάρχει η δυνατότητα να πας και με το ποντί και να του πεις, σε αυτή την περιοχή, του χαράσεις ένα αέρια, αφαίρεσε το κόκκινο, αυτό που κάνετε είναι ότι εφαρμόζεται μια πράξη, επί ενός εκ των επιπέδων. Και μάλιστα ξέρετε τι κάνετε σε εκείνη τη φάση. Λέτε στο κώδικά σας, λέτε στο λογισμικό σας, πήγαινε, αφού είσαι στο red, green, blue, τι θέλω να αφαιρέσω, το ποσοστό του red. Πήγαινε στον πίνακα που αφορά το red, βρες την μεγαλύτερη τιμή και ξύρισέ την, αφαίρεσέ την, αντικατέστησέ την με μία άλλη τιμή, ώστε όταν θα ξαν' εμφανίσεις το χρώμα εκεί, να λείπει το ποσοστό του red, το μεγάλο, και έτσι να εμφανιστούν τα υπόλοιπα. Και επειδή είχε γίνει αντιληπτό ότι με αυτόν τον τρόπο η εικόνα αποκτά ψεύτικο χαρακτήρα, φεύγει το κόκκινο, αλλά τι μένει στη θέση του, δεν έχει χρώμα, το αντικαθιστάς με έναν άλλο συνδυασμό RGB, red, green, blue, σε εκείνο το σημείο, ένα συνδυασμό που ταιριάζει στον χρώμα ματιών, γι' αυτό μερικές εφαρμογές σας λένε, διαλέξτε τι μάτια έχει αυτός ο οποίος φωτογραφίσατε, καστανά, μπλε, πράσινα, και κάνει την αντικατάσταση. Είναι λοιπόν εκεί μία find αυτές τις τιμές, σε αυτά τα, για i από τόσο έως τόσο και j από τόσο έως τόσο, όλα αυτά τα κάνατε. Πιστεύω λοιπόν ότι εφόσον ξέρετε ότι τα κάνατε, θα έχετε την περίεργεια να μάθετε πώς γίνονται. Αυτό λοιπόν θα το υλοποιήσουμε και στα πλαίσια μιας από τις ασκήσεις, όπου θα σας δώσουμε μία εικόνα. Αυτή είναι μία εικόνα στη διαδρομή προς την κορυφή του Ολύμπου. Είναι η πετρόστρουγκα, σε πηγαίνει στο ωροπέδιο των Μουσών, για όσους γνωρίζουν. Και θα παίξετε λοιπόν με δεύτερους διαδικασίες. Στο δεύτερο θέμα και σε μία από τις ασκήσεις, θα σας ζητούμε ήδη να υπολογίζετε το αρνητικό κάποιαν εικόνα. Για να δούμε κάτι άλλο όμως, μια που είμαστε στην περιοχή των δομών και του διανισματικού ή αποδοτικού προγραμματισμού. Ας δούμε τι γίνεται όταν έχουμε πίνακες, σύνηθες και αυτό, όπου κάποια στοιχεία είναι not a number, δεν είναι αριθμητικού τύπου. Αυτό το «ναν» τι σημαίνει, δεν είναι αριθμή, είναι κάτι άλλο. Προέκτησαν ως λάθη, ως αποτέλεσμα πράξεων που οδήγησαν σε αυτό το στοιχείο. Εδώ έχω λογικούς δείκτες και μια κατηγορία συναρτήσεων της γενιάς του, «is none», «is any», «is prime», «is…», δεν ξέρω και εγώ τι, όπου το αποτέλεσμα είναι true ή false. Υπάρχει η «none», τότε η «is none» επί του πίνακα είναι true στο σημείο όπου υπάρχει το στοιχείο με τη μη «none». Και για να το κάνουμε συγκεκριμένο, να σας πω ότι προφανώς σε κάποιες πράξεις, ας πούμε εδώ, αν ο υπολογιστής σας αντιμετωπίσει την περίπτωση της διαίρεσης με το μηδέν, παράγει το «infinite», άπειρο. Αν βρεθεί απέναντι στην ανάγκη του να υπολογίσει το μηδέν δια μηδέν, τότε παράγει το «none», «not a number», μειωριζόμενο αριθμητικό στοιχείο. Όταν κάνουμε πράξεις με πίνακες, δεν είναι καθόλου απίθανο να βρεθούμε μπροστά σε τέτοιες περιπτώσεις. Ιδιαίτερα εάν κάνουμε πράξεις με πίνακες τον οποίο τα στοιχεία προέρχονται από μετρήσεις, διότι κάποιες μετρήσεις μπορεί να μη λειτούργησαν, κάποια στοιχεία μπορεί να μην καταγράφηκαν ή να καταγράφηκε τη μη μηδέν αντί της πραγματικής. Εκεί, λοιπόν, τι μπορούμε να κάνουμε. Πώς μπορούμε να εντοπίσουμε τα στοιχεία αυτά σε έναν διαάνισμα, έστω ένα πολύ απλό διαάνισμα, το μιον 2 μιον 1 μηδέν, ένα 2 μάλιστα. Και το β μόνο με μηδενικά. Η διέρεση του β με το α δίνει ένα αποτέλεσμα ένα στοιχείο. Ποιο το άθρησμα των στοιχείων του β που δεν είναι 1, του 2α που δεν είναι 1, άρα εδώ δίνουμε ένα πολύ απλό πρόβλημα. Έχω το διαάνισμα β. Διερώ τα στοιχεία του στοιχείο προς στοιχείο με το διαάνισμα α. Και θέλω να υπολογίσω τα άθρησμα μόνο των στοιχείων αυτών που δεν είναι 1. Πώς θα το κάνω? Πρέπει να ελέγξω ποια είναι 1, να τα αφαιρέσω από το άθρησμα και μετά από το αριθμό των στοιχείων και το υπόλοιπο, ό,τι μείνει, να το χρησιμοποιήσω για να θρήσω τα περιεχόμενά του. Έχω διαανισματικό τρόπο για να το κάνω αυτό, βεβαίως. Και ουσιαστικά μπορώ να του πω βρες μου τα σημεία όπου υπάρχει ν, βγάλ τα από τη μέση, κράτα τα υπόλοιπα και κάνε την πράξη πια, της άθρησης, μότι σου μείνε. Μετά το ξεσκαρτάρισμα, επιτρέψτε μου να πω. Άρα λοιπόν, βρες, έχω την εις ν. Η εις ν, τι κάνει, πηγαίνει και βρίσκει τα στοιχεία τα οποία δεν είναι μηδενικά. Για να δούμε ποιο είναι το αποτέλεσμα του β προς α, β τελεία διά α. Το αποτέλεσμα είναι μηδέν διαμοίων δύο, μηδέν. Συμφωνούμε? Μηδέν διαμοίων ένα, μηδέν. Μηδέν δια μηδέν, μηδέν δια ένα, μηδέν. Μηδέν δια δύο, μηδέν. Συμφωνούμε σε αυτό? Είναι στοιχείο προς στοιχείο. Τα στοιχεία του β για τα στοιχεία του α. Άρα μηδέν διαμοίων δύο, μηδέν, μηδέν, ναν, μηδέν, μηδέν. Οπότε λοιπόν η εφαρμογή της εις ναν επί αυτού εδώ του πίνακα, τι θα παράξει, η εις ναν είναι μια συναρτηση που παράγει true ή false, έτσι δεν είναι. Η εφαρμογή της εις ναν θα παράξει το εξής. Η εις ναν, όχι. Η εις ναν, ούτε. Η εις ναν, εδώ. Η εις ναν, εδώ. Η εις ναν, εδώ. Και βέβαια εδώ έχω κάνει ένα λάθος εγώ, το οποίο ακόμη δεν είναι να το εντοπίζετε. Εγώ θέλω τα στοιχεία που είναι ναν. Όχι, εγώ θέλω τα στοιχεία που δεν είναι ναν. Δεν είναι ναν. Όχι ναν. Θέλω λοιπόν το σαμ αυτόν που δεν είναι ναν. Το οποίο εδώ βέβαια δεν είναι τίποτα, είναι μηδέν. Η εις ναν θα πάει και θα πει να που έχει εις ναν, οπότε αν ζητήσω τα υπόλοιπα, τότε έχω το αποτέλεσμα. Καλύτερα θα το δείξουμε σε ένα άλλο παράδειγμα αυτό, όπου θέλουμε, και αυτό είναι αρκετά σύννηθες, να εντοπίσουμε, να αποφανθούμε ως προς το αν ένας πίνακας έχει μη μηδενικά στοιχεία και να κάνουμε κάποιες πράξεις με αυτά. Άρα έχουμε τον σε που βλέπετε εδώ ως παράδειγμα. Η ένη μας δείχνει το πού υπάρχουν μη μηδενικά και το πού υπάρχουν μη μηδενικά στοιχεία. Είναι μια πολύ χρησιμερνητολή για αυτή την ιστορία. Φερνόμασταν και το πλήθος των μη μηδενικών στοιχείων. Πόσα το βρίσκαμε εδώ. Πόσα δηλαδή είναι τα στοιχεία του σε, τα οποία δεν είναι μηδέν. Καμιά ιδέα. Ή αυτό για παράδειγμα. Λέει ο συναδεφόσος για να τις βάλουμε κάτω αυτές τις ιδέες. Ναι, ναι. Άρα λέμε εδώ ότι έχουμε τον πίνακα σε, τον γράφο, ο οποίος είναι διάνησμα μάλλον σε, μηδέν μηδέν ένα δύο. Και έστω ότι ενδιαφερόμαστε για το πλήθος των μη μηδενικών στοιχείων. Πόσα είναι μη μηδενικά οι ιδέες. Μία άποψη λοιπόν είναι να του πούμε. Άρα, πες μου το αντίθετο. Length του σε, που είναι διαφορετικό από το μηδέν, έτσι. Όχι ίσον με το μηδέν. Αυτό. Για να δούμε πρώτα απ' όλα τι παράγει αυτή η σύγκριση. Έτσι, να κάνουμε δηλαδή την άσκηση αυτή. Η όχι ίσο με το μηδέν. Πες μου. Οπότε λοιπόν η όχι ίσο με το μηδέν κάνει τη σύγκριση του ποια δεν είναι μηδέν, το αποτέλεσμα αυτής της σύγκρισης. Επιτρέψτε να το γράψω πιο κάτω. Ή ακόμη καλύτερα δίπλα. Length του σε, διάφορο από το μηδέν. Ας δούμε πρώτα λοιπόν το σε διάφορο από το μηδέν τι θα παράξει. Είσαι διάφορο από το μηδέν. Ναι. Είσαι διάφορο από το μηδέν. Όχι. False. Διάφορο από το μηδέν. Όχι. Διάφορο από το μηδέν. Ναι. Διάφορο από το μηδέν. Ναι. Άρα η απάντηση του σε διάφορο από το μηδέν, μάλλον ο υπολογισμός του σε διάφορο από το μηδέν είναι ένα διάνισμα. Αυτό εδώ. Οπότε αν θέλουμε να βρούμε τώρα το πόσα είναι τα στοιχεία που είναι διάφορα από το μηδέν, μπορούμε να κάνουμε το sum αυτού. Αυτό που έκανα και εγώ εδώ πέρα. Το sum του σε διάφορο από το μηδέν. Πίσω είχα διένα. Ο ογγρι παρακαλώ. Θα μπορούσαμε να χρησιμοποιήσουμε την find, έτσι. Άρα να χρησιμοποιήσουμε find εδώ. Θα μπορούσαμε να χρησιμοποιήσουμε πολλές προσεγγίσεις. Αυτό που θέλω να θυμίσω είναι ότι πάντοτε αυτές οι συναρτήσεις παράγουν ένα σύνολο απολογικούς δίκτες. True, false, true, false, true, false. Τους οποίους μπορούμε να χρησιμοποιήσουμε μετά, είτε για να βρούμε απευθείας τα στοιχεία, είτε για να αθρίσσουμε τον αριθμό τους και τα λοιπά. Εδώ τώρα. Γράφω, pay attention, διότι. Για να δούμε. Θέλω να υπολογίσω τον μέσο όρο διανύσματος. Σβήνω λοιπόν. Άλλο είδους τώρα παράδειγμα αυτό. Άλλο παράδειγμα μάλλον. Έχω ένα διανύσμα. Το σε ίσον, μάλλον δε. Το δε ίσο με ένα, δύο, τρία, ναν. Ένα, δύο, τρία, ναν. Είναι πίνακας ουσιαστικά. Πέντε, έξι, εφτά, οκτώ. Πέντε, έξι, εφτά, οκτώ. Έχω αυτόν τον πίνακα. Που μου προέκρυψε ως αποτέλεσμα ενός υπολογισμού μεταξύ πίνακων. Μάλιστα. Και ενδιαφέρομαι να βρω την μέση τιμή των στοιχείων που προφανώς δεν είναι ναν. Άρα πρέπει να εντοπίσω τα στοιχεία που είναι ναν. Να τα βγάλω από τον υπολογισμό της μέσης τιμής και να υλοποιήσω τον υπολογισμό της μέσης τιμής για ότι μου περισσεύει. Αυτά δεν είναι τα βήματά μου. Πώς θα μπορούσα να το κάνω. Άρα πώς θα υπολόγιζα τον μέσο όρο μόνο αυτόν που δεν είναι ναν. Πρώτα απ' όλα θέλω να τα εντοπίσω αυτά που είναι ναν. Άρα, να δούμε μια λογική. Με τη βοήθεια μίας δομής επανάληψης, αν δουλεύαμε συμβατικά, έτσι? Να το δούμε έτσι. Με τη βοήθεια μίας δομής επανάληψης, θα σάρωνα όλο τον πίνακα στοιχείο προς στοιχείο, σωστά? Θα σάρωνα σημαίνει ότι θα έλεγα κάθε στοιχείο του. Για κάθε στοιχείο μετά θα έπρεπε να εντοπίζω αν είναι ναν ή όχι. Άρα θα έπρεπε να χρησιμοποιώ και μια δομή ελέγχου. Είσαι ναν ή δεν είσαι. Αν δεν είναι ναν, θα έπρεπε να μετρώ, να αυξάνω τιμή ενός μετρητή, να λέω να και πρώτο που δεν είναι ναν, να και το δεύτερο, να και το τρίτο, να και το τέταρτο, να και το οχτώ είναι πόσα είναι τα μηνάν, εφτά εδώ και το έβδομο και να αθρήσω μόνο τα στοιχεία που δεν είναι ναν και να διαρρέσω με το πλήθος των στοιχείων. Να είναι πρόγραμμα αυτής της μορφής. Ξανά, του λέω, έχεις τον πίνα και αντέ. Έστω γνωστός, ωραία. Ξεκίνα γι'άει από ένα έως δύο. Πόσες γραμμές έχει, δύο. Ξεκίνα για στείλες από ένα έως πόσες έχει, τέσσερις. Και εάν είσαι ναν, εμφάνισέ το στην οθόνη. Απόφαση της δική μου, έτσι, απλά για να κάνει κάτι που θα έχει αποτέλεσμα. Διαφορετικά, προσέθεσε στον S, στο άθρισμα δηλαδή, την προηγούμερη τιμή του αθρίσματος στην την τιμή του στοιχείου που βρίσκεται σε αυτή τη θέση και που δεν είναι ναν. Και επίσης, αύξησε την τιμή του μετρητή count κατά ένα. Δηλαδή, ξεκινώ και σαρώνω στοιχείο προς στοιχείο τα περιεχόμενα του πίνα καν τε. Για I ίσον 1, για την πρώτη γραμμή, θα πάρω όλα τα J από ένα έως τέσσερα. Άρα, για I ίσον 1, το τρέχω τώρα. S το I, 1. Παρακαλώ, ο μπλε να είναι το I. Παίρνεις τιμές από ένα έως δύο, έτσι. Και ο μαύρος εδώ να είναι ο J. Άρα, τι τιμή συναντάμε πρώτα? Η πρώτη συτιμή ποια είναι? Άρα, ο I μας λέει, παίρνω την τιμή 1. Ο J μας λέει, την τιμή 1. Ωραία. Είμαι εδώ. Κάνω τον λογικό έλεγχο. Is now to di, είναι true ή false? False. Έτσι. Άρα, δεν θα τρέξει το display. Θα πάει παρακάτω. Else. Κάποιος θα ήθελα να κάνει το άθρυσμα. Άθρυσμα. Ο κύριος εδώ. Άθρυσμα. Έχεις τιμή προηγούμενη? Είμαστε στην πρώτη επανάληψη. Έχεις προηγούμενη τιμή. Εσύ βλέπεις μπροστά σου. Είμαι το S. Και η νέα μου τιμή είναι η παλιά τιμή του S συν η τιμή του στοιχείου. Έχεις παλιά τιμή του στοιχείου. Έχεις παλιά τιμή του S. Όχι. Άρα, είσαι συντιμή στοιχείου. 1. Θα θυμάσαι εσύ ότι πήρε την τιμή 1. Σωστά. Και η count. Κάτι εδώ. Count. Θα αντιλέξω μόνο τις γραμμές. Count. Αυτός που κοιμάται λοιπόν είναι η count. Πάρα πολύ ωραία. Είσαι η μεταβλητή count. Άρα. Η count ξεκινά και μετρά. Είσαι η νέα τιμή 1. Αλλάζεις ως i. Αλλάζεις ως j. Ποια είναι η νέα σου τιμή. Είσαι η νέα τιμή 2. Γίνεσαι. Το προηγούμενο. Τι είχες πιο πριν. 1. Άρα γίνεσαι 3. Η count γίνεται. Είσαι το δεύτερο στοιχείο. Γίνεσαι 2. Έτσι. Με αυτόν τον τρόπο. Εδώ θα πας στο επόμενο. Οπότε θα έχεις πάρει τη τιμή 1 συν 2 συν 3. Έξι ως άθρησμα. Είμαστε στη στιγμή όπου το a είναι 1 και το j είναι 3. Και εδώ είμαστε στη στιγμή όπου το a είναι 1 και το j είναι 4. Εδώ όμως ο λογικός έλεγχος θα είναι true ή false. True. Άρα δεν θα πάει στο δεύτερο σκέλος στο else. Θα μείνει στο πρώτο και θα εκτελέσει ότι υπάρχει μετά. Θα δείξει να. Και μετά θα πάει στο επόμενο j. Έχεις εσύ ως j άλλη τιμή. Τελείωσες. Άρα πετάς το μπαλάκι στο i. Εσύ ως i έχεις άλλη τιμή. Πηγαίνεις ίσως στο 1. Πας στο 2. Οπότε πλέον αλλάζεις γραμμή. Και ξεκινάει πάλι η ίδια διαδικασία. Σε αυτόν τον τρόπο αθρίζονται όλα τα στοιχεία. Και στο τέλος είμαστε σίγουροι ότι η s έχει ως περιεχόμενο το σύνολο. Το άθρυσμα δηλαδή όλων των στοιχείων που δεν είναι 1. Ενώ η count έχει ως τιμή τον αριθμό των στοιχείων που δεν είναι 1. Άρα αν διαιρέσω την s με την count έχω τη μέση τιμή που θέλω. Σωστόν. Αυτό είναι το άθρυσμα. Πιο πριν ή πιο μετά ή οτιδήποτε. Α, εδώ στη διαίρεση. Βεβαίως, για να το κάνουμε πλήραιστρο. Γιατί θα μπορούσαμε να πέσουμε στην περίπτωση πίνακο που δεν έχω κανένα. Πολύ σωστό. Ότι κανονικά θα έπρεπε να κάνουμε αυτό τον έλεγχο. Είμαστε λοιπόν σε αυτή την απλή μορφή. Α, εμείς πάμε να το κάνουμε απολύτως συμβατικά. Τώρα για να δούμε τι άλλο μπορούμε να κάνουμε. Μπορούμε επίσης να χρησιμοποιήσουμε πάλι αυτά τα ίδια στοιχεία. Πρώτα απ' όλα, να αλλάξουμε λίγο. Να δούμε πώς μπορούμε να εμπλουτίσουμε. Να επιτρέψετε μου να πω εξυγχρονίσουμε τον κωδικά μας. Αυτό υπάρχει και σε φόρτραν. Μπορείς να μιλήσεις για το size. Άρα λοιπόν του λέω, άκου να δεις. Εγώ δεν θέλω να τρέχεις μόνο για το συγκεκριμένο παράδειγμα D. Θέλω να τρέχεις για οποιοδήποτε διδιάστατο πίνακα. Αφού την κάνω που την κάνω ρε παιδιά τη δουλειά. Γιατί να παιδεύομαι και να την ξανακάνω την επόμενη φορά που θα χρειαστώ μια ίδια διαδικασία. Να την κάνω όσο πιο γενική γίνεται. Άρα λοιπόν το I θα είναι από 1 έως το size του D στην πρώτη διάσταση. Πόσες γραμμές έχεις? 2. Άρα το size του D,1 σημαίνει. Δείξε μου ποιά είναι. Ποιο είναι ο αριθμός των στοιχείων που έχει την πρώτη διάσταση. Άρα ο αριθμός των γραμμών. Δεύτερη διάσταση, αριθμός των στυλών. Άρα για I από 1 έως το size του D προς την πρώτη διάσταση. Άρα για I από 1 έως το αριθμό των γραμμών του D. Όποιος και είναι. Άρα για I από 1 έως το αριθμό των στυλών του D. Αν είχα τρεις διαστάσεις, η επόμενη θα ήταν το K. Και πάει λέγοντας. Εάν εις ναν τότε display, κτλ. Έτσι λοιπόν τουλάχιστον εξυγχρονίσαμε κάπως τον κώδικά μας. Τον κάναμε γενικευμένου τύπου για κάθε πίνακα δύο επί δύο. Τώρα άλλη λύση. Έχουμε από τη μία την λύση στη βάση δομών. Και τώρα για να δούμε τι άλλα καλούδια έχουμε στη διάθεσή μας από πλευράς υπολογιστικού περιβάλλοντος MATLAB. Μπαίνουμε λοιπόν στα χαρακτηριστικά του MATLAB αμυγός. Μέχρι τώρα ό,τι κάνουμε έχει νόημα και ισχύ για κάθε γλώσσα. Με τις παραλεγές που είπαμε. Στην Φόρντεραν αντί για τη Φόρν... Έχουμε την do και πάει λέγοντας, έτσι. Άλλη λύση πρώτα απ' όλα. Εντάξει ο μέσος όρος είναι S προς count. Αλλά η count είναι αυτή εδώ. Δηλαδή, i is none του de, τι θα μας δώσει? Προσοχή. i is none. Ποια είναι η λογική μας εδώ? Πόσα είναι τα στοιχεία τα οποία δεν είναι none? Αυτό δε ρωτάμε. Ε, η συνάρτηση is none αυτό δεν κάνει. Και βάζει στη θέση των στοιχείων που είναι none την λογική τιμή true, άρα 1, στη θέση των στοιχείων που δεν είναι none, την λογική τιμή 0. Άρα, αν ρωτήσω το ανάποδα, τι δεν είναι none? Το αποτέλεσμα λοιπόν του, όχι none, όχι i is none, του de, ποιο θα είναι? i is none. Όχι none. Είναι true. Όχι none. Βέβαια, δεν είναι none. Δεν είναι none. Είναι none. Είναι none. Δεν είναι. Δεν είναι. Δεν είναι. Δεν είναι. Αυτό λοιπόν είναι το αποτέλεσμα του άρνηση i is none. Όχι i is none. Με αυτό τον τρόπο, η όχι i is none δημιούργησε έναν πίνακα στοιχείων ίσων, ίδιο πρώτα απ' όλα, με τον αρχικό, με στοιχεία προφανώς ίσα, αριθμητικά με τα στοιχεία του αρχικού, όπου όμως έχει άσους μόνο εκεί που δεν υπάρχουν none. Άρα, αν αθρίσω όλα αυτά τα στοιχεία, τελείωσα. Και χρησιμοποιώ το διπλό άδειο, γιατί αν του πω some αυτού του πίνακα, έστω ότι αυτός είναι ο πίνακας σε, σε ίσον, σε ίσον is none του δε. Τότε ο πίνακας σε, που ότι θέλετε το μήν του, μήν του σε, θα ήταν το μήν ή το σάμ, αν θέλετε, του σε. Θα ήταν το σάμ ανά διάσταση. Εγώ θέλω το συνολικό άθρησμα. Το sum to sum των στοιχείων. Με αυτόν τον δρόμο βρήκα τον αριθμό των στοιχείων του δε, που δεν είναι μη δεν. Με τον ίδιο τρόπο δουλεύει όχι μόνο η σάμ, η μήν ως μέση τιμή, η μήνυμου, η μάξιμου, δουλεύουν αναδιάσταση. Πώς μπορούμε να δείξουμε σε όλον τον πίνακα, αντί να του πούμε ότι θέλω την σάμ του σάμ του σε, αν θέλω να δείξω σε όλον τον πίνακα, η γραφή είναι άθρησμα όλων των στοιχείων του σε. σε του άνω κατωτελεία. Έτσι μπορώ να βρω την count. Και προφανώς με ανάλογο τρόπο μπορώ να βρω την sum, το άθρησμα. Ότι το άθρησμα είναι το άθρησμα των στοιχείων, προσέξτε τι κάνω εδώ όμως, χρησιμοποιώ την όχι-ναν ως πίνακα εισόδου στην τε. Τι σημαίνει κάτι που θεωρώ ότι ακόμη θα πρέπει να σας μπερδεύει και προσπαθώ να το ξεκαθαρίσω. Δεν θα έπρεπε να σας μπερδεύει θέλω να πω, αλλά θεωρώ ότι ακόμη σας μπερδεύει. Μπορώ, έστω ότι αυτό τον πίνακα εγώ τον βαφτίζω σε. Ωραία. Δηλαδή, ξαναλέω ότι αυτός ο πίνακας είναι ο σε και είναι το αποτέλεσμα του όχι-ναν, του ντε. Αυτός είναι ο πίνακα σε. Μπορώ να ζητήσω τον ντε του σε. Δηλαδή, ο πίνακα σε τι έχει, έχει άσους εκεί όπου τα στοιχεία δεν είναι ναν. Μπορώ να χρησιμοποιήσω τον πίνακα σε ως πίνακα δικτών για τον πίνακα ντε, αφού έχουν τον ίδιο ρυθμό, βεβαίως. Και ουσιαστικά του λέω, δώσε μου το στοιχείο αυτό. Ποιος είναι ο ντε του σε. Ο ντε του σε είναι ένας πίνακας που θα έχει μόνο τα στοιχεία στη θέση των άσων. Το 1, 2, 3, τίποτα. Καινό εδώ, 0, 5, 6, 7, 8. Άρα μπορώ προφανώς, θα θυμάστε ότι το έχουμε πει, το ξαναλέω, μπορώ να χρησιμοποιήσω διάνισμα ως στοιχείο εισόδου δικτών για άλλο διάνισμα. Και αυτό μπορούσε να γίνει, έτσι, και μπορούσαμε να κάνουμε και κάτι άλλο. Ό,τι συζητούμε μέχρι τώρα δεν έχει νόημα στο MATLAB, διότι υπάρχει η NAN mean. Έτοιμη συνάρτηση που υπολογίζει τη μέση τιμή πίνακων για όλα τα στοιχεία που δεν είναι NAN. Θα μου πείτε γιατί παιδευόμαστε. Διότι, ναι, υπάρχουν πάρα πολλές ευκολίες στο MATLAB, αλλά κάποια πράγματα δεν είναι τόσο ορατά. Και, εάν αντέχετε ένα ακόμη, έτσι, τότε θα ήθελα να σας δείξω και το εξής, πολύ απλό, έστω πίνακας D με θετικούς και αρνητικούς. Έχω έναν μεγάλο πίνακα δύο διαστάσεων, έτσι. Δεν προσδιορίζει από τον αριθμό των στοιχείων. Δεν τον ξέρουμε καν αναδιάσταση. Ποια είναι η μέση τιμή όλων των θετικών? Να το σκεφτούμε λίγο, θα ήθελα να το σκεφτούμε πριν απαντήσουμε. Προσέξτε, ο πίνακας είναι δύο διαστάσεων. Θέλουμε τη μέση τιμή μόνο αυτών που είναι θετικά στοιχεία. Θα σκεφτούμε πρώτα, θα χρησιμοποιήσω αυτή τη λογική, δείκτες που προκύπτουν από έναν λογικό έλεγχο. Τι θέλω εγώ, θέλω όλα τα στοιχεία του D που δεν είναι αρνητικά. Άρα, για να δούμε, να μετατρέψω αυτό τον D σε τέτοιο πίνακα για να μπορέσουμε να δουλέψουμε, να μην γράφω και νούριο, επιτρέψτε μου να το κάνω αυτό. Άρα, έστω ότι έχω αυτόν εδώ το πίνακα. Ωραία. Δεν ξέρω όμως ότι είναι δύο γραμμών και τεσσάρων στυλών, είναι ένας οποιοςδήποτε. Μου ρίχνουν έναν πίνακα D. Και εγώ θέλω να βρω τη μέση τιμή των στοιχείων που δεν είναι αρνητικά. Πρώτα απ' όλα, ποια είναι τα στοιχεία που δεν είναι αρνητικά, προσέξτε, αν του πω D μεγαλύτερο από το μηδέν, τι θα παράξει ως αποτέλεσμα. Αυτό θέλω να σκεφτούμε. Ποιο θα είναι το αποτέλεσμα της πράξης, έστω σε ίσον D μεγαλύτερο του μηδενός. Ποιο θα είναι το αποτέλεσμα, όπως έχουν υποκτευθεί οι κάποιοι. Άρα, είσαι μηδέν, είσαι μεγαλύτερο από το μηδέν, ναι. Είσαι, όχι, είσαι, ναι. Είσαι, δεν μπορώ να ξέρω. Άρα, εδώ πρέπει πρώτα να τρέξουμε ένα φίλτρο, να αφαιρέσουμε όλα τα ειζνάν από τη μέση. Ας κάνουμε το παράδειγμα μας απλό εδώ. Μίον 3, είσαι, όχι, είσαι, ναι, είσαι, μάλιστα, είσαι, όχι, είσαι, μάλιστα. Αυτό λοιπόν είναι το περιεχόμενο του πίνακα σε που προέκυψε από τη σύγκριση των στοιχείων του ν με το μηδέν. Αυτόν εδώ τον πίνακα τώρα μπορώ να τον χρησιμοποιήσω ως πίνακα δικτών για τον ν, τον αρχικό. Δηλαδή, αν του πω, δώσε μου τον ν του σε, θα πάει και θα πει, τι μου ζητούν, μου ζητούν. Τα στοιχεία του ν που αντιστοιχούν σε τιμές του σε, είσαι με τη μονάδα. Άρα, το 1, όχι το μίον 2, το 3, αυτό θα είναι μηδέν, το 3, όχι το μίον 3, το 5, το 6, όχι το μίον 7 και το 8. Νάτος λοιπόν ο πίνακας μου. Οπότε μετά μπορώ να ζητήσω τη μέση τιμή του, έτσι δεν είναι. Άρα ουσιαστικά εδώ τι έχω κάνει, έχω βρει τα στοιχεία του ν για τα οποία ο ν είναι μεγαλύτερος από το μηδέν. 2 σε 1 και θέλω τη μέση τιμή αυτών. Άρα θέλω τη μέση τιμή επειδή είναι δύο διαστάσεων, της μέσης τιμής των στοιχείων του ν για τα οποία ο ν είναι μεγαλύτερος από μηδέν. Νάτο. Μία γραμμή κώδικας. Στη λογική που λέγαμε, χτίζω σιγά σιγά δηλαδή την απάντησή μου. Ξεκινώ λοιπόν να σκέφτομαι ότι θέλω τα στοιχεία του ν που δεν είναι αρνητικά, άρα έχω μια απλή σύγκριση, μεγαλύτερα από το μηδέν. Αυτή η σύγκριση μου παράγει έναν πίνακα με λογικά στοιχεία, μηδέν και ένα. Μηδέν ίσον false, ένα ίσον true. Αυτό τον πίνακα τον χρησιμοποιώ ως πίνακα δικτών για τον ν τον ίδιο, για τον εαυτό του. Προσέξτε αυτή τη λογική. Ξέρω ότι ακόμη σας ξαφνιάζει, ελπίζω ότι πολύ σύντομα δεν θα σας ξαφνιάζει τόσο. Δηλαδή η λογική είναι βρέσ' μου τα στοιχεία του ν για τα οποία ο ν είναι μεγαλύτερος από το μηδέν. Όταν θέλουμε να υλοποιήσουμε έναν έλεγχο ιδιότητας για στοιχεία του ν, τον βάζουμε ως όρισμα προς διορισμού στοιχείων του εαυτού του. Άρα βρες τα στοιχεία του ν για τα οποία ισχύει πως αυτά είναι μεγαλύτερα από το μηδέν, και εφόσον τα βρεις, υπολόγησε το άθροισμά τους, την μέση τιμή τους. Αυτή είναι η λογική εδώ. Ερωτήσεις, απορίες. Τι έχουμε δει λοιπόν και κλείνουμε εδώ. Έχουμε δει ότι με τη χρήση δομών διαχειριζόμαστε πρώτα απ' όλα πλήρως προβλήματα πινάκων, δομές εξορισμού. Επίσης είχαμε δει την προηγούμενη ώρα και συμπληρώνω ότι με τη χρήση δομών χειριζόμαστε πλήρως προβλήματα υπολογισμού αθροισμάτων. Δεύτερο, ο διαινεζματικός ή αποτελεσματικός, αν θέλετε, προγραμματισμός μας επιτρέπει να μεταφέρουμε απευθεία στοιχεία του αλγορίσμου στον τρόπο υπολογισμό. Να παρακάμψουμε δομές και να διαμορφώσουμε αποδοτικότερα και συντομότερα προγράμματα. Μετά έχουμε τελειώσει αυτή τη φάση και το τέλος της έξις εβδομάδας μας βρίσκεται εδώ.