Θα ολοκληρώσω αυτή την υποενότητα στις υπολογιστικές μεθόδους
για τη λύση διαφορικών εξισώσεων με κάποιες πιο γενικές παρατηρήσεις.
Συζητήσαμε λοιπόν την Μέθοδο του Euler.
Η Μέθοδος του Euler είναι γνωστή ως μια αριθμητική
ή υπολογιστική μέθοδος λύσης διαφορικών εξισώσεων.
Είναι υπολογιστική επειδή περιλαμβάνει υπολογισμούς
χρησιμοποιώντας, σχεδόν πάντα, έναν υπολογιστή
και λέγεται αριθμητική - και μάλλον αυτός είναι ο πιο παραδοσιακός ορισμός -
επειδή το αποτέλεσμα της Μεθόδου του Euler
δεν είναι κάποιος τύπος για μια συνάρτηση, αλλά είναι μια λίστα αριθμών,
οπότε την ονομάζουμε αριθμητική μέθοδο.
Η Μέθοδος του Euler είναι αρκετά απλά αντιληπτή
και φτάνει στον πυρήνα του τι είναι οι διαφορικές εξισώσεις:
ένας κανόνας για το πώς κάτι αλλάζει
και αυτός ο κανόνας είναι γραμμένος στη βάση της παραγώγου
- του ρυθμού μεταβολής - οχι της συνάρτησης καθ' αυτής.
Οπότε, νομίζω οτι αν καταλαβαίνετε τη Μέθοδο του Euler
και ίσως πώς να την κωδικοποιείτε μόνοι σας,
τότε έχετε μια πολύ καλή αντίληψη
το τι σημαίνουν οι διαφορικές εξισώσεις.
Οπότε, σας προτείνω αναμφίβολα, αν έχετε κάποιες δεξιότητες προγραμματισμού
- η γλώσσα δεν έχει καμμία σημασία
και μπορείτε να χρησιμοποιήσετε και ένα υπολογιστικό φύλλο -
να προσπαθήσετε να γράψετε κώδικα για την Μέθοδο του Euler μόνοι σας.
Θα το βάλω και στις εργασίες για αυτή την ενότητα.
Οπότε, η Μέθοδος του Euler είναι πολύ καλή εννοιολογικά,
όμως, δεν είναι πολύ αποτελεσματική υπολογιστικά
οπότε δεν χρησιμοποιείται ιδιαίτερα στην πράξη.
Επιτρέψτε μου να μιλήσω λίγο για το πώς κανείς μπορεί να βελτιώσει τη Μέθοδο του Euler.
Λοιπόν, για να βελτιώσει κανείς τη Μέθοδο του Euler,
υπάρχουν δύο πράγματα που μπορεί να ήθελε να κάνει:
πρώτον, υπάρχει μια οικογένεια τεχνικών,
μια ομάδα τεχνικών, γνωστές ως μέθοδοι Runge-Kutta
και αυτή είναι η ιδέα πίσω από αυτές:
- Δε θα μπώ σε πολλές λεπτομέρειες
αλλά αξίζει να τις αναφέρουμε.
Στη Μέθοδο του Euler
προσποιούμαστε οτι ο ρυθμός μεταβολής είναι σταθερός για ένα χρονικό διάστημα Δt
και, έπειτα, πρέπει να διαλέξουμε ποιο ρυθμό μεταβολής θα χρησιμοποιήσουμε
και απλά επιλέγουμε το ρυθμό μεταβολής αριστερά αυτού του διαστήματος.
Απλά παίρνουμε τον αρχικό ρυθμό μεταβολής σε αυτό το διάστημα
και προσποιούμαστε οτι αυτός είναι σταθερός για όλο το Δt.
Οι μέθοδοι Runge-Kutta λένε:
λοιπόν, αντί να χρησιμοποιούμε το ρυθμό μεταβολής στην αρχή του διαστήματος,
τι θα συνέβαινε αν χρησιμοποιούσαμε το ρυθμό μεταβολής
στην αρχή του διαστήματος και στο τέλος του διαστήματος,
και παίρναμε τον μέσο όρο αυτών.
Αυτό θα ήταν πιθανόν μια καλύτερη αναπαράσταση
του τι συμβαίνει σε αυτό το διάστημα
ή, ακόμη καλύτερα, ίσως θα μπορούσαμε να πάρουμε δείγματα του ρυθμού μεταβολής
σε τρια διαφορετικά σημεία εντός αυτού του διαστήματος.
Υπάρχουν διαφορετικές μέθοδοι για να κάνουμε τη δειγματοληψία αυτή
και διαφορετικοί τρόποι να πάρουμε τον μέσο όρο διαφορικών παραγώγων
τις οποίες υποθέτουμε, αλλά αυτή είναι η γενική ιδέα.
Αντί να χρησιμοποιούμε μια παράγωγο
παίρνουμε δείγμα κανα δυό παραγώγων και βγάζουμε τον μέσο όρο τους.
Οπότε, αυτός είναι ένας τρόπος να βελτιώσουμε τη Μέθοδο του Euler.
Δεν είναι άμεσα προφανές, αλλά τελικά αυτό είναι περισσότερο αποτελεσματικό,
με την έννοια οτι, με λιγότερη υπολογιστική προσπάθεια
μπορείς να πάρεις μια εξίσου ακριβής λύση.
Το άλλο που κανείς συνήθως κάνει
είναι κάτι που λέγεται προσαρμοστικό μέγεθος βήματος (adaptive step size)
και αυτό είναι: βάζουμε το πρόγραμμα να προσαρμόζει αυτόματα το Δt απευθείας,
καθώς το κάνει, καθώς προσπαθεί να βρει τη λύση.
Το Δt χρειάζεται να είναι μικρό
όταν η παράγωγος αλλάζει ραγδαία.
Έχουμε πρόβλημα με αυτές τις μεθόδους
όταν προσποιούμαστε οτι η παράγωγος είναι σταθερή για ένα Δt
ενώ, στην πραγματικότητα, αλλάζει πολύ.
Οπότε, αν είχαμε μια κατάσταση όπου, κάποιες φορές,
όπως περνάει ο χρόνος, η παράγωγος αλλάζει ραγδαία
και άλλες φορές δεν αλλάζει ραγδαία,
τότε δε θα χρειαζόταν να χρησιμοποιήσουμε το ίδιο Δt.
Αν η αλλαγή στην παράγωγο είναι αργή,
μπορούμε να χρησιμοποιήσουμε ένα μεγάλο Δt.
Όταν είναι γρήγορη πρέπει να χρησιμοποιήσουμε ένα μικρό Δt
και έτσι, αυτές οι μέθοδοι προσαρμοστικού μεγέθους βήματος
το υπολογίζουν αυτό απευθείας.
Σκέφτομαι σχετικά με αυτό - το προσαρμοστικό μέγεθος βήματος - κατ' αυτόν τον τρόπο
- και είναι μια χοντρική αναλογία αλλά μπορεί να σας δώσει τη σωστή ιδέα.
Φανταστείτε οτι περπατάτε σε κάποιο τοπίο
και τα μάτια σας είναι καλυμμένα, δε μπορείτε να δείτε.
Αν το τοπίο είναι επίπεδο, μπορείτε να κάνετε μεγάλα βήματα
και δεν πρόκειτε να χάσετε κάτι.
Αλλά, αν το τοπίο είναι πολύ ανώμαλο,
τότε θα πρέπει να κάνετε μικρότερα βήματα
για να βεβαιωθείτε οτι δε θα πέσετε ή θα χάσετε κάτι.
Έτσι, αν έχετε καλυμμένα τα μάτια σας, μπορεί να προσαρμόσετε
το μέγεθος του βήματος σας ανάλογα με το πώς αισθάνεσθε οτι είναι το τοπίο.
Οκ, σε κάτι περίπτωση, ο καθιερωμένος τρόπος να βελτιώσετε
την Μέθοδο του Euler είναι να κάνετε αυτά τα δύο πράγματα:
κάποιου τύπου μέθοδο Runge-Kutta
και κάποιου τύπου προσαρμοστικό μέγεθος βήματος.
Σχεδόν όλα τα αριθμητικά περιβάλλοντα προγραμματισμού τα οποία γνωρίζω
MATLAB, Octave, Maple, Mathematica, Python
έχουν κάποιου είδους ενσωματωμένο Runge-Kutta, προσαρμοστικού μεγέθους βήματος λύτη.
Οπότε, ίσως, στο forum, κάποιοι απο εσας που έχουν εμπειρία
με αυτά τα διαφορετικά πράγματα
και ίσως έχουν λύσει διαφορικές εξισώσεις στο παρελθόν.
μπορείτε να ανεβάσετε παραδείγματα
για να πώς χρησιμοποιούνται αυτές οι διαφορετικές ενσωματωμένες λειτουργίες.
Οκ, τέλος, ας κοιτάξουμε λίγο μπροστά.
Οπότε, στις επόμενες ενότητες θα παρουσιάζω συχνά
λύσεις σε διαφορικές εξισώσεις
και, σχεδόν πάντα, οι λύσεις που θα παρουσιάζω,
που θα σας δείχνω και θα συζητάμε θα είναι αριθμητικές λύσεις.
Για να κάνετε αυτό το μάθημα δε χρειάζεται
να λύνετε διαφορικές εξισώσεις μόνοι σας,
δεν χρειάζεται να γράψετε κώδικα για δικούς σας αλγόριθμους,
δε χρειάζεται να χρησιμοποιήσετε αλγόριθμους άλλων,
όμως, πιστεύω οτι είναι σημαντικό να έχετε
μια ιδέα από που προέρχονται αυτές οι αριθμητικές λύσεις.
Έτσι, αν σας δείξω μια λύση σε μια διαφορική εξίσωση,
έχετε μια ιδέα από που προήλθε
- δεν είναι μαγεία! Γίνεται χρησιμοποιώντας κάτι σαν
την Μέθοδο του Euler - έναν πολύ απλό αλλά επαναληπτικό τρόπο
λύσης διαφορικών εξισώσεων.