5 Το μοντέλο μάζας ελατηρίου με τριβή και εξωτερική δύναμη Σε προηγούμενες ενότητες είδαμε το μοντέλο mass-and-spring και τη διεπαφή χρήστη. Στην παρούσα ενότητα θα δούμε μερικές ακόμα από τις δυνατότητες του EJS προσθέτοντας στο μοντέλο μας απόσβεση (τριβή) και μια κατευθυντήρια δύναμη, καθώς και μια νέα γραφική παράσταση για την απεικόνιση του συστήματος στο χώρο των φάσεων. 5.1 Επέκταση του μοντέλου Μπορούμε να προσθέσουμε απόσβεση στο πρότυπό μας με την εισαγωγή μιας δύναμης τριβής (νόμος Stoke's) που είναι ανάλογη με την ταχύτητα F bv, όπου b είναι ο συντελεστής απόσβεσης. Το πρόσημο - σημαίναι ότι η δύναμη τριβής δουλεύει πάντα ενάντια στην κίνηση, μετατρέποντας την ενέργεια του συστήματος σε θερμότητα. Προσθέτουμε επίσης μια εξωτερική, χρονικά εξαρτημένη κατευθυντήρια δύναμη που λαμβάνει τη μορφή ενός ημιτονοειδούς. F e ( t) Asin( t). Η εισαγωγή αυτών των δύο δυνάμεων αλλάζει τη Β -βάθμια εξίσωση (3.1) στην παρακάτω μορφή d x k b dx 1 Εξίσωση 5.1 ( x l) F ( t) e dt m m dt m η οποία μετατρέπεται στο παρακάτω σύστημα πρωτοβάθμιων ODE: f x Εξίσωση 5. dx dt vx dvx k b 1 Εξίσωση 5.3 ( x l) vx Fe ( t) dt m m m 5.1.1 Προσθήκη μεταβλητών Ας προσθέσομε τους νέους όρους δύναμης στο μοντέλο μας. Επιστρέψτε στο workpanel Μοντέλο κι επιλέξτε το πάνελ Variables. Κάντε δεξί κλικ στο Tab της παρούσας σελίδας μεταβλητών και επιλέξτε Προσθήκη νέας σελίδας από το σχετικό popup menu, όπως φαίνεται στο Εικόνα 5.1. Συμπληρώστε Damping and Driving Forces στην κεφαλίδα του νέου πίνακα μεταβλητών που θα εμφανιστεί. Εικόνα 5.1: Το popup menu για μια νέα σελίδα μεταβλητών - 37 -
Θα μπορούσαμε να χρησιμοποιήσομε τον ήδη υπάρχοντα πίνακα, αλλά με τον τρόπο αυτό οργανώνομε καλύτερα τις μεταβλητές μας ανά κατηγορία. Με διπλό κλικ σε ένα κελί το κάνετε editable. Συμπληρώστε b στο κελί Name της πρώτης σειράς και εισάγετε την τιμή 0.1 στην αντίστοιχη στήλη για Value (ο τύπος double έχει ήδη επιλεχθεί). Προσέξτε ότι όταν συμπληρώνομε το όνομα μιας μεταβλητής, εμφανίζεται μια νέα σειρά αυτόματα. Συνεχίστε για να δηλώσετε τις μεταβλητές A και w της κατευθυντήριας δύναμης με τιμές 0. και.0 αντίστοιχα. Θυμηθείτε να εισάγετε κάποιο επεξηγηματικό σχόλιο για κάθε νέα μεταβλητή στο κάτω τμήμα του πίνακα. Ο τελικός πίνακας εμφανίζεται στην Εικόνα 5.. Μπορείτε να αφήσετε την τελευταία άδεια γραμμή, ή να τη σβήσετε κάνοντας δεξί κλικ κι επιλέγοντας Καθαρισμός αυτής της μεταβλητής από το σχετικό popup menu. Εικόνα 5.: Ο τελικός πίνακας μεταβλητών για τους νέους όρους 5.1. Τροποποίηση της χρονικής εξέλιξης του μοντέλου Τροποποιούμε τώρα τις διαφορικές εξισώσεις στη σελίδα εξέλιξης με την προσθήκη των εκφράσεων για τους νέους όρους στην εξίσωση (3.9). Πηγαίνετε στο πάνελ Εξέλιξη και κάντε διπλό κλικ στο κελί Rate της δεύτερης εξίσωσης, και τροποποιείστε τη ώστε να διαβάζει: k / m *( x l) b * vx / m force( t) / m Προσέξτε ότι χρησιμοποιούμε μια μέθοδο (συνάρτηση), την force(t), που δεν έχει ακόμα δηλωθεί. Θα μπορούσαμε, βέβαια, να ενσωματώσομε το ημιτονοειδές στην παρακάνω έκφραση, αλλά η - 38 -
εισαγωγή του όρου force (α) δίνει καθαρότερο και πιο αναγνώσιμο κώδικα και (β) μας επιτρέπει να δούμε πώς εισάγομε μια μέθοδο στο πάνελ Προσαρμογή. 5.1.3 Προσθήκη της μεθόδου για την εξωτερική δύναμη Η μέθοδος force ορίζεται στο πάνελ Προσαρμογή του workpanel Μοντέλο. Πηγαίνετε στο πάνελ αυτό και κάντε κλικ στο κέντρο του άδειου χώρου. Ονομάστε αυτή τη σελίδα Driving force. Θα δείτε ότι δημιουργείται μια σελίδα με κάποιον template code που ορίζει τη μέθοδο. Αλλάξτε τον για να διαβάζει: public double force (double time) { } return Α * Math.sin(w*time); // sinusoidal driving force Προσέξτε ότι περνάμε τη μεταβλητή time για το χρόνο στον οποίο θέλομε να υπολογίζομε τη μέθοδο σαν παράμετρο εισόδου. Για παράδειγμα, θα ήταν λάθος να πούμε στη μέθοδο να χρησιμοποιήσει την τιμή της παραμέτρου t, όπως εάν την γράφαμε ως εξής: public double force () { return A * Math.sin(w*t); // sinusoidal driving force } Ο λόγος είναι ότι οι περισσότερες αριθμητικές μέθοδοι υπολογίζουν τη στήλη Ρυθμός/Rate (που εμφανίζεται στο πάνελ Εξέλιξη) και σε ενδιάμεσες τιμές της ανεξάρτητης μεταβλητής t καθώς το σύστημα εξελίσσεται από χρόνο t σε χρόνο t+dt μέσα σε ένα βήμα. Για να υπολογίζομε το rate στις ενδιάμεσες αυτές χρονικές στιγμές, η ανεξάρτητη μεταβλητή καθώς και κάθε άλλη δυναμική μεταβλητή που διαχωρίζεται στην πρώτη στήλη Κατάσταση/State του ODE editor πρέπει να περαστεί ρητά σαν παράμετρος σε κάθε μέθοδο που καλείται από τη δεύτερη στήλη Ρυθμός/Rate. Οι μεταβλητές που παραμένουν αμετάβλητες κατά τη διάρκεια ενός βήματος εξέλιξης μπορούν να χρησιμοποιηθούν απευθείας στο σώμα της μεθόδου. 5.1.4 Βελτίωση της απεικόνισης του μοντέλου Στη συνέχεια προσθέτομε στο πάνελ Θέαση μια απεικόνιση της εξέλιξης του συστήματος στο χώρο της φάσης (ταχύτητα σα συνάρτηση της μετατόπισης). Επίσης εισάγομε νέα πεδία για να δείξομε και να τροποποιήσομε τις τιμές των παραμέτρων b, A και w. Πηγαίνετε στο workpanel Θέαση και παρατηρείστε ότι η παλέτα Interface εμπεριέχει αρκετά υπο-πάνελ. Κάντε κλικ στο tab με το εικονίδιο για να δείξετε την παλέτα Windows, containers, and drawing panels. Κάντε κλικ στο εικονίδιο της γραφικής παράστασης (PlottingPanel) και προσέξτε ότι το χρώμα του φόντου της παλέτας αλλάζει και ο κέρσορας μετατρέπεται σε μαγικό ραβδί. Οι αλλαγές αυτές επισημαίνουν ότι το EJS είναι έτοιμο να δημιουργήσει ένα στοιχείο του επιλεγμένου τύπου. Κάντε κλικ στο στοιχείο dialog του Tree of Elements (το αριστερό frame του EJS) όπως φαίνεται στο Εικόνα 5.3 για να προσθέσετε το plotting panel στην απεικόνιση του μοντέλου. Το EJS μας ρωτά για το όνομα του νέου στοιχείου και μετά δημιουργεί ένα instance του σαν child του dialog. Παράλληλα εμφανίζεται μια νέα γραφική παράσταση, αλλά ο διάλογός είναι πολύ μικρός. - 39 -
Επιστρέψτε σε design mode (να μη φαίνεται το μαγικό ραβδί) κάνοντας κλικ σε οποιαδήποτε άδεια περιοχή του Tree of Elements ή πατώντας το Esc. Μεγαλώστε τη γραφική παράσταση: κάντε διπλό κλικ πάνω στο plotting panel για να φανούν οι διαστάσεις του και αλλάξτε τις σε 400 x 400. Τέλος, εισάγετε στο πεδία Title, Title X και Title Y τις τιμές Phase Space, Displacement και Velocity, αντίστοιχα. Εικόνα 5.3: Δημιουργία ενός plotting panel ως child στοιχείου dialog.evo Το plotting panel, όπως υποδεικνύει το όνομά του, είναι ένα container για τη γραφική παράσταση στο χώρο των φάσεων. Για τη γραφική παράσταση χρησιμοποιούμε το στοιχείο Trace στην παλέτα D Drawables, το οποίο εισάγομε με την ίδια διαδικασία που μόλις ακολουθήσαμε για το στοιχείο PlottingPanel. Αφού προσθέσετε ένα instance του στοιχείου Trace, αλλάξτε τις τιμές των X και Y μεταβλητών του σε x-l και vx, αντίστοιχα. Με αυτό τον τρόπο, κατά τη διάρκεια της προσομοίωσης, θα προστίθεται ένα σημείο (x-l,vx) μετά από κάθε βήμα εξέλιξης του μοντέλου, και θα σχηματιστεί το γραφικό που φαίνεται στο Εικόνα 5.4. - 40 -
Εικόνα 5.4: Ο βελτιωμένος διάλογος περιλαμβάνει γραφικές παραστάσεις για τη χρονική εξέλιξη και την εξέλιξη στο χώρο των φάσεων Για να τελειώσομε με το Θέαση, επιλέξτε το στοιχείο Field που βρίσκεται στο tab Input and Output του πάνελ Interface και κάντε 3 φορές κλικ στο στοιχείο fieldspanel για να προσθέσετε 3 νέα instances. Ονομάστε τα bfield, amplitudefield και frequencyfield. Το fieldspanel λειτουργεί απλά σαν ένα container που κρατά άλλα στοιχεία της διεπαφής και έχει διαμορφωθεί (όπως φαίνεται στις ιδιότητες) να οργανώνει τα παιδιά του σε 3 στήλες. Κάντε edit τις ιδιότητες του νέου στοιχείων Field ώστε να συνδέονται με τις μεταβλητές b, A και w. Για παράδειγμα, οι ιδιότητες του bfield φαίνονται στο Εικόνα 5.5. Η σύνδεση με τη μεταβλητή b επιτυγχάνεται μέσω της ιδιότητας Variable. Κάντε κλικ στο δεύτερο εικονίδιο κι επιλέξτε την κατάλληλη μεταβλητή. Η λίστα μεταβλητών που εμφανίζεται δείχνει όλες τις μεταβλητές του μοντέλου που μπορούν να χρησιμοποιηθούν. Η ιδιότητα Format δείχνει το prefix και τον αριθμό δεκαδικών ψηφίων που θέλομε να εμφανίζονται ως τιμή της μεταβλητής. Επαναλάβετε την ίδια διαδικασία για τις ιδιότητες amplitudefield και frequencyfield. Εικόνα 5.5: Ο πίνακας ιδιοτήτων του στοιχείου bfield. - 41 -
5.1.5 Τροποποίηση της περιγραφής Αφού τροποποιήσαμε το μοντέλο και την γραφική του παράσταση, είναι καιρός να ενημερώσομε και τις σχετικές HTML σελίδες που περιγράφουν την προσομοίωση. Πηγαίνετε στο workpanel Εισαγωγή, κάντε δεξί κλικ στο tab Introduction και από το μενού που εμφανίζεται επιλέξτε Edit/Θέαση this page. Η σελίδα θα αλλάξει σε edit mode, όπως φαίνεται στο Εικόνα 5.6 και μπορείτε να τροποποιήσετε το περιεχόμενό της με τον απλό HTML editor που σας παρέχει το EJS. Εικόνα 5.6: Ο κέρσορας δείχνει στο εικονίδιο που αλλάζει σε edit mode Εάν πάλι προτιμάτε να χρησιμοποιήσετε τον δικό σας HTML editor, μπορείτε να κάνετε copy paste τον σχετικό κώδικα σε αυτόν και αφού κάνετε τις αλλαγές που θέλετε, copy paste πίσω στη σελίδα του EJS. Μπορείτε ακόμα να εισάγετε ολόκληρες σελίδες HTML στο EJS αρχίζοντας με δεξί κλικ σε ένα tab του workpanel. Αλλάξτε το περιεχόμενο των ενημερωτικών σελίδων κατάλληλα ώστε να συμπεριλαμβάνεται η απόσβεση και η εξωτερική δύναμη. Όταν ολοκληρώσετε τις αλλαγές σας, σώστε τη νέα προσομοίωση με ένα άλλο όνομα (MassAndSpringComplete.xml) κάνοντας κλικ στο εικονίδιο Save As στο taskbar του EJS. - 4 -
6 Το σύστημα μάζας ελατηρίου ως αρμονικός ταλαντωτής Ο απλός αρμονικός ταλαντωτής ορίζεται από την κίνηση ενός σώματος όπου η δύναμη επαναφοράς που ασκείται πάνω του είναι ανάλογη της μετατόπισης από τη θέση ισορροπίας. Όπως είδαμε στο σύστημα μάζας-ελατηρίου, η κίνηση του αρμονικού ταλαντωτή υπακούει την παρακάτω διαφορική εξίσωση: Εξίσωση 6.1 d x dt cx, όπου x(t) είναι μια συνάρτηση του t και c είναι μια σταθερά. Το πρόσημο (-) σημαίνει ότι η δύναμη είναι πάντα αντίθετη από την κατεύθυνση μετατόπισης από τη θέση ισορροπίας (πάντα δηλαδή προς τα πίσω). Επαληθεύστε με απευθείας αντικατάσταση ότι η παραπάνω διαφορική εξίσωση έχει αναλυτική λύση, η οποία είναι της μορφής: Εξίσωση 6. x ( t) Asin( 0t ), όπου Α το πλάτος της ταλάντωσης (μέγιστη μετατόπιση από τη θέση ισορροπίας), 0 η φυσική συχνότητα ταλάντωσης του συστήματος, φ η γωνία φάσης και c 0. Απευθείας σύγκριση με την εξίσωση κίνησης του συστήματος μάζας ελατηρίου δίνει k / m ως τη φυσική συχνότητα της ταλάντωσης, δηλαδή η συχνότητα αυξάνεται όσο πιο «σκληρό» είναι το ελατήριο και μειώνεται όσο πιο μεγάλη είναι η μάζα. Στη συνέχεια θα χρησιμοποιήσομε την προσομοίωση FunctionPlotter.xml για να συγκρίνομε την παραπάνω αναλυτική λύση με την αριθμητική λύση που σας δίνει η προσομοίωση MassAndSpring. 0-43 -