Theodorou Math Practikos Odigos

218
ΓΕΩΡΓΙΟΣ ΘΕΟ∆ΩΡΟΥ Τμήμα Φυσικής Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης ΧΡΙΣΤΙΝΑ ΘΕΟ∆ΩΡΟΥ Μαθηματικός ΠΡΑΚΤΙΚΟΣ Ο∆ΗΓΟΣ ΓΙΑ ΤΗ MATHEMATICA ® ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Θεσσαλονίκη 2004

Transcript of Theodorou Math Practikos Odigos

Page 1: Theodorou Math Practikos Odigos

ΓΕΩΡΓΙΟΣ ΘΕΟ∆ΩΡΟΥ Τµήµα Φυσικής

Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης

ΧΡΙΣΤΙΝΑ ΘΕΟ∆ΩΡΟΥ Μαθηµατικός

ΠΡΑΚΤΙΚΟΣ Ο∆ΗΓΟΣ ΓΙΑ ΤΗ MATHEMATICA®

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Θεσσαλονίκη 2004

Page 2: Theodorou Math Practikos Odigos

2

Copyright © Γ. Θεοδώρου, Χρ. Θεοδώρου, 2004

Page 3: Theodorou Math Practikos Odigos

3

ΠΡΟΛΟΓΟΣ

Η θεαµατική ανάπτυξη των τεχνολογιών πληροφορικής τείνει να επιφέρει µια ολοκληρωτική οικονοµική και κοινωνική µεταβολή, η κατάληξη της οποίας θα είναι η κοινωνία των πληροφοριών. Οι νέες τεχνολογίες παρέχουν την δυνατότητα επίλυσης σηµαντικών προβληµάτων της κοινωνίας και δηµιουργούν συνεχώς πολυάριθµα νέα επαγγέλµατα και θέσεις εργασίας. Μέσα σε αυτό το γρήγορα µεταβαλλόµενο περιβάλλον, τα Πανεπιστήµια πρέπει να προσαρµόζουν συνεχώς το εκπαιδευτικό τους πρόγραµµα ώστε να ανταποκρίνεται στις σύγχρονες ανάγκες της κοινωνίας και ταυτόχρονα να παρέχουν τις καλύτερες προϋποθέσεις στους αποφοίτους των, αφενός για να διεκδικήσουν µε αξιώσεις µια θέση εργασίας και αφετέρου για να έχουν τα απαραίτητα εφόδια ώστε να µπορούν να παρακολουθούν τις γρήγορες εξελίξεις της επιστήµης και της τεχνολογίας.

Οι τεχνολογίες της πληροφορικής έχουν επιφέρει επίσης µια δραµατική αλλαγή στην εκπαίδευση, και ο τρόπος διδασκαλίας έχει επηρεασθεί σηµαντικά από τις τεχνολογίες αυτές. Ο παραδοσιακός π.χ. τρόπος διδασκαλίας της φυσικής, στον οποίο αντιµετωπίζονται προβλήµατα φυσικής που µπορούν να επιλυθούν µε αυστηρό µαθηµατικό τρόπο, έχει συµπληρωθεί έτσι ώστε να αντιµετωπίζονται και προβλήµατα των οποίων η λύση µπορεί να προσεγγισθεί µόνο αριθµητικά µε τη χρήση ηλεκτρονικών υπολογιστών. Επίσης, µε τα υπάρχοντα προγράµµατα γραφικών υπάρχει η δυνατότητα γραφικής αναπαράστασης των αποτελεσµάτων, παρέχοντας έτσι µια εποπτική εικόνα που βοηθά στη σύνδεση της λύσης µε τη φυσική πραγµατικότητα. Συνέπεια των απαιτήσεων αυτών είναι το γεγονός ότι το Υπουργείο Παιδείας δαπανά σηµαντικά ποσά για την επιµόρφωση των ήδη υπηρετούντων εκπαιδευτικών σε τεχνολογίες χρήσης της πληροφορικής στην εκπαιδευτική διαδικασία.

Βασικό συστατικό των απαιτουµένων δεξιοτήτων πληροφορικής είναι η γνώση µιας σύγχρονης γλώσσας προγραµµατισµού. Από τις υπάρχουσες γλώσσες, οι πιο εύχρηστες είναι οι λεγόµενες συµβολικές, οι οποίες παρέχουν τη δυνατότητα

Page 4: Theodorou Math Practikos Odigos

4

εκτέλεσης τόσο αλγεβρικών όσο και αριθµητικών υπολογισµών, και παρέχουν στο χρήστη ένα ιδιαίτερα φιλικό περιβάλλον εργασίας. Τα στοιχεία αυτά τις καθιστούν ιδιαίτερα ελκυστικές για εισαγωγή στην εκπαιδευτική διαδικασία. Για τους λόγους αυτούς όλο και περισσότερα από τα καινούργια διδακτικά Πανεπιστηµιακά βιβλία των Θετικών επιστηµών αξιοποιούν µια από τις συµβολικές γλώσσες προγραµµατισµού για την ανάπτυξη του αντικειµένου τους, και οι γλώσσες αυτές θα γίνουν, στο άµεσο µέλλον, ένα βασικό εργαλείο Πανεπιστηµιακής εκπαίδευσης.

Μια από της ευρέως χρησιµοποιούµενες γλώσσες συµβολικού προγραµµατισµού είναι και η Mathematica. Η γλώσσα αυτή έχει αναπτυχθεί από Θεωρητικό Φυσικό, τον S. Wolfram, είναι ιδιαίτερα διαδεδοµένη στους κλάδους των Μαθηµατικών και της Φυσικής, και είναι κατάλληλη για αξιοποίηση στην εκπαίδευση των Φυσικών. Στο παρόν φυλλάδιο γίνεται µια εισαγωγή στα βασικά σηµεία της συµβολικής αυτής γλώσσας.

Στο πρώτο κεφάλαιο του φυλλαδίου παρουσιάζονται τα εισαγωγικά βήµατα στη λειτουργία της Mathematica. Παρουσιάζονται επίσης οι τρόποι εκτέλεσης των βασικών αριθµητικών και αλγεβρικών πράξεων, ο τρόπος χρήσεως των εσωτερικών συναρτήσεων του προγράµµατος, ο τρόπος αξιοποίησης των εντολών που υπάρχουν στις παλέτες, και τέλος εισάγεται η έννοια της λίστας που είναι ένα από τα βασικότερα εργαλεία της Mathematica.

Στο δεύτερο κεφάλαιο παρουσιάζονται οι τρόποι εκτέλεσης βασικών υπολογισµών, δηλαδή του υπολογισµού ορίων, παραγώγων και ολοκληρωµάτων συναρτήσεων, αναπτυγµάτων σε σειρά, ο υπολογισµός ριζών και ελαχίστων συναρτήσεων, όπως και η λύση αλγεβρικών εξισώσεων.

Στο τρίτο κεφάλαιο γίνεται µια εισαγωγή στα δισδιάστατα και τρισδιάστατα γραφικά συναρτήσεων και δεδοµένων, και παρουσιάζονται οι βασικές εντολές διαµόρφωσης µιας γραφικής παράστασης.

Στο τέταρτο κεφάλαιο γίνεται µια εισαγωγή στις πράξεις µε πίνακες, στη λύση γραµµικών συστηµάτων, και στον υπολογισµό ιδοτιµών και ιδιοσυναρτήσεων τετραγωνικών πινάκων.

Στο πέµπτο και έκτο κεφάλαιο παρουσιάζονται τα βασικά σηµεία των µεθόδων προγραµµατισµού της Mathematica - συναρτησιακού και διαδικαστικού προγραµµατισµού.

Page 5: Theodorou Math Practikos Odigos

5

Στο έβδοµο κεφάλαιο παρουσιάζονται βασικά στοιχεία διαχείρισης της Mathematica. Παρουσιάζονται τρόποι εισαγωγής και εξαγωγής δεδοµένων και γραφικών παραστάσεων, εντοπισµού συντακτικών λαθών, και τέλος παρουσιάζονται εντολές ελέγχου της λειτουργίας και της απόδοσης του προγράµµατος.

Στο όγδοο κεφάλαιο παρουσιάζεται µια συστηµατική παρουσίαση των εντολών διαχείρισης µιας λίστας, και στο ένατο κεφάλαιο γίνεται περαιτέρω διερεύνηση των γραφικών της Mathematica.

Στο δέκατο κεφάλαιο παρουσιάζονται τρόποι διαχείρισης δεδοµένων. Συγκεκριµένα παρουσιάζονται οι εντολές για τη προσαρµογή και τη παρεµβολή δεδοµένων. Επίσης παρουσιάζονται οι εντολές υπολογισµού του διακριτού µετασχηµατισµού Fourier.

Στο ενδέκατο κεφάλαιο παρουσιάζονται οι εντολές για τη λύση διαφορικών εξισώσεων, και τέλος στο παράρτηµα παρουσιάζονται επιλεκτικά µερικές επιπλέον εντολές της Mathematica.

Θεσσαλονίκη, Ιούνιος 2004

Γιώργος Θεοδώρου Χριστίνα Θεοδώρου

Page 6: Theodorou Math Practikos Odigos

6

ΠΕΡΙΕΧΟΜΕΝΑ

ΚΕΦΑΛΑΙΟ 1 ......................................................................................11

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ ..............................................................................11 1.1 Εισαγωγή ............................................................................................11 1.2 Βασικές πράξεις..................................................................................13 1.3 Ακριβή και προσεγγιστικά αποτελέσµατα .........................................15 1.4 Μαθηµατικές σταθερές.......................................................................17 1.5 Εσωτερικές συναρτήσεις ....................................................................18 1.6 Πράξεις µε αλγεβρικές παραµέτρους .................................................20 1.7 ∆ιαγραφή τιµών και παραµέτρων.......................................................22 1.8 Σύνθετες εντολές ................................................................................23 1.9 Σύµβολα και πράξεις από τις παλέτες ................................................24 1.10 Λίστες - Πίνακες...............................................................................27 1.11 Εντολή Table ....................................................................................28 1.12 Συντακτική αντικατάσταση ..............................................................31 1.13 Εντολές διαχείρισης..........................................................................31

ΚΕΦΑΛΑΙΟ 2 ......................................................................................35

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ............................................................................35 2.1 ∆ισδιάστατες γραφικές παραστάσεις .................................................35

2.1.1 Συνένωση σχηµάτων ....................................................................37 2.1.2 Γραφική παράσταση παραµετρικής καµπύλης .............................39 2.1.3 Γραφική παράσταση λίστας ..........................................................40

2.2 Τρισδιάστατες γραφικές παραστάσεις ...............................................41

Page 7: Theodorou Math Practikos Odigos

7

2.2.1 Γράφηµα µε ισοϋψείς (ContourPlot).............................................42 2.2.2 Γράφηµα πυκνότητας (DensityPlot) ............................................44

2.3 Επιµέλεια γραφικών ...........................................................................45

ΚΕΦΑΛΑΙΟ 3 ......................................................................................55

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA ............................................................55 3.1 Υπολογισµός αθροισµάτων και γινοµένων ........................................55 3.2 Όριο συνάρτησης................................................................................57 3.3 Παράγωγος .........................................................................................59 3.4 Αόριστο ολοκλήρωµα.........................................................................60

3.4.1 Απλό ολοκλήρωµα ........................................................................60 3.4.2 Πολλαπλό ολοκλήρωµα ................................................................62

3.5 Ορισµένο ολοκλήρωµα.......................................................................62 3.5.1 Απλό ολοκλήρωµα ........................................................................63 3.5.2 Πολλαπλό ολοκλήρωµα ................................................................64 3.5.3 Ολοκλήρωµα µε συνθήκες ............................................................65

3.6 Ανάπτυγµα σε σειρά ...........................................................................66 3.7 Υπολογισµός ρίζας συνάρτησης.........................................................67 3.8 Προσδιορισµός ακρότατων µιας συνάρτησης ....................................70 3.9 Λύσεις εξισώσεων και συστηµάτων...................................................72

3.9.1 Λύσεις εξισώσεων.........................................................................72 3.9.2 Λύσεις συστηµάτων ......................................................................74

3.10 Επαλήθευση λύσης ...........................................................................76

ΚΕΦΑΛΑΙΟ 4 ......................................................................................77

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA .....................................77 4.1 Πράξεις µε πίνακες .............................................................................77 4.2 Λύσεις γραµµικών συστηµάτων.........................................................80 4.3 Ιδιοτιµές και Ιδιοανύσµατα ................................................................81

4.3.1 Ιδιοτιµές τετραγωνικού πίνακα .....................................................81 4.3.2 Ιδιοανύσµατα τετραγωνικού πίνακα .............................................82 3.4.3 Ιδιοτιµές και ιδιοανύσµατα τετραγωνικού πίνακα........................82 3.4.4 Επαλύθεση ιδιοτιµών - ιδιοανυσµάτων .......................................83

Page 8: Theodorou Math Practikos Odigos

8

ΚΕΦΑΛΑΙΟ 5 ......................................................................................85

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ..............................................85 5.1 Ορισµός συνάρτησης..........................................................................85 5.2 Ανώνυµες (καθαρές) συναρτήσεις .....................................................90 5.3 Ανάθεση µε ή χωρίς αναβολή ............................................................91 5.4 Συντακτική αντικατάσταση µε ή χωρίς αναβολή ...............................93 5.5 Συµβολισµός παραγώγου ...................................................................94 5.6 Συναρτήσεις µε συνθήκες...................................................................95

5.6.1 Στο είδος της µεταβλητής .............................................................95 5.6.2 Στις περιοχές τιµών της µεταβλητής .............................................96 5.6.3 Στις αρχικές τιµές παραµέτρων...................................................98

5.7 Αναδροµικές συναρτήσεις..................................................................99 5.8 Επαναληπτικοί υπολογισµοί.............................................................101

ΚΕΦΑΛΑΙΟ 6 ....................................................................................107

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ..............................................107 6.1 Εντολές ελέγχου ροής.......................................................................108

6.1.1 Εντολή If ....................................................................................108 6.1.2 Εντολή Which .............................................................................110

6.2 Επαναληπτικές εντολές - Βρόχοι......................................................111 6.2.1 Εντολή Do...................................................................................111 6.2.2 Εντολή For ..................................................................................114 6.2.3 Εντολή While ..............................................................................117

6.3 Εντολές ελέγχου ...............................................................................118 6.3.1 Εντολή Continue .........................................................................118 6.3.2 Εντολή Break ..............................................................................119 6.3.3 Εντολή Label...............................................................................119 6.3.4 Εντολή Goto................................................................................119

6.4 Λογικοί Τελεστές..............................................................................120 6.4.1 Λογικός τελεστής And ( && ) ....................................................120 6.4.2 Λογικός τελεστής Or ( || ) ...........................................................121 6.4.3 Λογικός τελεστής Not ( ! ) ..........................................................121

6.5 Τοπικές µεταβλητές ..........................................................................122

Page 9: Theodorou Math Practikos Odigos

9

6.6 Ασκήσεις ..........................................................................................124

ΚΕΦΑΛΑΙΟ 7 ....................................................................................129

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA ...........................................................129 7.1 Προσέγγιση αριθµητικών τιµών.......................................................129 7.2 Εκτύπωση αποτελέσµατος στην οθόνη ............................................131 7.3 Έξοδος αποτελεσµάτων....................................................................132 7.4 Έξοδος σχήµατος..............................................................................132 7.5 Είσοδος δεδοµένων...........................................................................132 7.6 Εντοπισµός συντακτικού λάθους .....................................................133 7.7 ∆ιαµόρφωση φύλλου εργασίας ........................................................134 7.8 Εντολές ελέγχου του προγράµµατος ................................................134

ΚΕΦΑΛΑΙΟ 8 ....................................................................................137

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ ...................................................................................137 8.1 Τροποποίηση λίστας .........................................................................138 8.2 Χαρακτηριστικά λίστας ....................................................................141 8.3 Επίδραση συνάρτησης σε λίστα .......................................................142

8.3.1 Εντολή Map.................................................................................143 8.3.2 Εντολή Apply..............................................................................145

8.4 Προγραµµατισµός µε τη χρήση λίστας ............................................146 8.5 ∆ιαχείριση πίνακα ............................................................................149

ΚΕΦΑΛΑΙΟ 9 ....................................................................................153

ΓΡΑΦΙΚΑ ..........................................................................................................153 9.1 Ηµιλογαριθµικές και λογαριθµικές γραφικές παραστάσεις .............153 9.2 Αποτύπωση πειραµατικών σφαλµάτων στο γράφηµα .....................155 9.3 Ιστογράµµατα ...................................................................................157 9.4 Γραφικές παραστάσεις πεπλεγµένων συναρτήσεων ........................159 9.5 Πολικά διαγράµµατα ........................................................................161 9.6 Γραφική αναπαράσταση διανυσµατικών πεδίων .............................163 9.7 Γραφικές παραστάσεις σε σφαιρικές συντεταγµένες .......................164 9.8 Παραµετρικές καµπύλες και επιφάνειες σε τρεις διαστάσεις ..........165 9.9 Κινούµενα γραφικά ..........................................................................167

Page 10: Theodorou Math Practikos Odigos

10

ΚΕΦΑΛΑΙΟ 10.................................................................................169

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ .........................................169 10.1 ∆ιαχείριση δεδοµένων ....................................................................170 10.2 Στατιστική περιγραφή δεδοµένων ..................................................173

10.2.1 Μέση τιµή .................................................................................174 10.2.2 ∆ιακύµανση...............................................................................175 10.2.3 Τυπική απόκλιση.......................................................................175

10.3 Προσαρµογή δεδοµένων (Fitting) ..................................................176 10.4 Παρεµβολή (Interpolation) .............................................................182 10.5 ∆ιακριτός µετασχηµατισµός Fourier ..............................................186

ΚΕΦΑΛΑΙΟ 11.................................................................................191

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ........................................................191 11.1 Αναλυτική λύση .............................................................................192 11.2 Αριθµητική λύση ............................................................................197 11.3 Εφαρµογή .......................................................................................199

ΚΕΦΑΛΑΙΟ 12.................................................................................203

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ................................................203 12.1 Περιβάλλον εργασίας .....................................................................203 12.2 Ιδιότητες διευθύνσεων....................................................................205

12.2.1 ∆ιεύθυνση από εντολή Begin....................................................205 12.2.2 ∆ιεύθυνση από εντολή BeginPackage ......................................207 12.2.3 Φωλιασµένες διευθύνσεις .........................................................209

12.3 ∆ηµιουργία εξωτερικών πακέτων...................................................210 12.4 Παράδειγµα ....................................................................................212

ΠΑΡΑΡΤΗΜΑ...................................................................................213

ΒΙΒΛΙΟΓΡΑΦΙΑ.............................................................................217

Page 11: Theodorou Math Practikos Odigos

1.1 Εισαγωγή

11

ΚΕΦΑΛΑΙΟ 1

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

1.1 Εισαγωγή Μετά από την αλµατώδη ανάπτυξη των ηλεκτρονικών υπολογιστών και την

ευρεία χρήση τους σε όλα σχεδόν τα πεδία, καθίσταται πλέον επιτακτική η γνώση µιας τουλάχιστον σύγχρονης γλώσσας προγραµµατισµού. Η επιλογή της γλώσσας αυτής είναι µια διαδικασία για την οποία υπάρχουν πολλές και αντικρουόµενες απόψεις. Η απάντηση στο ερώτηµα αυτό καθορίζεται σε µεγάλο βαθµό και από το επιστηµονικό πεδίο στο οποίο θα χρησιµοποιηθεί η γλώσσα αυτή. Μια σύγχρονη, και ταυτόχρονα εισαγωγική γλώσσα προγραµµατισµού, που απευθύνεται στους Φυσικούς, και γενικότερα στο κλάδο των Θετικών επιστηµών, θα πρέπει να έχει τη δυνατότητα εκτέλεσης τόσο αλγεβρικών όσο και αριθµητικών υπολογισµών, και να παρέχει στο χρήστη ένα ιδιαίτερα φιλικό περιβάλλον εργασίας. Μια τέτοια γλώσσα θα γίνει ελκυστική στο σύνολο σχεδόν των φοιτητών του κλάδου, και όχι µόνο σε µια µικρή µειονότητα που έχει ιδιαίτερο ενδιαφέρον σε υπολογιστές, και θα τους παρέχει ένα ουσιαστικό εργαλείο για µαθηµατικό χειρισµό προβληµάτων που θα αντιµετωπίσουν τόσο στη διάρκεια των σπουδών, όσο και στη µετέπειτα σταδιοδροµία τους. Μια τέτοια γλώσσα είναι η Mathematica.

Η Mathematica είναι µια από τις πιο εξελιγµένες γλώσσες συµβολικού προγραµµατισµού. Έχει τη δυνατότητα εκτέλεσης αριθµητικών αλλά και αλγεβρικών υπολογισµών, και παρέχει στο χρήστη ένα πλήρες πακέτο γραφικών για οπτική παρουσίαση των αποτελεσµάτων. Κατ’ αρχήν, στη Mathematica υπάρχει µια πολύ µεγάλη ποικιλία εσωτερικών συναρτήσεων για εκτέλεση συγκεκριµένων

Page 12: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

12

υπολογισµών, που προσφέρονται για άµεση χρήση. Πρέπει όµως να τονισθεί ότι η Mathematica δεν είναι απλώς µια συλλογή έτοιµων προγραµµάτων, αλλά µια πλήρης γλώσσα προγραµµατισµού, στην οποία υπάρχει η δυνατότητα ανάπτυξης νέων συναρτήσεων και προγραµµάτων, που δεν έχουν εκ των προτέρων προβλεφθεί, για την εκτέλεση υπολογισµών της επιλογής του χρήστη. Τέλος, ένα από τα βασικά χαρακτηριστικά της Mathematica είναι ότι παρέχει στο χρήστη ένα ιδιαίτερα φιλικό περιβάλλον εργασίας. Τα παραπάνω στοιχεία είναι αυτά που καθιστούν τη Mathematica ιδιαίτερα ελκυστική για εισαγωγή στην εκπαίδευση.

Σκοπός του παρόντος βιβλίου είναι να ενηµερώσει τον αναγνώστη για τις δυνατότητες και τη χρησιµότητα της Mathematica, και να τον βοηθήσει στην εκµάθηση των βασικών της σηµείων. Η έκδοση που θα παρουσιαστεί είναι αυτή που εγκαθίσταται στο λειτουργικό σύστηµα των WINDOWS. Οι εκδόσεις της Mathematica που εγκαθίστανται πάνω σε άλλα λειτουργικά συστήµατα λειτουργούν σε γενικές γραµµές µε παρόµοιο τρόπο. Εκκίνηση του προγράµµατος: Η εκκίνηση της Mathematica γίνεται µε διπλό πάτηµα του αριστερού πλήκτρου του «ποντικιού» πάνω στο αντίστοιχο εικονίδιο. Με την εκκίνηση του προγράµµατος, φορτώνεται το πρόγραµµα διαχείρισης (editor) της Mathematica. Μέσα στο φύλο εργασίας του προγράµµατος αυτού γράφονται όλες οι εντολές, δίνεται η εντολή εκτέλεσης τους, και εµφανίζονται τα αποτελέσµατα των πράξεων. Το κυρίως πρόγραµµα της Mathematica, που εκτελεί τους υπολογισµούς, είναι ο πυρήνας (kernel), ο οποίος φορτώνεται αυτόµατα µε την εκτέλεση της πρώτης εντολής. Τα αποτελέσµατα των υπολογισµών εµφανίζονται στο φύλλο εργασίας, αλλά ταυτόχρονα διατηρούνται και στη µνήµη του πυρήνα. Έξοδος από το πρόγραµµα: Η έξοδος από το πρόγραµµα γίνεται µε την επιλογή, µε το αριστερό πλήκτρο του «ποντικιού», της εντολής File του µενού και κατόπιν της εντολής Exit της πινακίδας που θα εµφανιστεί, είτε µε ταυτόχρονο πάτηµα των πλήκτρων Alt→F4 του πληκτρολογίου. Όταν µε το πρόγραµµα έχουν εκτελεστεί πράξεις, τότε στη διαδικασία εξόδου από αυτό ο υπολογιστής θα ρωτήσει εάν θέλουµε να σώσουµε το φύλλο εργασίας σε ένα αρχείο. Εάν απαντήσουµε

Page 13: Theodorou Math Practikos Odigos

1.2 Βασικές πράξεις

13

καταφατικά (Yes), τότε µας καθοδηγεί στον ορισµό του ονόµατος του αρχείου και της διεύθυνσης που θα γίνει η αποθήκευση.

1.2 Βασικές πράξεις Οι βασικές πράξεις στη Mathematica, και τα σύµβολα (τελεστές) που

χρησιµοποιούνται για την εκτέλεση τους, είναι οι παρακάτω: Αριθµητικοί τελεστές

Πράξη Τελεστές σύγκρισης

Πράξη

+ συν == Ίσον (σύγκριση) - πλην < µικρότερο * επί < = µικρότερο ή ίσον / δια > µεγαλύτερο ^ δύναµη > = µεγαλύτερο ή ίσον = Ίσον (αντικατάσταση) != όχι ίσο ! παραγοντικό

Με τους αριθµητικούς τελεστές εκτελούνται οι γνωστές από την αριθµητική πράξεις, ενώ µε τους τελεστές σύγκρισης γίνεται διερεύνηση σχέσεων µεταξύ δύο ποσοτήτων. (Προσοχή, ο τελεστής σύγκρισης της ισότητας δηλώνεται µε διπλό ίσον, ==. Η σηµασία του και ο τρόπος χρήσης του θα παρουσιαστούν σε επόµενα κεφάλαια). Παρουσίαση του τρόπου χρήσης των παραπάνω τελεστών, µαζί µε παραδείγµατα εφαρµογής των, θα γίνει παρακάτω.

Αφού γράψουµε µια εντολή, χρησιµοποιώντας τους παραπάνω τελεστές, για την εκτέλεση της πατάµε ταυτόχρονα Shift→Enter, π.χ.

2+7 Shift→Enter Η εντολή Enter από µόνη της συνεπάγεται αλλαγή γραµµής και συνέχιση της εντολής στην επόµενη γραµµή. Μετά την εκτέλεση της εντολής εµφανίζεται στην οθόνη το παρακάτω µήνυµα

In[1]:= 2+7

Page 14: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

14

Out[1]=9

∆ηλαδή η Mathematica δίνει το αποτέλεσµα, και ταυτόχρονα αριθµεί τις εντολές εισόδου και τα αποτελέσµατα εξόδου. Με παρόµοιο τρόπο έχουµε τη δυνατότητα να εκτελέσουµε όλες τις µαθηµατικές πράξεις, όπως π.χ.

In[2]:=8-3 Out[2]=5 In[3]:=4*6 Out[3]=24 In[4]:=24/6 Out[4]=4 In[5]:=2^3 Out[5]=8

Με τους τελεστές σύγκρισης γίνεται σύγκριση µεταξύ δύο ποσοτήτων, και

το αποτέλεσµα της πράξης αυτής είναι True (ορθό) ή False (λαθεµένο). Παραδείγµατα εφαρµογής τελεστών σύγκρισης είναι τα παρακάτω:

In[6]:= 2>7 Out[6]=False In[7]:= 2<=7 Out[7]= True In[8]:=2^3==8 Out[8]=True In[9]:=2^3!=8 Out[9]= False Όταν µια εντολή τελειώνει µε το σύµβολο του Αγγλικού αλφαβήτου ;, τότε

η εντολή εκτελείται αλλά το αποτέλεσµα της δεν εµφανίζεται στη οθόνη, 2+7; Shift→Enter In[10]:= 2+7;

Page 15: Theodorou Math Practikos Odigos

1.3 Ακριβή και προσεγγιστικά αποτελέσµατα

15

Η επιλογή αυτή είναι πολύ χρήσιµη σε περιπτώσεις που το αποτέλεσµα είναι εκτεταµένο και δεν θέλουµε να εµφανιστεί στην οθόνη, όπως π.χ. στη περίπτωση ενός πίνακα µεγάλων διαστάσεων.

Με τη Mathematica µπορούµε επίσης να εκτελούµε πράξεις µε ακεραίους, ρητούς, δεκαδικούς και µιγαδικούς αριθµούς. Το σύµβολο για τη µιγαδική µονάδα,

−1 , είναι το κεφαλαίο Ι. Σε µια εντολή µπορούµε να χρησιµοποιούµε παρενθέσεις, ( ), και µαθηµατικά σύµβολα, µε τον τρόπο που αυτά χρησιµοποιούνται στην Άλγεβρα, π.χ.

In[11]:= 3 + 5 + (2/3) + (2 ∧2)

Out[11]= 3

38.

In[12]:=(5+7*I)/(2+3*I)

Out[12]=1313

31 I−

Σηµειώστε ότι στις εντολές In[11] και In[12] το αποτέλεσµα δίνεται επακριβώς, υπό µορφή ρητού κλάσµατος, και όχι σε µορφή προσεγγιστικού δεκαδικού αριθµού.

1.3 Ακριβή και προσεγγιστικά αποτελέσµατα Σε όλα τα παραδείγµατα της προηγούµενης παραγράφου τα αποτελέσµατα

ήταν ακριβή, χωρίς καµιά αριθµητική προσέγγιση. Όταν σε µια έκφραση, όπως στις προηγούµενες, υπάρχουν µόνο ακέραιοι και ρητοί αριθµοί, και αλγεβρικά σύµβολα όπως θα δούµε παρακάτω, τότε η Mathematica εκτελεί τις πράξεις επακριβώς και δίνει το αποτέλεσµα χωρίς καµιά προσέγγιση. Εκτός από την επιλογή αυτή, η Mathematica έχει τη δυνατότητα να εκτελεί αριθµητικές πράξεις µε προσεγγιστικό τρόπο, και να δίνει το αποτέλεσµα σε µορφή δεκαδικού αριθµού. Ο τρόπος αυτός εκτέλεσης εφαρµόζεται αυτόµατα όταν σε µια εντολή υπάρχουν και δεκαδικοί αριθµοί, π.χ.

In[1]:=3+ 5 + (2.0 / 3) + (2^2) Out[1]=12.6667

Page 16: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

16

In[2]:=(5.0+7*I)/(2+3*I) Out[2]= 2.38462 - 0.076923 I

Προσοχή: Σηµειώστε ότι το σύµβολο της υποδιαστολής είναι, σύµφωνα µε τον διεθνή συµβολισµό, η τελεία και όχι το κόµµα. Εκτός από τη προηγούµενη περίπτωση, το αποτέλεσµα µιας πράξης δίνεται πάντα αριθµητικά όταν η πράξη αυτή έχει τη µορφή Ν[expression], π.χ.

In[3]:= N[3 + 5 + (2/3) + (2 ∧2) ] Out[3]= 12.6667.

Το σύµβολο Ν στη παραπάνω εντολή είναι πάντα κεφαλαίο, δηλώνει Numeric, και αποτελεί εσωτερική συνάρτηση. Στη Mathematica, το όρισµα µιας συνάρτησης τοποθετείται µέσα σε αγκύλες. Αυτός είναι ο συνηθισµένος τρόπος εκτέλεσης µιας συνάρτησης,

Function[argument] και συνεπάγεται τον υπολογισµό της συνάρτησης Function µε όρισµα το argument. Ένας άλλος τρόπος εκτέλεσης της ίδιας εντολής είναι ο παρακάτω

argument //Function και δηλώνει ότι η έκφραση argument που βρίσκεται αριστερά του συµβόλου // αποτελεί το όρισµα της συνάρτησης Function. Με βάση το δεύτερο αυτό τρόπο γραφής η εντολή In[3] γίνεται

In[4]:= 3 + 5 + (2/3) + (2 ∧2) //N Out[4]= 12.6667. Η Mathematica εκτελεί τις πράξεις µε ακρίβεια 16 ψηφίων (ο αριθµός των

ψηφίων που εµφανίζονται στη οθόνη είναι γενικά µικρότερος και καθορίζεται από τον χρήστη). Μπορούµε όµως να αυξήσουµε την ακρίβεια µε την οποία θα εκτελεστεί µία πράξη µε την εντολή

Ν[expression, n]

Page 17: Theodorou Math Practikos Odigos

1.4 Μαθηµατικές σταθερές

17

όπου n ο αριθµός των ψηφίων µε τα οποία ζητείται να γίνει η πράξη αυτή, µε το n υποχρεωτικά µεγαλύτερο του 16. Π.χ. η εντολή

In[5]:=N[1/3, 30] Out[5]=0.333333333333333333333333333333

υπολογίζει το π µε ακρίβεια 30 ψηφίων. Όταν το n είναι µικρότερο του 16, τότε η εντολή εκτελείται µε ακρίβεια 16 δεκαδικών ψηφίων.

Όπως αναφέραµε παραπάνω, η Mathematica αριθµεί τις εντολές εισόδου και εξόδου χρησιµοποιώντας το συµβολισµό In[n] και Out[n] αντίστοιχα, µε n τον αριθµό της εντολής. Επειδή έτσι οι εντολές αριθµούνται, µπορούµε να χρησιµοποι-ήσουµε µια προηγούµενη εντολή, εισόδου ή εξόδου, και να την περιλάβουµε ως µέρος µιας καινούργιας, γράφοντας π.χ. In[n], όπου n ο αριθµός της εντολής αυτής, π.χ.

In[6]:= In[4] + 1.7 Out[6]=14.3667.

Επίσης µπορούµε να χρησιµοποιήσουµε το αποτέλεσµα µιας προγενέστερης εντολής δίνοντας %n, ή Out[n], µε n τον αριθµό εξόδου του αποτελέσµατος αυτού,

In[7]:=%6 - 1.7 Out[7]=12.6667.

Εάν το χρησιµοποιούµενο αποτέλεσµα είναι της αµέσως προηγούµενης εντολής, τότε µπορούµε να το καλέσουµε και µε την εντολή %, και της προ-προηγούµενης µε την %%. Εάν το αποτέλεσµα µιας εντολής είναι αλγεβρικό, µπορούµε να το µετατρέψουµε σε αριθµητικό, δίνοντας την εντολή Ν[%n] ή %n // Ν.

1.4 Μαθηµατικές σταθερές Η Mathematica αναγνωρίζει τις συνηθισµένες µαθηµατικές σταθερές και τις

αναπαριστά µε σύµβολα, π.χ.

Page 18: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

18

Pi, δηλώνει τον αριθµό π ≈ 3.14159..... Ε, τη βάση των νεπερίων (φυσικών) λογαρίθµων, e ≈ 2.718281828459... Ι, τη µιγαδική µονάδα, I = −1 Degree, το π/180, που είναι ο παράγοντας µετατροπής µοιρών σε ακτίνια Infinity, συµβολίζει το άπειρο. Οι σταθερές αυτές εισάγονται στις πράξεις µε τα αντίστοιχα σύµβολα, χρησιµοποιώντας πάντα το Αγγλικό αλφάβητο,

In[1]:= Pi^2 + I*E^3 // N Out[1]= 9.8696 + 20.0855 I. In[2]:=Exp[2]-E^2 Out[2]=0 In[3]:=N[Pi, 40] Out[3]=3.141592653589793238462643383279502884197

1.5 Εσωτερικές συναρτήσεις Στη Mathematica υπάρχει µια πολύ µεγάλη σειρά εσωτερικών συναρτήσεων

που µπορούν να χρησιµοποιηθούν για εκτέλεση πράξεων, δηλώνοντας το αντίστοιχο όνοµα και καθορίζοντας το όρισµά τους. Από αυτές, οι πιο συνηθισµένες είναι οι εξής:

Sqrt[x] Τετραγωνική ρίζα, x Log[x] Λογαριθµική συνάρτηση (Νεπέριος

λογάριθµος του x) Exp[x] Εκθετική συνάρτηση, xe Cos[x], Sin[x], Tan[x] Τριγωνοµετρικές συναρτήσεις ArcCos[x], ArcSin[x], ArcTan[x] Αντίστροφες τριγωνοµετρικές

συναρτήσεις Cosh[x], Sinh[x], Tanh[x] Υπερβολικές συναρτήσεις ArcCosh[x], ArcSinh[x], ArcTanh[x] Αντίστροφες υπερβολικές συναρτήσεις

Page 19: Theodorou Math Practikos Odigos

1.5 Εσωτερικές συναρτήσεις

19

Re[z], Im[z] Πραγµατικό και φανταστικό µέρος ενός

µιγαδικού αριθµού, z Arg[z] Όρισµα µιγαδικού αριθµού Abs[z] Απόλυτη τιµή µιγαδικού αριθµού Conjugate[z.] Συζυγής µιγαδικού αριθµού Max[x, y, …] Επιλέγει τον µεγαλύτερο από τους

αριθµούς x, y, … Min[x, y, …] Επιλέγει τον µικρότερο από τους

αριθµούς x, y, … Mod[x, y] Υπολογίζει το υπόλοιπο της διαίρεσης

του x δια του y.

Οι εσωτερικές συναρτήσεις αρχίζουν πάντα µε κεφαλαίο γράµµα, και το όρισµα τους τοποθετείται µέσα σε αγκύλες.

In[1]:=Sqrt[4]*Log[7]/Exp[3] Out[1]=(2 Log[7]) / [e^3) In[2]:=Sqrt[4]*Log[7]/Exp[3]//N Out[2]=0.193762 In[3]:= Sqrt[2.1]*Log[7]*Sin[2.8]/(Exp[2.0]*Re[2.3 + I*5]) Out[3]= 0.0555834

Επίσης το όρισµα των τριγωνοµετρικών συναρτήσεων πρέπει να δίνεται σε ακτίνια. Σε περίπτωση όµως που η γωνία δίνεται σε µοίρες, πρέπει να πολλαπλασιάζεται µε τον παράγοντα µετατροπής, Degree, για να µετατρέπεται σε ακτίνια, π.χ.

In[4]:=Cos[π/4]

Out[4]=2

1

In[5]:=Cos[45 Degree]

Out[5]= 2

1

Page 20: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

20

Προσοχή: Η Mathematica ξεχωρίζει τα µικρά από τα κεφαλαία γράµµατα, που συνεπάγεται ότι όταν κεφαλαία γράµµατα µιας εντολής γίνουν µικρά (και αντίστροφα) τότε η εντολή αυτή δεν είναι αναγνωρίσιµη από τη Mathematica και δεν εκτελείται, π.χ. η εντολή log[12.5] είναι διαφορετική από την Log[12.5], και δεν υπάρχει ως εσωτερική συνάρτηση. Άσκηση 1.1 Υπολογίστε τις αριθµητικές τιµές των ποσοτήτων α) cos(3π/2) ε) sinh(8) β) arcsin(2/3) στ) )2log( π⋅

γ) 3100 ζ) )45sin(50 °+

δ) π100 η) tan(π/5) Άσκηση 1.2 Υπολογίστε τις ακριβείς τιµές των ποσοτήτων α) cos(3π/2) δ) cos(π/10) β) tan(π/5) ε) )75cos(

γ) 3100 στ) )75tan(

Άσκηση 1.3 Υπολογίστε τις παρακάτω ποσότητες µε ακρίβεια 100 σηµαντικών ψηφίων α) cos(3π/2) ε) cos(π/10) β) tan(π/5) στ) )75cos(

γ) 3100 ζ) )75tan(

δ) π100 η) )45sin(50 °+

1.6 Πράξεις µε αλγεβρικές παραµέτρους Στη Mathematica, όπως και στην άλγεβρα, µπορούµε να κάνουµε πράξεις

µε αλγεβρικά σύµβολα (παραµέτρους). Το όνοµα µιας αλγεβρικής παραµέτρου

Page 21: Theodorou Math Practikos Odigos

1.6 Πράξεις µε αλγεβρικές παραµέτρους

21

µπορεί να περιέχει ένα ή περισσότερα γράµµατα ή αριθµούς, αλλά το πρώτο στοιχείο πρέπει απαραίτητα να είναι ή γράµµα ή το σύµβολο $. Επίσης µέσα στο όνοµα δεν επιτρέπεται να περιλαµβάνονται κενά, τα δε ονόµατα πρέπει απαραιτήτως να χωρίζονται µεταξύ τους µε κάποιο από τα σύµβολα των πράξεων (+, -, *, /, ...) ή το κενό. Το κενό αντιστοιχεί σε πολλαπλασιασµό, π.χ. η εντολή height width ισοδυναµεί µε το γινόµενο height*width, ενώ η συνεχόµενη παράθεση heightwidth αντιστοιχεί στο όνοµα µιας νέας µεταβλητής, της heightwidth, και όχι στο γινόµενο των δυο προηγούµενων µεταβλητών.

In[1]:=name*Sin[2]*Sqrt[2]/Cos[4]

Out[1]= Sin[2] Sec[4] name 2

In[2]:=name*Sin[2]*Sqrt[2]/Cos[4] // N Out[2]=-1.96734 name Μια αλγεβρική παράµετρος µπορεί να είναι σε αφηρηµένη µορφή οπότε δεν

έχει συγκεκριµένη αριθµητική τιµή, µπορεί όµως να της αποδοθεί και αριθµητική τιµή, και αυτό γίνεται µε το σύµβολο της ανάθεσης, που είναι το σύµβολο της ισότητας, =, και την εντολή

name = value µε value τη τιµή που αποδίδεται στη παράµετρο name.

In[3]:= a = 3.1 Out[3]= 3.1

Ο ορισµός αυτός έχει σα συνέπεια η παράµετρος name να αντικαθίσταται στη µνήµη µε την αριθµητική τιµή που της αποδίδεται και η οποία χρησιµοποιείται στη θέση της παραµέτρου σε όλες τις επόµενες εντολές,

In[4]:= a^2 - 1. Out[4]= 8.61

Η αριθµητική αυτή τιµή µπορεί, µε τη βοήθεια µιας καινούργιας εντολής, να αλλάξει, ή ακόµα και να διαγραφεί.

Page 22: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

22

1.7 ∆ιαγραφή τιµών και παραµέτρων Η αριθµητική τιµή µιας αλγεβρικής παραµέτρου µπορεί να διαγραφεί από

τη µνήµη του υπολογιστή µε την εντολή

name =. ή την εντολή Clear [name] µε name το όνοµα της αλγεβρικής παραµέτρου την αριθµητική τιµή της οποίας θέλουµε να διαγράψουµε. Μετά τη διαγραφή αυτή, η παράµετρος παραµένει στη µνήµη, αλλά χωρίς να έχει αριθµητική τιµή. Π.χ.

In[1]:= a =. ή In[2]:= Clear[a]

Μπορούµε επίσης να διαγράψουµε τις τιµές όλων των αλγεβρικών παραµέτρων από τη µνήµη του υπολογιστή µε την εντολή

ClearAll[“Global`*”] Προσοχή: το σύµβολο ` είναι ο ανάποδος τόνος που βρίσκεται στο ίδιο πλήκτρο µε το σύµβολο ~).

Με τις παραπάνω εντολές γίνεται διαγραφή της αριθµητικής τιµής µιας παραµέτρου, χωρίς η παράµετρος αυτή να διαγράφεται από τη µνήµη του υπολογιστή. Μια πιο δραστική διαδικασία είναι η πλήρης διαγραφή της παραµέτρου από τη µνήµη του υπολογιστή, και αυτό γίνεται µε την εντολή

Remove[name] Π.χ.

In[3]:= Remove[a] Μπορούµε επίσης να διαγράψουµε όλες τις παραµέτρους µε την εντολή

Remove[“Global`*”]

Page 23: Theodorou Math Practikos Odigos

1.8 Σύνθετες εντολές

23

Τέλος µπορούµε να διαγράψουµε τα πάντα από τη µνήµη του υπολογιστή, ξεφορτώνοντας τον πυρήνα της Mathematica, µε την εντολή Kernel→Quit_Kernel→Local. Μετά από αυτή την εντολή µπορούµε να ξαναρχίσουµε την εκτέλεση των πράξεων. Για να ξαναδηµιουργηθούν όµως όλα τα δεδοµένα στη µνήµη του πυρήνα πρέπει να ξανατρέξουµε το πρόγραµµα από την αρχή.

1.8 Σύνθετες εντολές Μια σύνθετη εντολή έχει προς εκτέλεση περισσότερα από ένα ανεξάρτητα

µέρη (επιµέρους εντολές). Σε µια τέτοια περίπτωση οι επιµέρους εντολές εισάγονται η µία µετά την άλλη σε διαδοχικές γραµµές, πατώντας ενδιάµεσα Enter για αλλαγή της γραµµής. Μετά τη συµπλήρωση όλων των επί µέρους εντολών, δίνεται η εντολή εκτέλεσης (Shift→Enter),

In[1]:=a = Sin[1.7] Enter b = Log[27.1] Enter c = Sqrt[7.73] Enter d = Im[17.2 + I 82.3] Shift→Enter Out[1]=0.991665 Out[2]=3.29953 Out[3]=2.78029 Out[4]=82.3

Οι επιµέρους εντολές µπορούν επίσης να γραφούν στην ίδια γραµµή, χρησιµοποιώντας ως µεταξύ τους διαχωριστικό το Αγγλικό σύµβολο ;, π.χ.

In[5]:= a = Sin[1.7]; b = Log[27.1]; c = Sqrt[7.73]; d = Im[17.2 + I*82.3] Shift→Enter Out[6]=82.3

Στη παραπάνω περίπτωση το µόνο αποτέλεσµα που εµφανίζεται στην οθόνη είναι το τελευταίο, d=82.3, διότι οι προηγούµενες εντολές τελειώνουν µε ; και έτσι τα αποτελέσµατα τους δεν εµφανίζονται.

Page 24: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

24

1.9 Σύµβολα και πράξεις από τις παλέτες Για να εκτελεστεί µια πράξη στη Mathematica, θα πρέπει να δοθεί η

αντίστοιχη εντολή µε τη σωστή σύνταξη. Στην αντίθετη περίπτωση το πρόγραµµα απαντά µε διαγνωστικά µηνύµατα που σκοπό έχουν να µας διευκολύνουν να εντοπίσουµε το συντακτικό λάθος. Για να αποφεύγονται τέτοια λάθη και να γίνει πιο εύχρηστο το πρόγραµµα, έχουν συνταχθεί παλέτες, που περιέχουν µερικές από τις πιο χρήσιµες εντολές, όπως και µερικά από τα σύµβολα που µπορούν να χρησιµοποιηθούν για τη σύνταξη µιας συγκεκριµένης εντολής. Οι παλέτες αυτές έχουν συγκεντρωθεί στο µενού File→Palettes, και κάθε µια έχει το δικό της τίτλο. Επιλέγοντας µια συγκεκριµένη παλέτα µε τη βοήθεια του «ποντικιού», προκαλούµε την εµφάνιση στη οθόνη των εντολών που αυτή περιέχει. Πολύ χρήσιµες από τις παλέτες είναι η παλέτες AlgebraicManipulation και BasicInput. Για εξοικείωση θα περιγράψουµε τη χρήση της πρώτης από αυτές, οι υπόλοιπες χρησιµοποιούνται µε παρόµοιο τρόπο.

Οι εντολές που έχουν συγκεντρωθεί στη παλέτα AlgebraicManipulation σκοπό έχουν να απλοποιήσουν αλγεβρικές εκφράσεις. Η εκτέλεση από τη παλέτα µιας τέτοιας εντολής γίνεται µε την επιλογή, µε το «ποντίκι», της έκφρασης στην οποία θέλουµε να την εφαρµόσουµε και κατόπιν τη κλήση της εντολής αυτής από τη παλέτα. Οι επιλογές που υπάρχουν αφορούν τις περιπτώσεις:

• Expand: Η εντολή αυτή αναπτύσσει τα γινόµενα και τις δυνάµεις που υπάρχουν σε µια έκφραση, π.χ. In[1]:= Expand[(x+y)^2] ( Η ίδια εντολή µπορεί να δοθεί και ως εξής (x+y)^2//Expand ) Out[1]= 22 2 yxyx ++

Πολλές φορές όµως η έκφραση (a+x)^2 υπάρχει ήδη στο φύλλο εργασίας σαν αποτέλεσµα µιας προηγούµενης πράξης. Στη περίπτωση αυτή δεν χρειάζεται να πληκτρολογήσουµε ξανά την εντολή για να εκτελέσουµε το ανάπτυγµα, µπορούµε απλούστατα να επιλέξουµε µε το «ποντίκι» την έκφραση που θέλουµε να αναπτύξουµε και να καλέσουµε την εντολή Expand από τη παλέτα.

• Factor: Παραγοντοποιεί µια συγκεκριµένη έκφραση, π.χ.

Page 25: Theodorou Math Practikos Odigos

1.9 Σύµβολα και πράξεις από τις παλέτες

25

In[2]:= Factor[%] Out[2]= 2)( yx +

Το ίδιο αποτέλεσµα το παίρνουµε µαυρίζοντας την έξοδο Out[1] και καλώντας την εντολή Factor από τη παλέτα. • Together: Αθροίζει αλγεβρικά κλάσµατα και απλοποιεί κοινούς παράγοντες

µεταξύ αριθµητή και παρανοµαστή. In[3]:= Together[1/(x + 1) + x/(x^2 - 1)]

Out[3]=)1)(1(

21xx

x++−

+−

• Apart: Χωρίζει ένα αλγεβρικό κλάσµα σε άθροισµα µερικών κλασµάτων µε

απλούστερους παρανοµαστές. In[4]:= Apart[%]

Out[4]=)1(2

3)1(2

1xx +

++−

• Cancel: Απλοποιεί κοινούς παράγοντες µεταξύ αριθµητή και παρανοµαστή

σε ένα αλγεβρικό κλάσµα. In[5]:= Cancel[(x^2 + 4x)/(x^2 - x) + (x^2 + 3x - 4)/(x^2 -1)]

Out[5]=xx

xx

++

++−

+14

14

• Simplify: Εκτελεί µια σειρά από αλγεβρικούς µετασχηµατισµούς στη

συγκεκριµένη έκφραση και επιστρέφει το απλούστερο αποτέλεσµα In[6]:=Simplify[18 + 39 x + 29 x^2 + 9 x^3 + x^4] Out[6]=(3 + x)^2 (2 + 3 x + x^2).

• FullSimplify: Παρόµοια εντολή µε την Simplify αλλά εκτελεί µια µεγαλύτερη οµάδα µετασχηµατισµών. In[7]:=FullSimplify[18 + 39 x + 29 x^2 + 9 x^3 + x^4] Out[7]= (1 + x) (2 + x) (3 + x)^2.

Page 26: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

26

• TrigExpand: Αναπτύσσει τριγωνοµετρικές συναρτήσεις χρησιµοποιώντας

τριγωνοµετρικές ταυτότητες. In[8]:=TrigExpand[Sin[2ArcTan[t]]]

Out[8]= 212

tt

+

• TrigFactor: Παραγοντοποιεί τριγωνοµετρικές συναρτήσεις.

In[9]:=TrigFactor[Cos[x] Cos[y] Sin[x] - Sin[x]^2 Sin[y]] Out[9]= Cos[x + y] Sin[x]

• TrigReduce: Απλοποιεί τριγωνοµετρικές συναρτήσεις. In[10]:=TrigReduce[Cos[x] Cos[y] - Sin[x] Sin[y]] Out[10]= Cos[x+y]

• ExpToTrig: Μετατρέπει όρους µε µιγαδικούς εκθέτες σε τριγωνοµετρικούς όρους. In[11]:=ExpToTrig[I (Exp[-I z]- Exp[I z])/2] Out[11]= Sin[z]

• TrigToExp: Μετατρέπει τριγωνοµετρικούς όρους σε όρους µε µιγαδικούς εκθέτες. In[12]:= TrigToExp[ArcTanh[x]]

Out[12]= ]1[21]1[

21 xLogxLog ++−−

Άσκηση 1.4 Χρησιµοποιώντας τη Mathematica υπολογίστε τα τριγωνοµετρικά αναπτύγµατα των συναρτήσεων: α) )sin( yx ± δ) )cot( yx ±

β) )cos( yx ± ε) )4sin( x

γ) )tan( yx ± στ) )4cos( x

Page 27: Theodorou Math Practikos Odigos

1.10 Λίστες - Πίνακες

27

Άσκηση 1.5 Χρησιµοποιώντας τη Mathematica αποδείξτε τις σχέσεις:

α) 1)(sin)(cos 22 =+ xx

β) 2)2(sin)(sin2)(cos2 244 =++ xxx

γ) 0 x)sin(4 -(x)sin +(x)sin (x)cos 6 -(x)cos 4224 =

1.10 Λίστες - Πίνακες Η λίστα είναι ένα πολύ βασικό εργαλείο της Mathematica, και µια από τις

πολλές χρησιµότητες της είναι για την εισαγωγή δεδοµένα σε ένα υπολογισµό ή για την αποθήκευση αποτελεσµάτων. Στη Mathematica, η λίστα είναι ισοδύναµη µε ένα µαθηµατικό πίνακα. Για να ορίσουµε µια λίστα χρησιµοποιούµε άγκιστρα, , µέσα στα οποία βάζουµε τα στοιχεία της, χωρισµένα µε κόµµατα. Η ακόλουθη έκφραση

In[1]:= lista = a1, 2.1, x, y, Sqrt[2], I, Sin[x]

Out[1]= a1, 2.1, x, y, 2 , i, Sin[x]

είναι µια λίστα, η οποία έχει το όνοµα lista και περιλαµβάνει αριθµούς, σύµβολα, εσωτερικές λίστες κ.λ.π. Μια µονοδιάστατη λίστα δεν περιέχει εσωτερικές λίστες. Η δισδιάστατη λίστα αντιπροσωπεύει ένα δισδιάστατο πίνακα, κάθε γραµµή της οποίας τοποθετείται µέσα σε ξεχωριστά, εσωτερικά άγκιστρα. Η λίστα

In[2]:= a = x, y, I, 2.1, Sqrt[3], Cos[1.27]

Out[2]=x, y, i, 2.1, 3 , 0.296281

αντιπροσωπεύει ένα πίνακα 32 × . Τα στοιχεία µιας λίστας χαρακτηρίζονται µε δείκτες, που δηλώνουν τη γραµµή και τη στήλη, όπως χαρακτηρίζονται και τα στοιχεία ενός αλγεβρικού πίνακα. Στη Mathematica οι δείκτες (i, j) µιας λίστας τοποθετούνται µέσα σε διπλές αγκύλες, π.χ. το a[[i, j]] δηλώνει το στοιχείο (i, j) του πίνακα. Για µονοδιάστατους πίνακες έχουµε ένα µόνο δείκτη, π.χ. lista[[i]]. Μπορούµε να τυπώσουµε στην οθόνη το στοιχείο (i, j) του πίνακα a δίνοντας την

Page 28: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

28

εντολή a[[i, j]]. Μπορούµε επίσης να τροποποιήσουµε τη τιµή του στοιχείου αυτού µε την εντολή:

a[[i, j]] = νέα τιµή Μπορούµε να αναπαραστήσουµε µια λίστα a µε τη συνηθισµένη µορφή πίνακα µε την εντολή

In[3]:=TableForm[a] ή την ισοδύναµη a//TableForm ή τη µορφή αλγεβρικού πίνακα µε την εντολή

In[4]:=MatrixForm[a] ή την ισοδύναµη a//MatrixForm

Ένα πίνακα µπορούµε επίσης να τον δηµιουργήσουµε χρησιµοποιώντας το βασικό µενού, πηγαίνοντας στο Input και επιλέγοντας το Create Table/Matrix/Palette. Ο πίνακας τότε εµφανίζεται µε τη παραδοσιακή του µορφή, στον οποίο κάνουµε τις κατάλληλες επιλογές, µπορούµε π.χ. να συµπληρώσουµε τα στοιχεία του. Επίσης, οι γραµµές του πίνακα αυτού µπορούν να αυξηθούν µε ταυτόχρονο πάτηµα Control→Enter, ενώ οι στήλες µε Control→, (Control µαζί µε κόµµα). Για να διαγράψουµε µια γραµµή ή στήλη, την µαυρίζουµε µε το «ποντίκι» και πατάµε Delete. Άσκηση 1.6 ∆ηµιουργήστε πίνακες διαστάσεων 43× , 44× , 101× , και 35× , επιλέγοντας τα στοιχεία τους µε τυχαίο τρόπο.

1.11 Εντολή Table Στη προηγούµενη παράγραφο είδαµε πως να καθορίσουµε ένα πίνακα,

ορίζοντας τα στοιχεία του ένα προς ένα. Όταν όµως οι αριθµητικές τιµές των στοιχείων του πίνακα α καθορίζονται από µια συνάρτηση, τότε µπορούµε να δηµιουργήσουµε τον πίνακα αυτό χρησιµοποιώντας την εντολή Table. Για παράδειγµα, εξετάζοντας τη περίπτωση ενός δισδιάστατου πίνακα, όπου τα στοιχεία

Page 29: Theodorou Math Practikos Odigos

1.11 Εντολή Table

29

του a[[i, j]] καθορίζονται από µια συνάρτηση f[i, j], µπορούµε να τον ορίσουµε µε την εντολή

a = Table[ f[i, j],i, 1, imax, j, 1, jmax ] Η λίστα i, 1, imax, στην εντολή Table, δηλώνει ότι ο δείκτης i παίρνει όλες τις ακέραιες τιµές από το 1 µέχρι imax. Ο γενικότερος συµβολισµός είναι i, imin, imax, δi, και δηλώνει ότι το i µεταβάλλεται από imin στο imax µε βήµα δi. Η παραπάνω εντολή δηµιουργεί τον πίνακα f[1, 1], f[1, 2], …, f[2, 1], f[2, 2], …, …. Η εντολή Table εύκολα γενικεύεται για λίστες περισσοτέρων διαστάσεων. Παράδειγµα: Ένας δισδιάστατος πίνακας, µε στοιχεία που δίνονται από τη σχέση 2/)( ji + ,

µπορεί να δηµιουργηθεί µε την εντολή: In[1]:=ta = Table[(i + j)/2.0, i, 1, 3, j, 1, 5] Out[1]=1., 1.5, 2., 2.5, 3., 1.5, 2., 2.5, 3., 3.5, 2., 2.5, 3., 3.5, 4.

Άσκηση 1.7 ∆ηµιουργήστε πίνακες διαστάσεων 43× , 44× , 101× , και 35× που τα στοιχεία

τους να δίνονται από τη συνάρτηση (α) )sin( ji ⋅ , και (β) ji ⋅ .

Μια άλλη περίπτωση που συχνά συναντάµε είναι αυτή που τα στοιχεία

κάθε στήλης του πίνακα καθορίζονται µε διαφορετική συνάρτηση. Τότε ο πίνακας µπορεί να ορισθεί µε εντολή

a = Table[ f1[i], f2[i], ... fn[i], i, 1, imax ] Η εντολή αυτή δηµιουργεί τον πίνακα f1[1], f2[1], …, f1[2], f2[2], …, … π.χ.

In[2]:=ta1 = Table[i, Sqrt[i] // N, Sin[0.3 i], i, 1, 3] Out[2]= 1, 1., 0.29552, 2, 1.41421, 0.564642, 3, 1.73205, 0.783327

Page 30: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

30

Άσκηση 1.8 ∆ηµιουργήστε πίνακες διαστάσεων 23× , και 210 × , που τα στοιχεία της πρώτης στήλης να δίνονται από τη σχέση 10/i , και της δεύτερης από τη σχέση (α)

)2sin( i , και (β) i2 , µε i το δείκτη που δηλώνει τη σειρά του πίνακα.

Κενός πίνακας: Είδαµε παραπάνω διάφορους τρόπους ταυτόχρονης δηµιουργίας και καθορισµού των στοιχείων ενός πίνακα. Τα στοιχεία του πίνακα αυτού µπορούν κατόπιν να τροποποιηθούν. Μια λεπτοµέρεια που πρέπει να έχουµε υπόψη είναι ότι στη Mathematica (όπως και σε πολλές άλλες γλώσσες προγραµµατισµού) δεν επιτρέπεται να δώσουµε τιµές στα στοιχεία ενός πίνακα, προτού αυτός οριστεί. ∆ηλαδή, προτού οριστεί ο πίνακας Α, η εντολή καθορισµού ενός στοιχείου, π.χ.

In[3]:=Α[[1]] = 2.1

δίνει ως αποτέλεσµα το παρακάτω διαγνωστικό From In[3]:=Set::"noval": "Symbol A in part assignment does not have an immediate value." Out[3]= 2.1

χωρίς να ορίζεται το στοιχείο αυτό. Ένας τρόπος για να ξεπεραστεί το πρόβληµα αυτό είναι να ορίσουµε πρώτα ένα κενό πίνακα A και µετά να καθορίσουµε τις τιµές των στοιχείων του. Η εντολή δηµιουργίας ενός δισδιάστατου κενού πίνακα, διαστάσεων mn × , είναι

Table[Null, n, m] Ένας κενός πίνακας 3×3 δηµιουργείται µε εντολή

In[4]:=A = Table[Null, 3, 3] Out[4]=Null, Null, Null, Null, Null, Null, Null, Null, Null.

Τα στοιχεία του πίνακα αυτού µπορούν να καθοριστούν σε επόµενο στάδιο.

Page 31: Theodorou Math Practikos Odigos

1.12 Συντακτική αντικατάσταση

31

1.12 Συντακτική αντικατάσταση Όπως είδαµε παραπάνω, µε την εντολή ανάθεσης x = x0 ο υπολογιστής

αποθηκεύει την τιµή x0 στη θέση του x και την χρησιµοποιεί σε όλες τις επόµενες πράξεις που περιέχουν x. Συναντάµε όµως συχνά περιπτώσεις όπου θέλουµε να εκτελέσουµε ένα µόνο υπολογισµό µε µια συγκεκριµένη τιµή της παραµέτρου x, π.χ. να υπολογίσουµε τη συνάρτηση f[x] για x = x0, χωρίς όµως να θέλουµε η τιµή αυτή του x να µείνει στη µνήµη του υπολογιστή. Ο υπολογισµός αυτός γίνεται µε την εντολή της συντακτικής αντικατάστασης, και τη χρήση του τελεστή /.

f[x] /. x→ x0 Μπορούµε επίσης να χρησιµοποιήσουµε τη παραπάνω διαδικασία για περισσότερες παραµέτρους, χρησιµοποιώντας τη λίστα αντικατάστασης a=x→ x0, y→ y0, ..., και εκτελώντας τον υπολογισµό µε την εντολή

f[x, y, ...] /. x→ x0, y→ y0, ... ή f[x, y, …] /. a

Παραδείγµατα:

In[1]:= Sin[0.1x] /. x -> Pi Out[1]= 0.309017 In[2]:= x^2 y /. x -> 1, y -> 2 Out[2]= 2

1.13 Εντολές διαχείρισης Βοήθεια: Μέσα από τη σελίδα εργασίας µπορούµε να ζητήσουµε βοήθεια για το τρόπο εκτέλεσης µιας συνάρτησης ή µιας εντολής, δίνοντας την εντολή ?name η ??name, όπου name το όνοµα της συνάρτησης ή εντολής για την οποία ζητάµε βοήθεια (η εντολή ??name, µε δύο ερωτηµατικά, παρέχει περισσότερες πληροφορίες).

In[1]:=?Log "Log[z] gives the natural logarithm of z (logarithm to base e).

Page 32: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

32

Log[b, z] gives the logarithm to base b." Η Mathematica διαθέτει επίσης εκτεταµένο ηλεκτρονικό βοήθηµα που περιγράφει τη χρήση της. Το βοήθηµα αυτό εµφανίζεται σε ξεχωριστό παράθυρο, πατώντας το πλήκτρο F1. Στο παράθυρο αυτό υπάρχει τόσο αλφαβητικό ευρετήριο όσο και πίνακας περιεχοµένων. Σηµειώστε ότι τα παραδείγµατα που υπάρχουν στο παράθυρο βοήθειας µπορούν να εκτελεστούν µέσα σε αυτό, καθώς και να τροποποιηθούν και να εκτελεστούν. Η εξάσκηση µε τα παραδείγµατα αυτά είναι µια πολύ καλή διαδικασία εκµάθησης της Mathematica. Εισαγωγή σχολίων: Στο φύλλο εργασίας µπορούµε να εισαγάγουµε σχόλια. Ένας τρόπος να γίνει αυτό είναι να τοποθετηθεί το κείµενο µέσα σε παρενθέσεις µε αστεράκι: (* σχόλιο *), το οποίο για τη Mathematica δεν είναι εκτελέσιµο. Καθένα από τα διπλά αυτά σύµβολα, (* και *), είναι εσωτερικές εντολές και πρέπει να διαχωρίζονται από το εσωτερικό κείµενο µε κενά.

In[2]:=2^3 (* τρίτη δύναµη του 2 *) Out[2]=8

Ένας άλλος τρόπος είναι µε την εντολή Format Style Text η οποία ορίζει ότι η είσοδος που ακολουθεί είναι µη εκτελέσιµο κείµενο. ∆ιακοπή εκτέλεσης: Μπορούµε να διακόψουµε την εκτέλεση µιας εντολής πατώντας ταυτόχρονα Alt→•. Μερικές φορές όµως δηµιουργείται εµπλοκή, και η εκτέλεση µιας εντολής δεν διακόπτεται µε τον τρόπο αυτό. Σ’ αυτή τη περίπτωση µπορούµε να διακόψουµε την εκτέλεση, και να ξεκολλήσουµε το σύστηµα, χωρίς να βγούµε από τη Mathematica, µε το να ξεφορτώσουµε τον πυρήνα της Mathematica δίνοντας από το µενού την εντολή Kernel→Quit_Kernel→Local. Μετά από αυτό µπορούµε να ξαναρχίσουµε την εκτέλεση των πράξεων. Επισηµαίνεται ότι µε τη παραπάνω διαδικασία δεν σβήνεται το φύλλο εργασίας, και έτσι διασώζονται όλες οι εντολές που έχουν γραφτεί σ΄ αυτό, όµως σβήνουν όλα τα δεδοµένα που υπάρχουν στη µνήµη του υπολογιστή, και για να ξαναδηµιουργηθούν πρέπει να ξανατρέξουµε το πρόγραµµα από την αρχή.

Page 33: Theodorou Math Practikos Odigos

1.13 Εντολές διαχείρισης

33

Συνολική εκτέλεση του προγράµµατος: Μπορούµε να εκτελέσουµε το σύνολο των εντολών που υπάρχουν στο φύλλο εργασίας δίνοντας από το µενού την εντολή Kernel→Evaluation→Evaluate Notebook. ∆ιαγραφή αποτελεσµάτων: Μπορούµε να διαγράψουµε όλα τα αποτελέσµατα των υπολογισµών από το φύλλο εργασίας, και να κρατήσουµε µόνο τις εντολές εισόδου, δίνοντας από το µενού την εντολή Kernel→Delete All Output. Η εντολή αυτή είναι χρήσιµη στη διαδικασία αποθήκευσης του φύλλου εργασίας. Σε πολλές περιπτώσεις δεν ενδιαφερόµαστε να αποθηκεύσουµε τα αποτελέσµατα των υπολογισµών, οπότε για να εξοικονοµήσουµε αποθηκευτικό χώρο µπορούµε να διαγράψουµε τα αποτελέσµατα και να αποθηκεύσουµε µόνο τις εντολές του προγράµµατος. Αποθήκευση φύλλου εργασίας: Η αποθήκευση του φύλλου εργασίας γίνεται µε πάτηµα του αριστερού πλήκτρου του «ποντικιού» πάνω στην εντολή “File” του µενού και κατόπιν πάνω στην εντολή “Save as” της πινακίδας που θα εµφανιστεί και που µας καθοδηγεί στον ορισµό του ονόµατος του αρχείου και της διεύθυνσης που θα αποθηκευθεί. Το φύλλο εργασίας αποθηκεύεται µε την κατάληξη .nb (notebook).

Page 34: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ

34

Page 35: Theodorou Math Practikos Odigos

2.1 ∆ισδιάστατες γραφικές παραστάσεις

35

ΚΕΦΑΛΑΙΟ 2

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

Οι γραφικές παραστάσεις είναι ένας απλός και εποπτικός τρόπος απόδοσης αποτελεσµάτων, που µας βοηθά να κατανοήσουµε καλύτερα το φαινόµενο που περιγράφουν τα δεδοµένα. Η Mathematica διαθέτει ένα πλήρες και εύχρηστο πακέτο γραφικών, µε το οποίο µπορούµε να αποδώσουµε γραφικά τόσο συναρτήσεις µιας και δύο µεταβλητών, όσο και αριθµητικά δεδοµένα. Στο παρόν κεφάλαιο θα κάνουµε µια εισαγωγή στη χρήση του πακέτου αυτού, αφήνοντας πιο προχωρηµένα θέµατα για το κεφάλαιο 9.

2.1 ∆ισδιάστατες γραφικές παραστάσεις Χρησιµοποιώντας τη Mathematica µπορούµε να αποδώσουµε γραφικά

συναρτήσεις µιας µεταβλητής. Η εντολή για τη δισδιάστατη γραφική παράσταση µιας συνάρτησης )(xf είναι η παρακάτω

Plot[f[x], x, xmin, xmax] και δίνει τη γραφική παράσταση της συνάρτησης αυτής στο διάστηµα (xmin, xmax). Παράδειγµα:

Η γραφική παράσταση της συνάρτησης )sin(xx , στο διάστηµα (0, 4π), δίνεται

από την εντολή

Page 36: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

36

In[1]:=g1 = Plot[Sqrt[x]*Sin[x], x, 0, 4Pi]

2 4 6 8 10 12

-3

-2

-1

1

2

Υπάρχει επίσης η δυνατότητα ταυτόχρονης αναπαράστασης πολλών συναρτήσεων µέσα στο ίδιο σχήµα, και αυτό γίνεται µε την εντολή

Plot[f1[x], f2[x], ..., x, xmin, xmax] µε (f1(x), f2(x), ...) συναρτήσεις µιας ανεξάρτητης µεταβλητής, που καθορίζουν τις αντίστοιχες καµπύλες. Παράδειγµα:

In[2]:=g2 = Plot[Sin[x], Cos[x], x, 0, 4Pi]

Page 37: Theodorou Math Practikos Odigos

2.1 ∆ισδιάστατες γραφικές παραστάσεις

37

2 4 6 8 10 12

-1

-0.5

0.5

1

2.1.1 Συνένωση σχηµάτων

Σχήµατα που έχουν ήδη δηµιουργηθεί, π.χ. τα σχήµατα g1, g2, ..., µπορούν να συνενωθούν σε ένα µε την εντολή

Show[g1, g2, ...] Παράδειγµα: Τα σχήµατα g1 και g2 των παραπάνω παραδειγµάτων, µπορούν να συνενωθούν σ’ ένα µε την εντολή

In[3]:=Show[g1, g2]

Page 38: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

38

2 4 6 8 10 12

-3

-2

-1

1

2

ή να εµφανισθούν υπό µορφή πίνακα γραφηµάτων, GraphicsArray, το ένα δίπλα στο άλλο, µε την εντολή

Show[GraphicsArray[g1, g2,...]] Π.χ.

In[4]:=Show[GraphicsArray[g1, g2]]

2 4 6 8 10 12

-3

-2

-1

1

2

2 4 6 8 10 12

-1

-0.5

0.5

1

Page 39: Theodorou Math Practikos Odigos

2.1 ∆ισδιάστατες γραφικές παραστάσεις

39

Άσκηση 2.1 ∆ηµιουργήστε τις γραφικές παραστάσεις, στο διάστηµα (-5, 5), των παρακάτω συναρτήσεων, (α) ξεχωριστά για τη κάθε µια συνάρτηση, και (β) ανά δύο µαζί: α) x3 cos(x), δ) tan(x), β) x4-3x2, ε) sin(x)/x, γ) x+2 sin(2π x), στ) x2+3x+5.

2.1.2 Γραφική παράσταση παραµετρικής καµπύλης

Μερικές φορές η εξίσωση µιας καµπύλης δίνεται σε παραµετρική µορφή, µε τις συντεταγµένες x και y να δίνονται ως συναρτήσεις µιας ανεξάρτητης µεταβλητής, της t, π.χ. ως (x(t), y(t)). Τότε η εντολή για τη γραφική της παράσταση είναι

ParametricPlot[x[t], y[t], t, tmin, tmax] Παράδειγµα: Η γραφική παράσταση της παραµετρικής καµπύλης (cos(t), sin(t)), στο διάστηµα (0, 2π), δίνεται παρακάτω,

In[5]:=ParametricPlot[Cos[t], Sin[t], t, 0, 2Pi]

-1 -0.5 0.5 1

-1

-0.5

0.5

1

Page 40: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

40

Άσκηση 2.2 ∆ηµιουργήστε τις γραφικές παραστάσεις, στο διάστηµα -5, 5, των παρακάτω παραµετρικών καµπυλών: α) t, t3 cos(t), δ) t, t2+3t+5, β) t, t4-3t2, ε) t-0.5 sin(t), 1-0.5 cos(t). γ) t, t+2 sin(2π t), στ) .

2.1.3 Γραφική παράσταση λίστας

Στη περίπτωση που τα δεδοµένα xi, yi δίνονται σε µορφή δισδιάστατης λίστας µε δύο στήλες, a=x1, y1, x2, y2, …xn, yn, µε τη πρώτη στήλη να δίνει τις τιµές των τετµηµένων, xi , και τη δεύτερη των τεταγµένων, yi , τότε η εντολή για τη γραφική τους αναπαράσταση είναι

ListPlot[a] Παράδειγµα: Χρησιµοποιώντας την εντολή Table, δηµιουργούµε ένα πίνακα µε δεδοµένα, π.χ.

In[6]:=a = Table[i, Sin[0.1 i], i, 0, 10, 0.2];

που αντιπροσωπεύουν συντεταγµένες σηµείων της καµπύλης sin(0.1x), στο διάστηµα (0, 10). Τα δεδοµένα αυτά αποδίδονται γραφικά µε την εντολή

In[7]:=ListPlot[a]

Page 41: Theodorou Math Practikos Odigos

2.2 Τρισδιάστατες γραφικές παραστάσεις

41

2 4 6 8 10

0.2

0.4

0.6

0.8

Σχόλιο: Στη περίπτωση που στη λίστα παρέχονται µόνο οι συντεταγµένες yi, σε µορφή µονοδιάστατου πίνακα, a=y1, y2, … yn, τότε µε την εντολή ListPlot[a] εκτελείται η γραφική παράσταση των σηµείων, a=1, y1, 2, y2, …n, yn, αποδίδεται δηλαδή στο σηµείο yi η τετµηµένη xi=i. Άσκηση 2.3 ∆ηµιουργήστε πίνακες µε δύο στήλες που αντιπροσωπεύουν σηµεία, στο διάστηµα (0, 15), µε βήµα 0.2, των παρακάτω συναρτήσεων, και κάντε τις αντίστοιχες γραφικές παραστάσεις: α) x3 cos(x), δ) tan(x), β) x4-3x2, ε) sin(x)/(x+1), γ) x+2 sin(2π x), στ) x2+3x+5 .

2.2 Τρισδιάστατες γραφικές παραστάσεις Στη Mathematica έχουµε τη δυνατότητα να αποδώσουµε γραφικά

συναρτήσεις δύο µεταβλητών. Στις τρισδιάστατες αυτές γραφικές παραστάσεις οι δύο άξονες αποδίδουν τις τιµές των δύο µεταβλητών και ο τρίτος τη τιµή της συνάρτησης. Η εντολή για τη τρισδιάστατη αυτή γραφική παράσταση είναι

Page 42: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

42

Plot3D[f[x, y], x, xmin, xmax, y, ymin, ymax] που εκτελεί τη γραφική παράσταση της συνάρτησης f(x,y) στη δισδιάστατη περιοχή

max)min,(max)min,( yyxx × .

Παράδειγµα: Η γραφική παράσταση της συνάρτησης cos(x y) δίνεται παρακάτω, µε την εντολή:

In[1]:= Plot3D[Cos[x y], x, 0, 2Pi, y, 0, Pi]

0

2

4

6 0

1

2

3

-1-0.5

0

0.5

1

0

2

4

6

2.2.1 Γράφηµα µε ισοϋψείς (ContourPlot)

Σε ένα τρισδιάστατο γράφηµα, η επιφάνεια µπορεί να περιγραφεί και µε σµήνος από ισοϋψείς καµπύλες, οι οποίες συνδέουν σηµεία της επιφάνειας µε την ίδια τιµή της συνάρτησης. Η προβολή στο επίπεδο xy των καµπυλών αυτών δηµιουργεί ένα δισδιάστατο σχήµα, που αποκαλείται γράφηµα µε ισοϋψείς (ContourPlot). Η εντολή για τη χάραξη της γραφικής αυτής παράστασης είναι:

Page 43: Theodorou Math Practikos Odigos

2.2 Τρισδιάστατες γραφικές παραστάσεις

43

ContourPlot[f[x, y], x, xmin, xmax, y, ymin, ymax]

Παράδειγµα: Γράφηµα µε ισοϋψείς της καµπύλης cos(x y) δίνεται παρακάτω,

In[2]:=ContourPlot[Cos[x y], x,0, 2Pi, y, 0, Pi, PlotPoints 80]

0 1 2 3 4 5 60

0.5

1

1.5

2

2.5

3

Στο παραπάνω γράφηµα δίνονται οι ισοϋψείς καµπύλες, µαζί µε µια µεταβολή της σκίασης ανάλογα µε το «υψόµετρο» των σηµείων, δηλαδή περιοχές µε χαµηλότερες τιµές της συνάρτησης σκιάζονται µε πιο σκούρο χρώµα. Μπορούµε να απενεργοποιήσουµε την επιλογή της σκίασης µε την εντολή ContourShading False, όπως π.χ. γίνεται στο παρακάτω γράφηµα,

In[3]:=ContourPlot[Cos[x y], x,0, 2Pi, y, 0, Pi, PlotPoints 80, ContourShading False]

Page 44: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

44

0 1 2 3 4 5 60

0.5

1

1.5

2

2.5

3

2.2.2 Γράφηµα πυκνότητας (DensityPlot)

Τα γραφήµατα πυκνότητας είναι παρόµοια µε αυτά µε ισοϋψείς, µόνο που αντί να χαράσσονται ισοϋψείς, δίνεται µια µεταβολή της σκίασης ανάλογα µε το «υψόµετρο» των σηµείων, δηλαδή περιοχές µε χαµηλότερες τιµές της συνάρτησης σκιάζονται µε πιο σκούρο χρώµα. Η εντολή για την εκτέλεση των γραφηµάτων αυτών είναι:

DensityPlot[f[x, y], x, xmin, xmax, y, ymin, ymax] In[4]:=DensityPlot[Cos[x y], x,0, 2Pi, y, 0, Pi, PlotPoints 80, Mesh False]

Page 45: Theodorou Math Practikos Odigos

2.3 Επιµέλεια γραφικών

45

0 1 2 3 4 5 60

0.5

1

1.5

2

2.5

3

Άσκηση 2.4 ∆ηµιουργήστε τόσο τις τρισδιάστατες γραφικές παραστάσεις, όσο και τα γραφήµατα µε ισοϋψείς (CountorPlots) και πυκνότητας (DensityPlots), των παρακάτω συναρτήσεων α) sin(x+y), στη περιοχή 0, π, -π, π β) x sin(y)+y cos(x), στη περιοχή 0, 2π, -π, π, γ) sin(x) cos(y), στη περιοχή 0, 2π, -π, π.

2.3 Επιµέλεια γραφικών Υπάρχει η δυνατότητα διαµόρφωσης, µέσα από την εντολή Plot, µιας

γραφικής παράστασης. Για το σκοπό αυτό υπάρχουν παράµετροι που οι τιµές τους καθορίζουν τη µορφή του σχήµατος. Οι προκαθορισµένες τιµές των παραµέτρων αυτών τυπώνονται µε την εντολή Options[Plot], όπως φαίνεται παρακάτω:

Page 46: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

46

Options@PlotD :AspectRatio→ 1

GoldenRatio, Axes→ Automatic,

AxesLabel→ None, AxesOrigin→ Automatic,AxesStyle→ Automatic, Background→ Automatic,ColorOutput→ Automatic, Compiled→ True,DefaultColor→ Automatic, Epilog→ 8<, Frame→ False,FrameLabel→ None, FrameStyle→ Automatic,FrameTicks→ Automatic, GridLines→ None,ImageSize→ Automatic, MaxBend→ 10.,PlotDivision→ 30., PlotLabel→ None, PlotPoints→ 25,PlotRange→ Automatic, PlotRegion→ Automatic,PlotStyle→ Automatic, Prolog→ 8<, RotateLabel→ True,Ticks→ Automatic, DefaultFont $DefaultFont,DisplayFunction $DisplayFunction,

FormatType $FormatType, TextStyle $TextStyle> Ο χρήστης έχει τη δυνατότητα να αλλάξει τις τιµές των παραµέτρων αυτών,

µε επιλογή µέσα από την εντολή Plot:

Plot[f[x], x, xmin, xmax, Option->…] Με Option το όνοµα της παραµέτρου τη τιµή της οποίας θέλουµε να τροποποιήσουµε, και µε τη καινούργια τιµή να τοποθετείται µέσα στα άγκιστρα. Θα παρουσιάσουµε εδώ µερικές πολύ χρήσιµες περιπτώσεις διαµόρφωσης σχήµατος για δισδιάστατες γραφικές παραστάσεις. Πληροφορίες για τις υπόλοιπες µπορείτε να βρείτε στο αρχείο Help της Mathematica ή σε εγχειρίδια. • Καθορισµός του εύρους των αξόνων. Το εύρος του άξονα y καθορίζεται µε

εντολή PlotRange→ymin, ymax, π.χ. In[1]:=fg1=Plot[Tan[x], x, 0, 4Pi, PlotRange -> -2, 2]

Page 47: Theodorou Math Practikos Odigos

2.3 Επιµέλεια γραφικών

47

2 4 6 8 10 12

-2

-1.5

-1

-0.5

0.5

1

1.5

2

Εάν θέλουµε ο άξονας y να καλύπτει όλες τις τιµές που προκύπτουν από τη γραφική παράσταση, δίνουµε την εντολή PlotRange→All.

In[2]:=fg2=Plot[x^2 Sin[x], x, 0, 4Pi, PlotRange -> All]

Μπορούµε επίσης να καθορίσουµε ταυτόχρονα και το εύρος του x-άξονα και του y-άξονα χρησιµοποιώντας την εντολή PlotRange→xmin, xmax, ymin, ymax.

• Καθορισµός αριθµού σηµείων. Η Mathematica χρησιµοποιεί ένα προκαθορισµένο αριθµό σηµείων για τη δηµιουργία µιας γραφικής παράστασης. Ο αριθµός αυτός µπορεί να τυπωθεί µε την εντολή PlotPoints/.Options[Plot]. Ο παραπάνω αριθµός δεν είναι πάντα επαρκής για τη κατάλληλη παρουσίαση κάθε γραφικής παράστασης, και υπάρχει η δυνατότητα αλλαγής του µε την εντολή PlotPoints→number. Για παράδειγµα θα δώσουµε τη γραφική παράσταση του σχήµατος που εκτελέστηκε στη παράγραφο 2.2, εντολή In[1], µε τη χρήση τώρα 50 σηµείων,

In[3]:=fg3=Plot3D[Cos[x y], x, 0, 2Pi, y, 0, Pi, PlotPoints -> 50]

Page 48: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

48

0

2

4

6 0

1

2

3

-1-0.5

00.5

1

0

2

4

6

• Σχετικό µήκος αξόνων: Μπορούµε να καθορίσουµε το σχετικό µήκος των αξόνων µε την εντολή AspectRatio→n/m, όπου n/m είναι ο επιθυµητός λόγος y/x, π.χ.

In[4]:=fg4=Plot[x^2 Sin[x], x, 0, 4Pi, AspectRatio-> 1/2.5]

2 4 6 8 10 12

-125

-100

-75

-50

-25

25

50

• ∆ιαγραφή των αξόνων: Η διαγραφή των αξόνων γίνεται µε την εντολή Axes→False, π.χ.

In[5]:=fg5=Plot[x^2 Sin[x], x, 0, 4Pi, Axes -> False]

Page 49: Theodorou Math Practikos Odigos

2.3 Επιµέλεια γραφικών

49

• Περίγραµµα σχήµατος: Το σχήµα τοποθετείται µέσα σε πλαίσιο µε την εντολή Frame→True, π.χ.

In[6]:=fg6=Plot[x^2 Sin[x], x, 0, 4Pi, Frame -> True]

0 2 4 6 8 10 12-125

-100

-75

-50

-25

0

25

50

• Τίτλος αξόνων: Ο καθορισµός του τίτλου των αξόνων γίνεται µε την εντολή AxesLabel→“x-label”, “y-label”, π.χ.

In[7]:=fg7=Plot[10 t, t, 0, 10, AxesLabel -> "time", "velocity"]

Page 50: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

50

2 4 6 8 10time

20

40

60

80

100

velocity

• Τίτλος σχήµατος: Μπορούµε να ορίσουµε το τίτλο του σχήµατος µε την εντολή PlotLabel→”Title of the Figure”, π.χ.

In[8]:=fg8=Plot[10 t, t, 0, 10, PlotLabel -> "Velocity vs time"]

2 4 6 8 10

20

40

60

80

100Velocity vs time

• Αρχή αξόνων: Η εντολή αυτή καθορίζει τις συντεταγµένες του σηµείου τοµής των αξόνων. Η εντολή είναι AxesOrigin→x0, y0, π.χ.

In[9]:=fg9=Plot[10 t, t, 0, 10, AxesOrigin -> 0, 10]

Page 51: Theodorou Math Practikos Odigos

2.3 Επιµέλεια γραφικών

51

2 4 6 8 100

20

40

60

80

100

• Χρώµα της καµπύλης: Το χρώµα της καµπύλης καθορίζεται µε την εντολή PlotStyle→RGBColor[n1,n2,n3], όπου οι δείκτες n1, n2, n3 είναι δεκαδικοί αριθµοί µεταξύ µηδενός και ένα και καθορίζουν το ποσοστό του κόκκινου (R=Read), πράσινου (G=Green) και Μπλε (B=Blue) χρώµατος της καµπύλης, π.χ.

In[10]:=fg10=Plot[10 t, t, 0, 10, PlotStyle -> RGBColor[1, 0, 0]] • Πάχος της καµπύλης: Το πάχος της καµπύλης καθορίζεται µε την εντολή

PlotStyle Thickness[n], µε 0<n<1, που καθορίζει το σχετικό πάχος της γραµµής, π.χ.

In[11]:=fg11=Plot[Sin[x], x, 0, 4Pi, PlotStyle -> Thickness[0.01]]

2 4 6 8 10 12

-1

-0.5

0.5

1

Page 52: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

52

• Μέγεθος σηµείων: Στη περίπτωση της ListPlot, µπορούµε να καθορίσουµε τη διάµετρο d των σηµείων µε την εντολή PlotStyle→PointSize[d], π.χ.

In[12]:=fg12=ListPlot[Out[6], PlotStyle -> PointSize[0.02]]

2 4 6 8 10

0.2

0.4

0.6

0.8

• Συνένωση σηµείων: Στη περίπτωση της ListPlot, µπορούµε να συνενώσουµε τα

σηµεία της καµπύλης, χρησιµοποιώντας την εντολή PlotJoined→True, π.χ. In[13]:=fg13=ListPlot[Out[6], PlotJoined -> True]

2 4 6 8 10

0.2

0.4

0.6

0.8

Page 53: Theodorou Math Practikos Odigos

2.3 Επιµέλεια γραφικών

53

Άσκηση 2.5 ∆ιαµορφώστε µε το δικό σας τρόπο τις δισδιάστατες γραφικές παραστάσεις των ασκήσεων 3.1-3.3, χρησιµοποιώντας τις παραπάνω επιλογές. Άσκηση 2.6 Χρησιµοποιώντας το εσωτερικό βοήθηµα (Help) της Mathematica προσδιορίστε το τρόπο χρήσης της εντολής Ticks για τη διαµόρφωση των δεικτών των αξόνων. Ως

εφαρµογή της εντολής αυτής αποδώστε γραφικά τη συνάρτηση )sin(xx , µε

δείκτες στις θέσεις ππππ 20,10,5, του άξονα x.

Page 54: Theodorou Math Practikos Odigos

ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ

54

Page 55: Theodorou Math Practikos Odigos

3.1 Υπολογισµός αθροισµάτων και γινοµένων

55

ΚΕΦΑΛΑΙΟ 3

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA Μπορούµε να εκτελέσουµε, χρησιµοποιώντας εσωτερικές εντολές της

Mathematica, υπολογισµούς της ανάλυσης, όπως π.χ. να υπολογίσουµε όρια, παραγώγους, ολοκληρώµατα, αναπτύγµατα σειρών, να υπολογίσουµε ρίζες και ελάχιστα συναρτήσεων, λύσεις αλγεβρικών εξισώσεων κ.λ.π. Μια εισαγωγή στην εκτέλεση των υπολογισµών αυτών, µε τη χρήση της Mathematica δίνεται στο παρόν κεφάλαιο.

3.1 Υπολογισµός αθροισµάτων και γινοµένων Με τη Mathematica µπορούµε να υπολογίσουµε αθροίσµατα και γινόµενα

της µορφής ∑2

1][

i

iif και ∏

2

1

][i

i

if . Ο υπολογισµός αυτός γίνεται αντίστοιχα µε τις

εντολές: Sum[f[i], i, i1, i2] και Product[f[i], i, i1, i2]

Παραδείγµατα:

In[1]:=Sum[i^10, i,1,10] Out[1]=14914341925 In[2]:=Sum[x+i,i,0,3] Out[2]=6+4x In[3]:=Product[i^10, i,1,6] Out[3]=37439062426244874240000000000

Page 56: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

56

In[4]:=Product[x+i, i,0,3] Out[4]=x(1+x)(2+x)(3+x) In[5]:=Sum[Sqrt[n],n,1,5]

Out[5]= 5323 +++ In[6]:=Product[Sqrt[n], n, 1, 15]

Out[6]= 143030240

Εκτός από τον παραπάνω αναλυτικό υπολογισµό αθροισµάτων και γινοµένων, η Mathematica µπορεί να εκτελέσει τους υπολογισµούς αυτούς και αριθµητικά, χρησιµοποιώντας τις εντολές NSum και NProduct.

In[7]:=NSum[Sqrt[n], n,1,5] Out[7]=8.38233 In[8]:=NProduct[Sqrt[n],n,1,15] Out[8]= 61014354.1 ×

Προσοχή: Απαραίτητη προϋπόθεση για τις αριθµητικές εντολές –δηλαδή τις εντολές µε πρόθεµα N – είναι να µην περιέχονται µέσα σ’ αυτές αφηρηµένες αλγεβρικές παράµετροι, που δεν έχουν προκαθορισµένες αριθµητικές τιµές. Π.χ. οι εντολές

NSum[c*Sqrt[n], n, 1, 15] και NSum[Sqrt[n], n, 1, c] δεν µπορούν να εκτελεστούν όταν το c δεν έχει συγκεκριµένη αριθµητική τιµή. Άσκηση 3.1 Υπολογίστε αναλυτικά και αριθµητικά τα παρακάτω αθροίσµατα και γινόµενα,

α) ∑∞

= +1 )1(1

n nn, στ) ∏

= +

10

1 )1(1

n nn,

β) ∑∞

=14

1n n

, ζ) ∏=

10

1

1n n

,

γ) ∑∞

=16

1n n

, η) ∏=

10

16

1n n

,

Page 57: Theodorou Math Practikos Odigos

3.2 Όριο συνάρτησης

57

δ) ∑∞

=

1n

ne , θ) ∏=

−10

1n

ne ,

ε) ∑∞

= ++1 )2)(1(1

n nnn, ι) ∏

= ++

10

1 )2)(1(1

n nnn.

3.2 Όριο συνάρτησης Το όριο µιας συνάρτησης f(x), στο σηµείο x0, υπολογίζεται µε την εντολή:

Limit[ f[x], x-> x0 ] Παραδείγµατα:

In[1]:= Limit[x*Sin[1/x], x -> 0] Out[1]= 0 In[2]:=Limit[((Exp[x]-1)/x)^(1/x), x 0]

Out[2]= e In[3]:=Limit[x^(1/x), x Infinity] Out[3]=1

Από τα µαθηµατικά ξέρουµε ότι σε ορισµένες περιπτώσεις το όριο εξαρτάται και από τη διεύθυνση µε την οποία προσεγγίζουµε το σηµείο x0. Ένα τέτοιο παράδειγµα είναι το όριο της συνάρτησης xx /)cos( για 0→x . Η γραφική

παράσταση της συνάρτησης αυτής κοντά στο µηδέν δίνεται παρακάτω, In[4]:=Plot[Cos[x]/x,x,-Pi/2,Pi/2];

Page 58: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

58

-1 -0.5 0.5 1

-60

-40

-20

20

40

60

Από τη παραπάνω γραφική παράσταση είναι φανερό ότι το όριο της συνάρτησης ισούται µε ∞+ όταν πλησιάζουµε το µηδέν από τις θετικές τιµές του x, και ∞− όταν το πλησιάζουµε από τις αρνητικές. Η εντολή που καθορίζει και την διεύθυνση προσέγγισης στο x0 έχει τη µορφή

Limit[ f[x], x-> x0, Direction x1 ] Η διεύθυνση προσέγγισης καθορίζεται από το άνυσµα µε αρχή το µηδέν και τέλος το x1. Με βάση την εντολή αυτή παίρνουµε:

In[5]:=Limit[Cos[x]/x, x 0, Direction -1] Out[5]= ∞ In[6]:=Limit[Cos[x]/x, x 0, Direction 1] Out[6]= ∞−

Άσκηση 3.2 Να υπολογισθούν τα όρια,

α) x

xx

)sin(lim0→

, στ) ax

axax −

−>−

)ln()ln(lim ,

β) ⎟⎟⎠

⎞⎜⎜⎝

⎛−

−→ )ln(1

11lim

1 xxx, ζ)

)ln(1lim

1 xx

x

−→

,

γ) limx

xx→

+ −0

9 3, η)

)5tan()8tan(lim

xx

x π→,

Page 59: Theodorou Math Practikos Odigos

3.3 Παράγωγος

59

δ) )ln(/1

0)1(lim xx

xe −

→,

θ) x

x xa

⎟⎠⎞

⎜⎝⎛ +

∞→1lim ,

ε) x

xx

)cos(1lim0

−→

ι) ))2exp(lim( 3 xxx

−∞→

.

3.3 Παράγωγος Η (µερική) παράγωγος µιας συνάρτησης f[x] ως προς x υπολογίζεται στη

Mathematica µε την εντολή: D[f[x], x]

In[1]:= D[Sin[3x^2 + Pi/4], x] Out[1]= 6x Cos[π/4 + 3 x^2] In[2]:=D[x^4 Sin[x]/(1+x^2) , x] Out[2]=(x^4 Cos[x])/(1 + x^2) -(2 x^5 Sin[x])/(1 + x^2)^2 + (4 x^3 Sin[x])/(1 + x^2)

Η παράγωγος n-τάξεως ως προς x υπολογίζεται µε την εντολή: D[ f[x], x, n]

In[3]:= D[Sin[3x^2 + Pi/4], x, 2] Out[3]= 6Cos[π/4 + 3 x^2] - 36x^2 Sin[π/4 + 3 x^2]

Για τον υπολογισµό της µερικής παραγώγου ανωτέρας τάξεως µιας συνάρτησης

πολλών µεταβλητών, ,...],[... yxfyx ∂

∂∂∂

, χρησιµοποιούµε την εντολή:

D[f[x,y,...], x, y,...] In[4]:= D[x^2 y^3, x, y] Out[4]= 6x y^2

Page 60: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

60

Άσκηση 3.3 Υπολογίστε τις παρακάτω παραγώγους.

α) dx

xd )/1ln(, ε) ⎟

⎠⎞

⎜⎝⎛

2

lnx

xdxd

,

β) xxdxd /1 , στ) ⎟

⎠⎞

⎜⎝⎛ +

43sin 22 πx

dxd

,

γ) ( )xxdxd ln)1( 2 + , ζ) ⎟

⎠⎞

⎜⎝⎛ + x

xdxd )11( ,

δ) ( )xxxdxd ln3

2

2

⋅ , η) ⎟⎠⎞

⎜⎝⎛ −+

−)1ln(

1)ln( x

xxx

dxd

.

3.4 Αόριστο ολοκλήρωµα Τα ολοκληρώµατα χωρίζονται σε απλά ολοκληρώµατα συναρτήσεων µιας

µεταβλητής, και πολλαπλά ολοκληρώµατα συναρτήσεων πολλών µεταβλητών. Στη παρούσα παράγραφο θα παρουσιάσουµε τον τρόπο υπολογισµού των ολοκληρωµάτων αυτών µε τη χρήση της Mathematica.

3.4.1 Απλό ολοκλήρωµα

Το αόριστο ολοκλήρωµα συνάρτησης µιας µεταβλητής, ∫ dxxf ][ ,

υπολογίζεται µε την εντολή Integrate[f[x], x]

Στη σύνταξη της εντολής για τον υπολογισµό του ολοκληρώµατος µπορούµε επίσης να χρησιµοποιήσουµε το αντίστοιχο εικονίδιο της παλέτας.

In[1]:=Integrate[1/(1+x^2), x] Out[1]=ArcTan[x]

Υπολογίζοντας τη παράγωγο του παραπάνω αποτελέσµατος, παίρνουµε πίσω την αρχική συνάρτηση

In[2]:=D[%, x]

Page 61: Theodorou Math Practikos Odigos

3.4 Αόριστο ολοκλήρωµα

61

Out[2]=1/(1 + x^2) Επίσης έχουµε

In[3]:=Integrate[x^2/(1+x^2), x] Out[3]=x-ArcTan[x] In[4]:=Integrate[Sqrt[x^2+1], x]

Out[4]= 2/][1)2/1( 2 xArcSinhxx ++

Προσοχή. Για τον υπολογισµό αόριστου ολοκληρώµατος υπάρχει µόνο αναλυτική, και όχι αριθµητική εντολή, και γι’ αυτό η εντολή NIntegrate δεν εφαρµόζεται για την περίπτωση των αόριστων ολοκληρωµάτων.

Άσκηση 3.4 Υπολογίστε τα παρακάτω αόριστα ολοκληρώµατα και στη συνέχεια τη παράγωγο του αποτελέσµατος της ολοκλήρωσης,

α) ( )x x dx2 3 2∫ − + , στ) ∫ dxxx )exp()sin( ,

β) tan ( )2∫ x dx , ζ) ∫ )(cos2 xxdx

,

γ) ∫ −+ xedx

1, η) ∫ + )cos(1

)sin(x

dxx,

δ) ∫+ dxx

x2

ln1, θ) ∫ )(sin 4 x

dx,

ε) ∫ −1)exp(xdx

, ι) ∫ )(cosh 4 xdx

.

Page 62: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

62

3.4.2 Πολλαπλό ολοκλήρωµα

Το πολλαπλό αόριστο ολοκλήρωµα συνάρτησης πολλών µεταβλητών,

∫ ∫ ,...],[... yxfdydx , υπολογίζεται µε την εντολή:

Integrate[f[x, y,...], x, y, ...] Προσοχή. Σηµειώστε ότι στο πολλαπλό ολοκλήρωµα η µεταβλητή που ολοκληρώνεται πρώτη είναι αυτή που δηλώνεται τελευταία µέσα στην εντολή ολοκλήρωσης, µετά η προτελευταία, µέχρι να καταλήξουµε σε αυτή που δηλώνεται πρώτη.

In[5]:=Integrate[x^2 y^3, x, y] Out[5]=(x^3 y^4)/12 In[6]:=D[%, x, y] Out[6]=(x^2 y^3)

Άσκηση 3.5 Υπολογίστε τα παρακάτω αόριστα ολοκληρώµατα και στη συνέχεια τη παράγωγο του αποτελέσµατος της ολοκλήρωσης,

α) ∫ ∫ 22 yxdydx , γ) )sin( yxxdydx +∫∫ ,

β) )sin(2 yxxdydx +∫∫ , δ) )sin( yxxdxdy +∫∫ .

3.5 Ορισµένο ολοκλήρωµα Όπως στη περίπτωση των αόριστων, έτσι και στων ορισµένων, υπάρχουν απλά

και πολλαπλά ολοκληρώµατα.

Page 63: Theodorou Math Practikos Odigos

3.5 Ορισµένο ολοκλήρωµα

63

3.5.1 Απλό ολοκλήρωµα

Η εντολή για τον υπολογισµό του ορισµένου ολοκληρώµατος µιας

συνάρτησης µιας µεταβλητής, ∫2

1

][x

x

dxxf είναι Integrate, όπως και για το αόριστο,

µόνο που τώρα καθορίζονται και τα όρια ολοκλήρωσης, τα οποία µαζί µε το x τοποθετούνται µέσα σε λίστα:

Integrate[f[x], x, x1, x2]

Εκτός από την εντολή για αναλυτικό υπολογισµό, ο οποίος δεν είναι πάντα εφικτός, για το ορισµένο ολοκλήρωµα υπάρχει εντολή και για αριθµητικό υπολογισµό, NIntegrate, η οποία έχει τη µορφή:

NIntegrate[f[x], x, x1, x2] Για την αριθµητική ολοκλήρωση ισχύουν οι προϋποθέσεις των αριθµητικών εντολών, που αναφέραµε παραπάνω (βλ. περίπτωση αριθµητικής άθροισης, §3.1). Παραδείγµατα:

In[1]:= Integrate[1/(1 + x^2), x, 0, ∞] Out[1]= π/2 In[2]:=%//N Out[2]=1.5708 In[3]:=NIntegrate[1/(1+x^2), x, 0, 100] Out[3]=1.5608

Άσκηση 3.6 Υπολογίστε τα παρακάτω ολοκληρώµατα,

α) ∫−2

1

2)12( dxx

x , στ) ∫∞

−0

3

1)exp(dx

xx ,

β) ∫−

−1

1

2 )12( dxxx , ζ) ∫∞

−02

4

)1)(exp()exp( dx

xxx ,

Page 64: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

64

γ) ∫∞

0

2 2

dxex x , η) ∫∞

−0

3/4

1)exp(dx

xx ,

δ) ∫ −10

0

2

dxe x , θ) ∫∞

−−0

1)exp( dttt x ,

ε) ∫∞

+021

1 dxx

, ι) ∫ −

10

0

3

1)exp(dx

xx .

3.5.2 Πολλαπλό ολοκλήρωµα

Το πολλαπλό ορισµένο ολοκλήρωµα µιας συνάρτησης πολλών µεταβλητών,

,...],[...2

1

2

1

yxfdydxy

y

x

x∫∫ , υπολογίζεται µε την εντολή:

Integrate[f[x, y, …], x, x1, x2, y, y1, y2, …] Προσοχή. Όπως στο αόριστο πολλαπλό ολοκλήρωµα, έτσι και στο ορισµένο, η µεταβλητή που ολοκληρώνεται πρώτη είναι αυτή που δηλώνεται τελευταία µέσα στην εντολή ολοκλήρωσης, µετά η προτελευταία, µέχρι να καταλήξουµε σε αυτή που δηλώνεται πρώτη. Παραδείγµατα:

In[4]:= Integrate[x^2 y^3, x, 0, 1, y, 0, 1] Out[4]= 1/12 In[5]:=%//N Out[5]=0.0833333 In[6]:=NIntegrate[x^2 y^3, x, 0, 1,y, 0, 1] Out[6]=0.0833333 In[7]:=Integrate[x^2 y^3, x,0,1 ,y, 0, x] Out[7]=1/28 In[8]:=NIntegrate[x^2 y^3, x,0,1, y, 0, x] Out[8]=0.0357143

Page 65: Theodorou Math Practikos Odigos

3.5 Ορισµένο ολοκλήρωµα

65

Άσκηση 3.7 Υπολογίστε αριθµητικά, και όπου αυτό είναι εφικτό αναλυτικά, τα παρακάτω ολοκληρώµατα,

α) ∫ ∫1

0

1

0

22 yxdydx , στ) ∫ ∫π

0 0

22 )(sin)(sinx

yxdydx ,

β) ∫ ∫1

0 0

22x

yxdydx , ζ) ∫ ∫π π

0 0

)exp( yxxdydx ,

γ) ∫ ∫π π

0 0

)sin( yxdydx , η) ∫ ∫π

0 0

)exp(x

yxxdydx ,

δ) ∫ ∫π

0 0

)sin(x

yxdydx , θ) ∫ ∫ ++π π

0 0

)exp()sin( yxyxdydx ,

ε) ∫ ∫π

0 0

22 )(sin)(sinx

yxdydx , ι) ∫ ∫ ++π

0 0

)exp()sin(x

yxyxdydx .

3.5.3 Ολοκλήρωµα µε συνθήκες

Μερικές φορές θέλουµε να υπολογίσουµε ολοκληρώµατα συναρτήσεων, οι οποίες, εκτός από τις µεταβλητές, εξαρτώνται και από ορισµένες αλγεβρικές παραµέτρους που όµως δεν έχουν προκαθορισµένη αριθµητική τιµή. Ολοκληρώµατα τέτοιων συναρτήσεων ενδέχεται να υπάρχουν µόνο όταν οι παράµετροι που υπεισέρχονται στη συνάρτηση ικανοποιούν κάποιες συνθήκες.

Κλασικό παράδειγµα τέτοιας περίπτωσης είναι το ολοκλήρωµα ∫∞

−0

]exp[ dxxa , το

οποίο έχει πεπερασµένη τιµή µόνο όταν η παράµετρος α ικανοποιεί τη συνθήκη 0>a . Τέτοιου είδους συνθήκες µπορούν να περιληφθούν στην εντολή

ολοκλήρωσης, υπό µορφή λίστας, µε τον ακόλουθο τρόπο: Integrate[f[x], x, x1, x2, Assumptions conditions]

Page 66: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

66

Οι συνθήκες, conditions, µπορεί να είναι µία ή πολλές, δίνονται µε τη χρήση τελεστών σύγκρισης, και χωρίζονται µεταξύ τους µε κόµµατα. Παραδείγµατα

In[9]:=Integrate[Exp[-a*x^4],x, 0, Infinity, Assumptions a>0] Out[9]= (Gamma[5/4]/a^(1/4)) In[10]:=Integrate[(t^(a - 1))((1 - t)^(b - 1)), t, 0, 1, Assumptions Re[a] > 0, Re[b] > 0] Out[10]=(Gamma[a] Gamma[b]) /Gamma[a + b]

Άσκηση 3.8 Υπολογίστε τα παρακάτω ολοκληρώµατα,

α) ∫∞

−0

)exp( dxxa , Re[a]>0, ε) ∫∞

−0 1)exp(dx

xxa

, Re[a]>0,

β) ∫∞

0

1 dxxa , Re[a]>1, στ) ∫

−0

)sin()exp( dxxbxa , Re[a]<0,

Im[b]=0,

γ) ∫∞

−0

2 )exp( dxxbxa , Re[a]>-1,

Re[b]>0,

ζ) ∫∞

−0

2 )sin()exp( dxxbxa , Re[a]<0,

Im[b]=0,

δ) ∫∞

−0

)exp( dxxbxa , Re[a]>-1,

Re[b]>0,

η) ∫∞

−ac dx

xx 111

2 , a>1,

Re[c]>-1.

3.6 Ανάπτυγµα σε σειρά Το ανάπτυγµα µιας συνάρτησης f[x] σε δυναµοσειρά υπολογίζεται µε την εντολή

Series [f[x], x, x0, n]

Page 67: Theodorou Math Practikos Odigos

3.7 Υπολογισµός ρίζας συνάρτησης

67

όπου x0 το σηµείο γύρω από το οποίο γίνεται το ανάπτυγµα και n η τάξη του αναπτύγµατος.

In[1]:= α=Series[x Exp[x^2 + 1], x, 0, 6] Out[1]=e x+e x3+e x5/2+O[x]7

Στο προηγούµενο αποτέλεσµα ο όρος O[x]7 δηλώνει ότι στο ανάπτυγµα αυτό έχουν παραληφθεί όροι εβδόµης τάξης και πάνω. Η παρουσία του όρου O[x]7 στην έξοδο της εντολής καθιστά το αποτέλεσµα αυτό δύσχρηστο, και µε τη µορφή αυτή δεν µπορεί εύκολα να χρησιµοποιηθεί σε επόµενους υπολογισµούς. Η διαγραφή του όρου O[x]7, και η εµφάνιση του στη κανονική µορφή, γίνεται µε την εντολή Normal

In[2]:= Normal[a] Out[2]=e x+e x3+e x5/2 In[3]:=Series[Sin[x]/x, x,0,10]//Normal Out[3]=(1 - x^2/6 + x^4/120 - x^6/5040 + x^8/362880 - x^10/39916800)

Άσκηση 3.9 Υπολογίστε το ανάπτυγµα σε σειρά, µέχρι δεκάτη τάξη, γύρω από το µηδέν, των παρακάτω συναρτήσεων: α) sin(x),

στ) )arctan(1

1x+

,

β) arcsin(x), ζ) ))(exp(arccos x ,

γ) tan(x), η) 23/2 +x , δ) arctan(x), θ) 1 2+ sin ( )x ,

ε) xsin1

1+

, ι) )11ln( 2x

x++

.

3.7 Υπολογισµός ρίζας συνάρτησης Σε αρκετές περιπτώσεις προκύπτει το προβλήµατα εντοπισµού ρίζας µιας

συνάρτησης, f(x), που να βρίσκεται κοντά σε κάποιο σηµείο x=x0. Ο υπολογισµός αυτός γίνεται µε την παρακάτω εντολή

Page 68: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

68

FindRoot[f[x] == 0, x, x0]

In[1]:= r=FindRoot[(3 - x) Exp[x] -3== 0, x, 3] Out[1]= x -> 2.82144

Σχόλια: 1. Το διπλό σύµβολο της ισότητας, ==, είναι ο τελεστής σύγκρισης ίσον και

ελέγχει την ισότητα µεταξύ των δύο όρων σε µια εξίσωση (εντολή ελέγχου), ενώ το απλό ίσον (=) χρησιµοποιείται για να ορίσει τις τιµές των διαφόρων παραµέτρων (εντολή ανάθεσης).

2. Το αποτέλεσµα της παραπάνω εντολής, που το αποδίδουµε στη παράµετρο r, δίνει τη ρίζα της εξίσωσης υπό µορφή µιας λίστας αντικατάστασης, x -> 2.82144, και όχι µε µια σχέση ανάθεσης x=2.82144. Ο τρόπος αυτός παρουσίασης χρησιµοποιείται σε πολλές περιπτώσεις, και µας δίνει τη δυνατότητα χρησιµοποίησης του αποτελέσµατος αυτού σε µια εντολή συντακτικής αντικατάστασης. Με τον τρόπο αυτό µπορούµε να αποδώσουµε το αποτέλεσµα σε µια παράµετρο την οποία θα χρησιµοποιήσουµε στη συνέχεια. Η παραπάνω ρίζα, π.χ. µπορεί να αποδοθεί στη παράµετρο a µε την εντολή:

a=x/.r 3. Η εντολή FindRoot,παρότι δεν έχει το πρόθεµα Ν, είναι αριθµητική,

βασίζεται στη µέθοδο Newton-Raphson, και βρίσκει µια µόνο ρίζα. Μερικές φορές όµως η διαδικασία που χρησιµοποιείται στην παραπάνω εντολή για τον υπολογισµό της ρίζας δεν συγκλίνει, και για την εύρεση της χρειάζεται να καθορισθεί η περιοχή του x µέσα στην οποία πρέπει να γίνει η έρευνα, µε την εντολή

FindRoot[f[x] == 0, x, xmin, xmax] Παράδειγµα:

In[2]:=FindRoot[-x^3+2x+3==0, x, 0] FindRoot::cvnwt:

Page 69: Theodorou Math Practikos Odigos

3.7 Υπολογισµός ρίζας συνάρτησης

69

Newton's method failed to converge to the prescribed accuracy after 15 iterations. Out[2]=x -0.441029

Καθορίζοντας ταυτόχρονα και ότι η περιοχή έρευνας είναι το διάστηµα (0, 2), εντοπίζουµε τη ρίζα της συνάρτησης,

In[3]:=FindRoot[-x^3+2x+3==0, x, 0, 2] Out[3]=x 1.89329

Σχόλιο: Γενικά είναι σκόπιµο, προτού χρησιµοποιηθεί η εντολή FindRoot, να γίνεται πρώτα η γραφική παράσταση της συνάρτησης, για να αποκτάται µια εικόνα της συµπεριφοράς της, και µετά να επιλέγεται το κατάλληλο σηµείο εκκίνησης για τον εντοπισµό της ζητούµενης ρίζας. Παράδειγµα:

Η συνάρτηση 32x-xf(x) 3 ++= , στην οποία εµφανίσθηκαν προβλήµατα

σύγκλησης στο προηγούµενο παράδειγµα, έχει τη παρακάτω γραφική παράσταση, In[4]:=Plot[-x^3+2x+3, x,-2,2]

-2 -1 1 2

2

4

6

Από το σχήµα αυτό είναι φανερό ότι η ζητούµενη ρίζα βρίσκεται κοντά στη τιµή x=1.9. Επιλέγοντας ως σηµείο εκκίνησης το x=1.9 παίρνουµε τη σωστή απάντηση, χωρίς προβλήµατα σύγκλησης,

Page 70: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

70

In[5]:=FindRoot[-x^3+2x+3==0, x, 1.9] Out[5]=x 1.89329

Άσκηση 3.10 Να υπολογισθεί η πλησίον της µονάδος ρίζα των συναρτήσεων: α) x4-3xex+5, γ) x5-x4sin(x)+4x2-4, β) x12+cos(x)-x2-12, δ) x6+5x5-27.

3.8 Προσδιορισµός ακρότατων µιας συνάρτησης Ο προσδιορισµός του τοπικού ελαχίστου µιας συνάρτησης f[x], που

βρίσκεται κοντά σε ένα σηµείο x=x0 ή σε µια περιοχή xmin, xmax, είναι ένα πρόβληµα παρόµοιο µε αυτό του εντοπισµού της ρίζας µιας συνάρτησης (όπως ξέρουµε, το ελάχιστο µιας συνάρτησης προσδιορίζεται από τη ρίζα της πρώτης παραγώγου της). Οι εντολές που υπολογίζουν το τοπικό ελάχιστο είναι

FindMinimum[f[x], x, x0] ή FindMinimum[f[x], x, xmin, xmax]

In[1]:=FindMinimum[x+5*Sin[x], x, 2Pi] Out[1]=-0.387948, x 4.51103 In[2]:=FindMinimum[x+5*Sin[x], x, 4, 5] Out[2]=-0.387948, x 4.51103

Το αποτέλεσµα της παραπάνω εντολής µας δίνει, σα λίστα αντικατάστασης, τόσο την τιµή του τοπικού ελαχίστου (πρώτο στοιχείο της λίστας εξόδου), όσο και την ακριβή του θέση (δεύτερο στοιχείο τις λίστας εξόδου).

Όπως και στη διαδικασία εύρεσης µιας ρίζας, έτσι και στον εντοπισµό του ελαχίστου µιας συνάρτησης, είναι σκόπιµο πρώτα να γίνεται γραφική παράσταση της συνάρτησης αυτής, για να αποκτάται µια εικόνα της συµπεριφοράς της, και µετά να επιλέγεται η τιµή εκκίνησης x=x0 για το προσδιορισµό του ζητούµενου ελαχίστου.

Page 71: Theodorou Math Practikos Odigos

3.8 Προσδιορισµός ακρότατων µιας συνάρτησης

71

Παράδειγµα: Από τη γραφική παράσταση της συνάρτησης )sin(5 xx + ,

In[3]:=Plot[x+5Sin[x],x, 0, 8Pi];

5 10 15 20 25

5

10

15

20

25

είναι φανερό ότι υπάρχουν διαδοχικά τοπικά ελάχιστα, κοντά στα σηµεία x=π(2n+1), µε n=0, 1, 2, …. Χρησιµοποιώντας τις εντολές Table και FindMinimum µπορούµε να προσδιορίσουµε µερικά από τα διαδοχικά αυτά τοπικά ελάχιστα, όπως γίνεται παρακάτω

In[4]:=Table[FindMinimum[x+5*Sin[x],x, Pi*(2i+1)],i,1,4] Out[4]=-0.387948, x 4.51103, 5.89524, x 10.7942, 12.1784, x 17.0774, 18.4616,x 23.3606

Με την εντολή FindMinimum µπορούµε επίσης να προσδιορίσουµε και το

τοπικό µέγιστο µιας συνάρτησης, το οποίο αντιστοιχεί στο ελάχιστο της -f[x], π.χ. In[5]:=FindMinimum[-(x+5*Sin[x]), x, 2Pi] Out[5]=-12.9543, x 8.05534

Η τιµή του µεγίστου ισούται µε το αντίθετο της τιµής που δίνεται στην έξοδο.

Από την έκδοση 5.0, στη Mathematica έχει προστεθεί ιδιαίτερη εσωτερική εντολή για το προσδιορισµό του τοπικού µεγίστου µιας συνάρτησης, που έχει ως εξής

FindMaximum[f[x], x, x0] ή

Page 72: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

72

FindMaximum [f[x], x, xmin, xmax] In[6]:=FindMaximum[x+5*Sin[x], x, 2Pi] Out[6]=12.9543, x 8.05534

Άσκηση 3.11 Να γίνει γραφική παράσταση των παρακάτω συναρτήσεων, και µετά να ευρεθεί το τοπικό τους ελάχιστο στη περιοχή (0, 2π). Αξιοποιώντας τις γραφικές τους παραστάσεις, προσδιορίστε κατάλληλες τιµές εκκίνησης για την εύρεση του ελάχιστου αυτού.

α) 42 xx +− , δ) x

x)sin(,

β) 3xx +− , ε) xex −)cos( ,

γ) 1

12 +

−x

, στ) 2)cos( xx .

3.9 Λύσεις εξισώσεων και συστηµάτων 3.9.1 Λύσεις εξισώσεων

Στη παράγραφο 3.7 είδαµε ότι µε την εντολή FindRoot έχουµε τη δυνατότητα να προσδιορίσουµε τη ρίζα µιας συνάρτησης, οποιασδήποτε µορφής, που βρίσκεται κοντά σε µια τιµή, ή µέσα σε µια περιοχή, του ορίσµατος της. Όταν όµως η συνάρτηση είναι πολυωνυµική, τότε έχουµε τη δυνατότητα να προσδιορίσουµε όλες τις ρίζες της. Ο αριθµητικός υπολογισµός των ριζών ενός πολυωνύµου f[x] γίνεται µε την εντολή:

NSolve[f[x] = = 0, x]

In[1]:= sol=NSolve[x^5 - 3x^2 - 17x + 51 == 0, x]

Page 73: Theodorou Math Practikos Odigos

3.9 Λύσεις εξισώσεων και συστηµάτων

73

Out[1]=sol= x -> -2.36785, x -> -0.561908 - 2.35185 i, x -> -0.561908 + 2.35185 i, x -> 1.74583- 0.797366 i, x ->1.74583 + 0.797366 i.

Η εξίσωση f[x]== 0 µπορεί να αποδοθεί σε µια παράµετρο, και µε τη χρήση αυτής της παραµέτρου να δοθεί η εντολή υπολογισµού των ριζών της, π.χ.

equation = f[x] == 0; NSolve[equation, x] In[2]:= equation = -3x^2 - 17x + 51 == 0 Out[2]= 51 - 17 x - 3 x^2 == 0 In[3]:=solution = NSolve[equation, x] Out[3]= x -> -7.83611, x -> 2.16944

Σχόλιο: Στον προηγούµενο ορισµό της παραµέτρου equation, το πρώτο ίσον είναι απλό και είναι ο τελεστής ανάθεσης που καθορίζει τη παράµετρο, ενώ το δεύτερο και διπλό είναι ο τελεστής ελέγχου της ισότητας των δύο µερών στην εξίσωση. Το αποτέλεσµα της εντολής NSolve είναι µια λίστα που περιέχει επιµέρους λίστες αντικατάστασης, µε τις λύσεις της εξίσωσης. Επιλέγοντας τις διάφορες επιµέρους λίστες, επιλέγουµε τις αντίστοιχες λύσεις της εξίσωσης. Π.χ. το στοιχείο solution[[2]] δίνει, σε µορφή λίστας αντικατάστασης, τη δεύτερη λύση της εξίσωσης,

In[4]:=solution[[2]] Out[4]=x -> 2.16944

Ένας τρόπος για να χρησιµοποιηθούν οι λύσεις αυτές είναι µε το να αποδοθούν οι τιµές τους σε παραµέτρους, π.χ. η εντολή

In[5]:= a = x /. solution[[1]] Out[5]= -7.83611

αποδίδει στο a τη τιµή της πρώτης λύσης της εξίσωσης.

Page 74: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

74

Οι λύσεις που δίνει η NSolve είναι αριθµητικές. Σε περίπτωση που η εξίσωση έχει αναλυτική λύση, τότε οι λύσεις της µπορούν να υπολογισθούν αναλυτικά µε την εντολή Solve, δηλαδή

Solve[equation, x] In[6]:= Solve[-3x^2 - 17x + 51 == 0, x]

Out[6]= )90117(61),90117(

61 +−→−−→ xx

Άσκηση 3.12 Να υπολογισθούν αριθµητικά, και όπου είναι δυνατόν αναλυτικά, οι ρίζες των πολυωνύµων: α) x4-3x+5, στ) x15-3x6+7x2-7, β) x5-x4+4x2-4, ζ) x3-4x2-5x+7, γ) x12+x7-x2+12, η) x4-6x3+17x2-23x-12, δ) x6+5x5-3x+27, θ) x3+5. ε) x7+6x4-3x3+2x-13, ι) 146 +−− xxx

3.9.2 Λύσεις συστηµάτων

Εκτός από εξισώσεις, οι εντολές Solve και NSolve έχουν τη δυνατότητα να προσδιορίζουν και λύσεις συστήµατος. Η εντολή για την αριθµητική λύση ενός συστήµατος είναι

NSolve[eq1, eq2,..., eqn, x1, x2,..., xn]

µε eq1, eq2,..., eqn η λίστα µε τις εξισώσεις του συστήµατος και x1, x2,..., xn µε τις µεταβλητές του. Οι εξισώσεις ενός συστήµατος µπορούν επίσης να αποδοθούν σε παραµέτρους ως εξής:

eq1 = f1[xi] == 0; eq2 = f2[xi] == 0; ...; eqn = fn[xi] == 0 και µετά να δοθεί η εντολή για τη λύση του συστήµατος.

Page 75: Theodorou Math Practikos Odigos

3.9 Λύσεις εξισώσεων και συστηµάτων

75

Παράδειγµα: In[7]:= eq1 = -2x + y == 4; eq2 = y == 2x^2; In[8]:= NSolve[eq1, eq2, x, y] Out[8]= y -> 8., x -> 2., y -> 2., x -> -1. Στη περίπτωση που υπάρχει αναλυτική λύση, τότε αυτή υπολογίζεται µε την

εντολή Solve[eq1, eq2,..., eqn, x1, x2,..., xn]

Το σύστηµα του προηγουµένου παραδείγµατος µπορεί να λυθεί αναλυτικά και η λύση του βρίσκεται µε την εντολή

In[9]:= Solve[eq1, eq2, x, y] Out[9]= y -> 2, x -> -1, y -> 8, x -> 2

Τέλος, όλες οι εξισώσεις ενός συστήµατος µπορούν να αποθηκευτούν σε µια µόνο παράµετρο, π.χ. την equations, υπό µορφή λίστας ως εξής:

equations= f1(x) == 0, f2(x) == 0,..., fn(x) == 0 οπότε η εντολή επίλυσης του είναι:

NSolve[equations, x1, x2,..., xn] In[10]:= equations = -2x + y == 4, y == 2x^2 Out[10]= -2 x + y == 4, y == 2 x^2 In[11]:=solutions = NSolve[equations, x, y] Out[11]= y -> 8., x -> 2., y -> 2., x -> -1.

Άσκηση 3.13 Να λυθούν αναλυτικά, και όπου είναι δυνατόν αριθµητικά, τα συστήµατα: α) 2x-3y=40, 4x+6y=60, β) (m+1)x+8y=4m, m x+(m+3)y=3m-1, γ) x2+y2=25, y-x=1, δ) x2+y2+x y=3, x+y=1,

Page 76: Theodorou Math Practikos Odigos

ΑΝΑΛΥΣΗ ΜΕ ΤΗ MATHEMATICA

76

ε) x2+13y2=5, x y=2, στ) ω+x+y+z=3, 2ω+4x+3y+5z=8, ω-x-y+z=5, ω+3x-7y-z=12.

3.10 Επαλήθευση λύσης Έστω ότι οι εξισώσεις ενός συστήµατος είναι αποθηκευµένες στη

παράµετρο equations, και οι λύσεις στη παράµετρο solutions, τότε µπορούµε να επαληθεύσουµε τη λύση µε την εντολή equations /. solutions Παράδειγµα: Χρησιµοποιώντας τα αποτελέσµατα του παραδείγµατος της προηγουµένης παραγράφου παίρνουµε,

In[1]:= equations /. solutions Out[1]= True, True, True, True,

που επιβεβαιώνει την ορθότητα της λύσης του συστήµατος αυτού.

Πολλές φορές η Mathematica δεν εκτελεί όλες τις απλοποιήσεις στην εντολή επαλήθευσης, και από το αποτέλεσµα της εντολής αυτής δεν είναι φανερό εάν η λύση ικανοποιεί ή όχι την εξίσωση. Για να εκτελεστούν όλες οι απλοποιήσεις, µαυρίζουµε µε το «ποντίκι» το αποτέλεσµα και καλούµε την εντολή FullSimplification. Επίσης, όταν η επίλυση µιας εξίσωσης ή συστήµατος γίνεται µε αριθµητικό τρόπο, τότε η εντολή επαλήθευσης ενδέχεται να µην είναι αποτελεσµατική λόγο αριθµητικών σφαλµάτων στρογγυλοποίησης.

Page 77: Theodorou Math Practikos Odigos

4.1 Πράξεις µε πίνακες

77

ΚΕΦΑΛΑΙΟ 4

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA

Οι εσωτερικές εντολές για εκτέλεση πράξεων της γραµµικής άλγεβρας, που υπάρχουν στη Mathematica, περιλαµβάνουν πολλαπλασιασµό πινάκων (Dot product όπως αναφέρεται στη Mathematica), υπολογισµό ανάστροφου (Transpose), ορίζουσας (Det), αντίστροφου (Inverse), ίχνους (Trace), ιδιοτιµών (Eigenvalues) και ιδιοανυσµάτων (Eigenvectors) ενός πίνακα, κ.λ.π.

4.1 Πράξεις µε πίνακες Στο πρώτο κεφάλαιο είδαµε διάφορους τρόπους ορισµού ενός πίνακα. Τους

πίνακες που θα χρησιµοποιήσουµε στα παρακάτω παραδείγµατα, για ευκολία τους δηµιουργούµε µε τη χρήση της συνάρτησης Random[] που παράγει τυχαίους αριθµούς. ∆ύο τέτοιοι 3x3 πίνακες, A και B, δηµιουργούνται ως εξής1

In[1]:=A=Table[Random[Integer, 0, 9], 3, 3] Out[1]=7, 7, 6, 1, 9, 4, 5, 4, 0 In[2]:=B=Table[Random[Integer, 0, 9], 3, 3] Out[2]=0 ,6, 0, 7, 5, 9, 8, 6, 2

1 Υπόδειξη: Ένας πίνακας διαστάσεων mn × , µε στοιχεία ακέραιους αριθµούς, που επιλέγονται µε τυχαίο τρόπο στο διάστηµα (0, 9), µπορεί να δηµιουργηθεί µε την εντολή a=Table[Random[Integer, 0, 9 ], n, m].

Page 78: Theodorou Math Practikos Odigos

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA

78

Πολλαπλασιασµός πίνακα µε αριθµό: Η εντολή c*A πολλαπλασιάζει τον πίνακα A µε τον αριθµό c, δηλαδή πολλαπλασιάζει κάθε στοιχείο του πίνακα µε τον αριθµό c.

In[3]:=3*A Out[3]=21, 21, 18, 3, 27, 12, 15, 12, 0

Άθροισµα Πινάκων: Το άθροισµα δύο πινάκων Α και Β, µε τις ίδιες διαστάσεις, δίνεται µε την εντολή A+B και παριστά ένα πίνακα µε στοιχεία το άθροισµα των αντίστοιχων στοιχείων των αθροιζόµενων πινάκων.

In[4]:=A+B Out[4]=7, 13, 6, 8, 14, 13, 13, 10, 2

Πολλαπλασιασµός πινάκων: Ο πολλαπλασιασµός µεταξύ δύο πινάκων, από τους οποίους ο πρώτος έχει διαστάσεις nxm και ο δεύτερος mxk, εκτελείται µε την εντολή: A.B

In[5]:=A.B Out[5]=97, 113, 75, 95, 75, 89, 28, 50, 36

Σηµειώστε ότι ο πολλαπλασιασµός µεταξύ πινάκων δηλώνεται µε το σύµβολο της τελείας, και όχι µε το συνηθισµένο σύµβολο του πολλαπλασιασµού αλγεβρικών παραµέτρων, που είναι το αστέρι, «*». Το τελευταίο, όταν χρησιµοποιείται για πίνακες, δηµιουργεί ένα πίνακα που τα στοιχεία του είναι το γινόµενο των αντίστοιχων στοιχείων των επιµέρους πινάκων, π.χ.

In[6]:=A*B Out[6]=0, 42, 0, 7, 45, 36, 40, 24, 0

Ανάστροφος πίνακα: Αναστρέφονται οι σειρές µε τις στήλες του πίνακα A, και ο υπολογισµός γίνεται µε την εντολή Transpose[A]

In[7]:=Transpose[A] Out[7]=7, 1, 5, 7, 9, 4, 6, 4, 0

Ορίζουσα τετραγωνικού πίνακα: Η ορίζουσα ενός τετραγωνικού πίνακα Α υπολογίζεται µε την εντολή: Det[A].

Page 79: Theodorou Math Practikos Odigos

4.1 Πράξεις µε πίνακες

79

In[8]:=Det[A] Out[8]=-218

Αντίστροφος τετραγωνικού πίνακα: Ο αντίστροφος ενός τετραγωνικού πίνακα Α υπολογίζεται µε την εντολή: Inverse[A]. Για να υπάρχει αντίστροφος πρέπει η ορίζουσα του πίνακα να είναι διάφορη του µηδενός.

In[9]:=Inverse[A] Out[9]=8/109, -12/109, 13/109, -10/109, 15/109, 11/109, 41/218, -7/218, -28/109

Πίνακας An: Σύµφωνα µε τους «κανόνες» της Mathematica, ο πίνακας An έχει τα στοιχεία του ίσα µε τη n-οστή δύναµη των στοιχείων του A, π.χ.

In[10]:=A^3 Out[10]=343, 343, 216, 1, 729, 64, 125, 64, 0,

και είναι διαφορετικός από το αποτέλεσµα που προκύπτει εκτελώντας τον πολλαπλασιασµό Α.A.A...A, n-φορές. Σηµειώστε επίσης ότι ο παραπάνω «κανόνας» της Mathematica είναι διαφορετικός από αντίστοιχους «κανόνες» που ακολουθούν άλλες γλώσσες αλγεβρικού προγραµµατισµού. Πίνακας A.A.A....A: Το γινόµενο ενός τετραγωνικού πίνακα A µε τον εαυτόν του n φορές υπολογίζεται µε την εντολή MatrixPower[A, n].

In[11]:=MatrixPower[A, 3] Out[11]=1088, 2106, 1060, 566, 1356, 632, 574, 1096, 518

MatrixExp[A]: Η εντολή αυτή υπολογίζει, για ένα τετραγωνικό πίνακα A, το

άθροισµα ∑∞

=0!/

n

n nA .

In[12]:=MatrixExp[A]//Ν

Στο παραπάνω παράδειγµα, το αποτέλεσµα ζητείται να είναι αριθµητικό. Ίχνος Πίνακα: Το ίχνος (trace) ενός πίνακα A υπολογίζεται µε την εντολή Tr[A].

In[13]:=Tr[A] Out[13]=16

Page 80: Theodorou Math Practikos Odigos

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA

80

Άσκηση 4.1

Έστω οι πίνακες ⎟⎟⎠

⎞⎜⎜⎝

⎛=

xxx1

A , και ⎟⎟⎟

⎜⎜⎜

⎛=

xx

x

4112

24B .

Υπολογίστε, (α) τις ορίζουσες και (β) τους ανάστροφους των πινάκων αυτών. Υπολογίστε τη τιµή του x για την οποία (i) οι ορίζουσες των πινάκων, και (ii) οι ορίζουσες των ανάστροφων πινάκων, µηδενίζονται. Επαναλάβατε τους παραπάνω υπολογισµούς για τους πίνακες C=Α.Α και D=Β.Β. Άσκηση 4.2 Για τον πίνακα Α της άσκησης 4.1 υπολογίστε τους πίνακες Α.Α, Α.Α.Α.Α και MatrixExp[Α]. Επαναλάβατε τη διαδικασία αυτή και για τους πίνακες Β, C, και D της προηγούµενης άσκησης.

4.2 Λύσεις γραµµικών συστηµάτων Έστω Α τετραγωνικός πίνακας διαστάσεων nxn και x και b δύο

µονοδιάστατοι πίνακες µήκους n, που ικανοποιούν το γραµµικό σύστηµα A.x=b. Όταν οι πίνακες A και b είναι γνωστοί, και Det[A]≠0, τότε ο πίνακας x µπορεί να προσδιοριστεί από τη λύση του συστήµατος, που δίνεται µε την εντολή

x=LinearSolve[A, b] Παράδειγµα: Έστω Α ο πίνακας που δίνεται στη παράγραφο 4.1, και b ο παρακάτω µονοδιάστατος πίνακας µε µήκος 3,

In[1]:=b=Table[Random[Integer, 0, 9],3] Out[1]=6,3,1,

τότε η λύση του συστήµατος A.x=b είναι η ακόλουθη In[2]:=LinearSolve[A, b] Out[2]=25/109, -4/109, 169/218

Page 81: Theodorou Math Practikos Odigos

4.3 Ιδιοτιµές και Ιδιοανύσµατα

81

Το ίδιο αποτέλεσµα το βρίσκουµε και µε την εντολή

In[3]:=Inverse[A].b Out[3]= 25/109, -4/109, 169/218

Άσκηση 4.3 Να λυθεί το σύστηµα uxA =⋅ ως προς x, µε

(α) ⎟⎟⎠

⎞⎜⎜⎝

⎛−=

2311

A και )1,3(=u ,

(β) ⎟⎟⎟

⎜⎜⎜

⎛=

241142124

A και )1,0,0(=u .

4.3 Ιδιοτιµές και Ιδιοανύσµατα 4.3.1 Ιδιοτιµές τετραγωνικού πίνακα

Οι ιδιοτιµές ενός τετραγωνικού πίνακα Α υπολογίζονται µε την εντολή: Eigenvalues[A]. Παράδειγµα: Για τον πίνακα Α που δίνεται στη παράγραφο 4.1 έχουµε

In[1]:=a1=Eigenvalues[A]//N//Chop Out[1]=14.2183, -3.12487, 4.90654

Τα αποτελέσµατα αποδίδονται µε µία µονοδιάστατη λίστα, µε στοιχεία τις ιδιοτιµές του πίνακα. Το στοιχείο a1[[i]] της λίστας αυτής δίνει τη i ιδιοτιµή του πίνακα. Η εντολή //N, στο παραπάνω παράδειγµα, συνεπάγεται ότι ο υπολογισµός είναι αριθµητικός, ενώ η εντολή Chop µετατρέπει µια αριθµητική τιµή πολύ κοντά στο µηδέν, σε ακριβώς µηδέν.

Page 82: Theodorou Math Practikos Odigos

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA

82

4.3.2 Ιδιοανύσµατα τετραγωνικού πίνακα

Τα ιδιοανύσµατα ενός τετραγωνικού πίνακα Α υπολογίζονται µε την εντολή: Eigenvectors[A]. Παράδειγµα: Για τον πίνακα Α που δίνεται στη παράγραφο 4.1 έχουµε

In[2]:=a2=Eigenvectors[A]//N//Chop Out[2]=1.93396, 1.13714, 1., -0.38656, -0.298019, 1., 2.1913, -1.51248, 1.

Ο δισδιάστατος πίνακας a2 περιλαµβάνει τα ιδιοανύσµατα του πίνακα Α, και κάθε εσωτερική λίστα δίνει και ένα απ’ αυτά. Η εσωτερική λίστα a2[[i]] δίνει το i-ιδιοάνυσµα του πίνακα, το δε στοιχείο a2[[i, j]] τη j-συνιστώσα του ιδιοανύσµατος αυτού, π.χ.

In[3]:=a2[[2]] Out[3]=-0.38656, -0.298019, 1. In[4]:=a2[[2,1]] Out[4]=-0.38656

3.4.3 Ιδιοτιµές και ιδιοανύσµατα τετραγωνικού πίνακα

Οι ιδιοτιµές και τα ιδιοανύσµατα ενός τετραγωνικού πίνακα Α υπολογίζονται ταυτόχρονα µε την εντολή: Eigensystem[A].

Παράδειγµα: Για τον πίνακα Α που δίνεται στη παράγραφο 4.1 έχουµε

In[5]:=a3=Eigensystem[A]//N//Chop Out[5]=14.2183, -3.12487, 4.90654, 1.93396, 1.13714, 1., -0.38656, -0.298019, 1., 2.1913, -1.51248, 1.

Η πρώτη εσωτερική λίστα του a3 περιέχει τις ιδιοτιµές και η δεύτερη τα ιδιοανύσµατα του πίνακα. Άρα το a3[[1, i]] δίνει την i-ιδιοτιµή και a[[2, i]] το i-ιδιοάνυσµα του πίνακα.

Page 83: Theodorou Math Practikos Odigos

4.3 Ιδιοτιµές και Ιδιοανύσµατα

83

In[6]:=a3[[1,2]] Out[6]=-3.12487 In[7]:=a3[[2,1]] Out[7]=1.93396, 1.13714, 1.

3.4.4 Επαλύθεση ιδιοτιµών - ιδιοανυσµάτων

Μπορούµε να επιβεβαιώσουµε ένα ζευγάρι ιδιοτιµής-ιδιοανύσµατος, π.χ. το δεύτερο, µε εντολή

In[8]:=A.a3[[2,2]]==a3[[1,2]]a3[[2,2]]//Simplify//Chop Out[8]=True

Πολλές φορές η Mathematica δεν εκτελεί όλες τις απλοποιήσεις στην εντολή επαλήθευσης, και από το αποτέλεσµα της εντολής επαλήθευσης δεν είναι φανερή η ορθότητα της λύσης. Για να εκτελεστούν όλες οι απλοποιήσεις, µαυρίζουµε µε το «ποντίκι» το αποτέλεσµα και καλούµε την εντολή FullSimplification. Επίσης, όταν η εκτέλεση των πράξεων γίνεται µε αριθµητικό τρόπο, τότε η εντολή της επαλήθευσης ενδέχεται να µην είναι αποτελεσµατική λόγο αριθµητικών σφαλµάτων στρογγυλοποίησης. Άσκηση 4.4 ∆ηµιουργήστε τρεις 44× τετραγωνικούς πίνακες, A, B, και C, και (α) υπολογίστε τους ανάστροφους, τις ορίζουσες και τους αντίστροφους των πινάκων αυτών και (β), τις ιδιοτιµές και ιδιοανύσµατα τόσο των πινάκων A, B, και C όσο και των αντίστροφων τους. Επιβεβαιώστε τους αντίστροφους, πολλαπλασιάζοντας τον καθένα απ΄ αυτούς µε τον αντίστοιχο πίνακα. Βρείτε τη σχέση που υπάρχει µεταξύ των ιδιοτιµών ενός πίνακα και αυτών του αντιστρόφου του.

Page 84: Theodorou Math Practikos Odigos

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡA ΜΕ ΤΗ MATHEMATICA

84

Page 85: Theodorou Math Practikos Odigos

5.1 Ορισµός συνάρτησης

85

ΚΕΦΑΛΑΙΟ 5

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Στα προηγούµενα κεφάλαια χρησιµοποιήσαµε εσωτερικές συναρτήσεις για την εκτέλεση πράξεων µε τη Mathematica. Εκτός όµως από τις συναρτήσεις αυτές, υπάρχει η δυνατότητα προγραµµατισµού από το χρήστη νέων (εξωτερικών) συναρτήσεων. Το παρόν κεφάλαιο αποτελεί µια εισαγωγή στους κανόνες που διέπουν το προγραµµατισµό των συναρτήσεων αυτών, ο οποίος αποκαλείται και συναρτησιακός προγραµµατισµός.

5.1 Ορισµός συνάρτησης Όταν σ’ ένα πρόβληµα εµφανίζεται µια µαθηµατική έκφραση, η οποία

πρόκειται να υπολογισθεί αρκετές φορές, για διάφορες τιµές των παραµέτρων της, τότε είναι προτιµότερο να ορίσουµε για το σκοπό αυτό µια συνάρτηση που να χρησιµοποιείται για την εκτέλεση των υπολογισµών αυτών. Στη Mathematica, ο απλούστερος τρόπος ορισµού µιας συνάρτησης µιας µεταβλητής είναι ο ακόλουθος:

name[x_]: = f[x] όπου name το όνοµα της καινούργιας συνάρτησης, µε το σύµβολο της υπογράµµισης, _, που ακολουθεί το όνοµα της µεταβλητής, να αποτελεί ουσιαστικό στοιχείο του ορισµού, και να συνεπάγεται ότι στην αφηρηµένη αυτή µεταβλητή, που έχει το ρόλο του ορίσµατος της καινούργιας συνάρτησης, µπορεί να αποδοθεί

Page 86: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

86

οποιαδήποτε τιµή. Η συγκεκριµένη έκφραση της καινούργιας συνάρτησης καθορίζεται από το f[x]. Προσοχή: Ένας ορισµός της µορφής name[x]: = f[x], µε το x, στο πρώτο µέρος της εντολής, χωρίς το σύµβολο της υπογράµµισης, _, γίνεται αποδεκτός από τη Mathematica, όµως η ποσότητα name[x] έχει ιδιότητες παραµέτρου και όχι συνάρτησης ∆ηλαδή στο x δεν µπορεί να αποδοθεί καµιά τιµή, και η εντολή πρέπει να εκτελεστεί µε το όνοµα name[x]. Παραδείγµατα: Οι παρακάτω εντολές ορίζουν τις συναρτήσεις 3x και )sin(2 xx , µε ονόµατα cube

και f1 αντίστοιχα, In[1]:=cube[x_]:=x^3 In[2]:=f1[x_]:=x^2*Sin[x]

Ένας διαφορετικός τρόπος ορισµού µιας συνάρτησης είναι ο ακόλουθος:

name:=Function[x, f[x] ] Χρησιµοποιώντας το τρόπο αυτό οι παραπάνω συναρτήσεις cube και f1 ορίζονται ως εξής:

In[3]:=cube:=Function[x, x^3] In[4]:=f1:=Function[x, x^2*Sin[x]]

Τέλος ένας πιο συµπαγής τρόπος ορισµού µιας συνάρτησης είναι ο παρακάτω:

name:= f[#]& µε το σύµβολο # να δηλώνει το όρισµα της συνάρτησης και το &, το τέλος της εντολής. Με το τελευταίο τρόπο οι παραπάνω συναρτήσεις cube και f1 ορίζονται ως εξής:

In[5]:=cube:=#^3& In[6]:=ff1:=#^2*Sin[#]&

Page 87: Theodorou Math Practikos Odigos

5.1 Ορισµός συνάρτησης

87

Έχοντας ορίσει µια συνάρτηση, µπορούµε κατόπιν να τη χρησιµοποιήσουµε σε οποιοδήποτε επόµενο υπολογισµό, καλώντας την µε το όνοµα της και καθορίζοντας τη τιµή του ορίσµατος της, π.χ.

In[7]:=cube[2.1] Out[7]=9.261 In[8]:=f1[4.2] Out[8]=-15.3746

Τις παραπάνω συναρτήσεις µπορούµε επίσης να τις χρησιµοποιήσουµε σε γραφικές παραστάσεις, όπως π.χ. γίνεται στις επόµενες εντολές,

In[9]:=Plot[cube[x],x,0,10]

2 4 6 8 10

100

200

300

400

500

600

και

In[10]:=Plot[f1[x],x,0,4Pi]

Page 88: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

88

2 4 6 8 10 12

-125

-100

-75

-50

-25

25

50

Τέλος πρέπει να έχουµε υπόψη µας ότι τα ονόµατα των εξωτερικών συναρτήσεων δεν µπορούν να συµπίπτουν µε ονόµατα εσωτερικών συναρτήσεων που είναι προστατευµένα και έτσι δεν µπορούν να χρησιµοποιηθούν για ονόµατα καινούργιων συναρτήσεων. Προσπαθώντας π.χ. να ορίσουµε µια εξωτερική συνάρτηση µε το όνοµα Sin[x], παίρνουµε την απάντηση

In[11]:=Sin[x_]:=x^3/(x^2+1) SetDelayed :: write : Tag Sin in Sin[x_] is Protected. Out[11]=$Failed

που υποδηλώνει το γεγονός αυτό, δηλαδή ότι ο τίτλος Sin στη Sin[x_] είναι προστατευµένος. Επειδή τα ονόµατα των εσωτερικών συναρτήσεων αρχίζουν πάντα µε κεφαλαίο γράµµα, ένας πρακτικός κανόνας για να τις ξεχωρίζουµε από αυτές που ορίζονται από το χρήστη, και να αποφεύγεται η δηµιουργία προβληµάτων όπως το προηγούµενο, είναι η χρησιµοποίηση για τις τελευταίες ονοµάτων που αρχίζουν από µικρά γράµµατα, πάντα του Αγγλικού αλφαβήτου. Συναρτήσεις περισσοτέρων µεταβλητών

Για περισσότερες µεταβλητές, ο προγραµµατισµός µιας συνάρτησης είναι ο ακόλουθος:

name[x_, y_, ...]: = f[x, y, ...] ή γίνεται ως εξής:

Page 89: Theodorou Math Practikos Odigos

5.1 Ορισµός συνάρτησης

89

name:=Function[x, y, .., f[x, y, ...] ] ή τέλος µε τον ακόλουθο πιο συµπαγή τρόπο:

name := f[#1, #2, ... ]& µε #1 να δηλώνει τη πρώτη µεταβλητή της συνάρτησης, #2 τη δεύτερη κοκ. Παράδειγµα: Η συνάρτηση x2+y2 µπορεί να ορισθεί µε τους ακόλουθους τρόπους:

In[12]:= f2[x_, y_] := x^2 + y^2 ή

In[13]:= f2 := Function[ x, y, x^2 + y^2 ] ή

In[14]:= f2 := #1^2 + #2^2 & Ένα παράδειγµα χρήσης της συνάρτησης f2(x) είναι το παρακάτω

In[15]:=D[f2[x, y], x] Out[15]=2 x

Άσκηση 5.1

Ορίστε τη συνάρτηση 3x χωρίς να χρησιµοποιήσετε το σύµβολο της υπογράµµισης στο όρισµα της, δηλαδή µε τη σχέση 3^][ xxfwrong = , και κατόπιν προσπαθήστε

να υπολογίστε τις ποσότητες, fwrong[x], fwrong[1], και fwrong[a]. ∆ικαιολογείστε τα αποτελέσµατα που πήρατε. Επαναλάβετε τους παραπάνω υπολογισµούς αφού όµως πρώτα ορίσετε σωστά τη συνάρτηση. Άσκηση 5.2 Ορίστε τις παρακάτω συναρτήσεις

α) x

x)sin(, ζ)

)ln(1

xx −

,

β) ⎟⎟⎠

⎞⎜⎜⎝

⎛−

− )ln(1

11

xx, η)

)5tan()8tan(

xx

,

Page 90: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

90

γ) x

x 39 −+, θ)

x

x⎟⎠⎞

⎜⎝⎛ +

11 ,

δ) )ln()1( xxe − , ι) 3( exp( 2 ))x x− ,

ε) x

x)cos(1− ια)

xx

xe

/11

⎟⎟⎠

⎞⎜⎜⎝

⎛ −,

στ) 2

)2ln()ln(−−

xx

, ιβ) xx /1 .

Χρησιµοποιώντας τους ορισµούς αυτούς κάντε τις γραφικές τους παραστάσεις στο διάστηµα (1, 5). Άσκηση 5.3 Ορίστε τις παρακάτω εξωτερικές συναρτήσεις α) sin(x+y)+3sin(x)+5cos(y), β) x sin(y)+y cos(x), γ) sin(x) cos(y)+cos(x y). Χρησιµοποιώντας τα ονόµατα που θα τους δώσετε, δηµιουργήστε τις τρισδιάστατες γραφικές τους παραστάσεις στη περιοχή ),()2,0( πππ −× .

5.2 Ανώνυµες (καθαρές) συναρτήσεις Όταν η συνάρτηση που θέλουµε να ορίσουµε πρόκειται να χρησιµοποιηθεί

µία και µόνο φορά, τότε µπορούµε να ορίσουµε και να εκτελέσουµε τη συνάρτηση αυτή ταυτόχρονα, χωρίς να της αποδώσουµε ένα όνοµα. Αυτό γίνεται µε µια από τις εντολές:

Function[x, f[x] ][y] ή

F[#]&[y] Με τις εντολές αυτές ορίζεται µια ανώνυµη συνάρτηση που ισούται µε την έκφραση f(x), και ταυτόχρονα υπολογίζεται η τιµή της για x=y. Π.χ. οι εντολές

Page 91: Theodorou Math Practikos Odigos

5.3 Ανάθεση µε ή χωρίς αναβολή

91

In[1]:=Function[x, x^3][2] Out[1]=8 In[2]:=#^3&[2] Out[2]=8

ορίζουν και ταυτόχρονα εκτελούν τη συνάρτηση 3x για τη τιµή 2=x , χωρίς όµως να αποδίδεται σ’ αυτήν όνοµα. Στις περιπτώσεις αυτές, στο πρώτο µέρος της εντολής, µε τη δήλωση #^3& ή Function[x,x^3], ορίζεται η συνάρτηση, και κατόπιν µε το δεύτερο µέρος, µε τη δήλωση ]2[ , γίνεται ο υπολογισµός της στο σηµείο

2=x . Με παρόµοιο τρόπο µπορούµε να ορίσουµε και να εκτελέσουµε µια συνάρτηση περισσοτέρων µεταβλητών, π.χ.

In[3]:=Function[x, y, x^2+y^2][2, 2] Out[3]=8 In[4]:=#1^2+#2^2&[2, 2] Out[4]=8

Οι παραπάνω συναρτήσεις καλούνται ανώνυµες ή καθαρές (anonymous ή pure).

5.3 Ανάθεση µε ή χωρίς αναβολή Στους παραπάνω ορισµούς των συναρτήσεων χρησιµοποιείται το διπλό

σύµβολο := (ίσον µε αναβολή, ή ανάθεση µε αναβολή). Σε αυτό το διπλό σύµβολο, η εντολή : σηµαίνει αναβολή στην εκτέλεση της εντολής ανάθεσης που προκαλεί το ίσον, και συνεπάγεται ότι η ανάθεση θα γίνει τη στιγµή που ζητείται να γίνει υπολογισµός των τιµών και όχι τη στιγµή του ορισµού της συνάρτησης. Αυτός ο ορισµός έχει επιπτώσεις στο αποτέλεσµα όταν στη συνάρτηση υπάρχουν παράµετροι οι τιµές των οποίων ενδέχεται να αλλάζουν κατά τη διάρκεια των υπολογισµών. Έτσι ένας ορισµός της µορφής f[x_]:=a Sin[x] συνεπάγεται ότι η τιµή του a που θα χρησιµοποιηθεί είναι αυτή που υπάρχει τη στιγµή του υπολογισµού της συνάρτησης, και όχι τη στιγµή του ορισµού της. Έτσι µια ενδιάµεση αλλαγή της τιµής της παραµέτρου a λαµβάνεται υπ’ όψιν στους µετέπειτα υπολογισµούς. Στις περιπτώσεις όµως που θέλουµε να χρησιµοποιηθούν

Page 92: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

92

οι τιµές των παραµέτρων που υπάρχουν τη στιγµή του ορισµού, τότε στον ορισµό της συνάρτησης πρέπει να χρησιµοποιηθεί το σύµβολο της απλής ανάθεσης (=) και όχι της ανάθεσης µε αναβολή (:=), π.χ.

f[x_]=a Sin[x] Μια άλλη περίπτωση στην οποία πρέπει να χρησιµοποιηθεί η εντολή της απλής ανάθεσης (=), είναι όταν στο δεύτερο µέρος της συνάρτησης υπάρχουν εκκρεµείς πράξεις που πρέπει να εκτελεστούν την στιγµή του ορισµού της συνάρτησης και όχι την στιγµή του υπολογισµού της. Μια χαρακτηριστική περίπτωση είναι η παρακάτω

ff1[x_]:=D[Sin[x], x] και

ff2[x_]=D[Sin[x], x] Εκτελώντας την εντολή ff1[π], παίρνουµε το παρακάτω σχόλιο

In[1]:=ff1[x_]:=D[Sin[x], x] In[2]:=ff1[Pi]

General :: ivar : π is not a valid variable. Out[2]= 0π∂

που οφείλεται στο γεγονός ότι πρώτα υπολογίζεται η τιµή της συνάρτησης στο π (που ισούται µε µηδέν) και µετά γίνεται προσπάθεια υπολογισµού της παραγώγου ως προς τη παράµετρο x, στην οποία όµως έχει ήδη δοθεί η τιµή x=π, και αυτό δεν είναι επιτρεπτό στη Mathematica. Στο δεύτερο όµως ορισµό της συνάρτησης επιβάλλεται άµεσα η εκτέλεση της παραγώγου, οπότε έχουµε

In[3]:=ff2[x_]=D[Sin[x], x] Out[3]=Cos[x] In[4]:=ff2[Pi] Out[4]=-1

δηλαδή παίρνουµε το σωστό αποτέλεσµα.

Page 93: Theodorou Math Practikos Odigos

5.4 Συντακτική αντικατάσταση µε ή χωρίς αναβολή

93

Άσκηση 5.4 Ορίστε τις παρακάτω συναρτήσεις:

α) )sin()(1 2 xxxf = , γ) ]1,1,1[)(3 −<= xIfxf

β) ]1,1,[)(2 −<= axIfxf , a=1 δ) 422)(4 xxxf +−= ,

χρησιµοποιώντας τις εντολές := και =. Κατόπιν, χρησιµοποιώντας τα ονόµατα των συναρτήσεων αυτών κάντε τις γραφικές τους παραστάσεις στο διάστηµα (-π, π). Σχολιάστε τη διαφορά των αποτελεσµάτων (εάν υπάρχουν) µεταξύ των δύο ορισµών, και εξηγείστε γιατί συµβαίνει αυτό. Άσκηση 5.5 Γράψτε µια συνάρτηση µιας µεταβλητής, x, η οποία επιστρέφει τη λίστα x, x2. Χρησιµοποιώντας τη συνάρτηση αυτή δηµιουργείστε ένα πίνακα µε τα ζευγάρια τιµών x, x2, µε x από µηδέν έως δύο, µε βήµα 0.1. Κατόπιν κάντε γραφική παράσταση των σηµείων αυτών. Άσκηση 5.6 Γράψτε συναρτήσεις µε καθορισµένο όνοµα οι οποίες αποδίδουν τις παρακάτω ανώνυµες συναρτήσεις, α) (#^3)& γ) (#, - # ^2+#^4)& β) (# ^ #)& δ) If[#>0, #, - #]& Για τον ορισµό τους χρησιµοποιείστε και τους τρεις διαφορετικούς τρόπους ορισµού µιας συνάρτησης.

5.4 Συντακτική αντικατάσταση µε ή χωρίς αναβολή Είδαµε παραπάνω, ότι ο ορισµός µιας συνάρτησης µπορεί να γίνει µε ή

χωρίς την εντολή της αναβολής (:). Παρόµοια διαδικασία αναβολής υπάρχει και στην εντολή της συντακτικής αντικατάστασης που ορίσαµε στη παράγραφο 1.12. Είχαµε ήδη παρουσιάσει ότι µε την εντολή f[x] /. x→ x0 υπολογίζεται η τιµή της συνάρτησης f[x] για τη τιµή του ορίσµατος x=x0. Σε αρκετές όµως περιπτώσεις έχει σηµασία η σειρά µε την οποία εκτελούνται οι υπολογισµοί, αν δηλαδή πρώτα

Page 94: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

94

αποδίδεται η τιµή x0 στο x και µετά υπολογίζεται η f[x] µε το x ως αριθµητική παράµετρο, ή αν πρώτα υπολογίζεται η f[x] µε το x ως αλγεβρική παράµετρο χωρίς καθορισµένη αριθµητική τιµή, και µετά αποδίδεται σ’ αυτήν η αριθµητική τιµή x0. Η πρώτη περίπτωση αντιστοιχεί στη συντακτική αντικατάσταση χωρίς αναβολή, όπως την είχαµε ορίσει στη παράγραφο 1.12, ενώ η δεύτερη σε αντικατάσταση µε αναβολή, και η εντολή εκτελείται µε τον ακόλουθο τρόπο

f[x] /. x :> x0 Ένα παράδειγµα, µε διαφορετικά αποτελέσµατα για τις δύο αυτές περιπτώσεις, είναι το παρακάτω

In[1]:=Table[x,4]/.x Random[] Out[1]=0.204709, 0.204709, 0.204709, 0.204709 In[2]:=Table[x,4]/.x:>Random[] Out[2]=0.379264, 0.839952, 0.0745168, 0.859175

Στη πρώτη περίπτωση αντικαθίσταται το x µε το αποτέλεσµα µιας εκτέλεσης της συνάρτησης Random[] και µετά δηµιουργείται ο πίνακας, ενώ στη δεύτερη πρώτα δηµιουργείται ο πίνακας και µετά για κάθε στοιχείο του πίνακα έχουµε και µια καινούργια εκτέλεση της Random[], και έτσι τώρα προκύπτει ένας πίνακας µε διαφορετικά στοιχεία.

5.5 Συµβολισµός παραγώγου Είδαµε στο δεύτερο κεφάλαιο, ότι η παράγωγος ως προς x µιας συνάρτησης

f(x) δηλώνεται µε το σύµβολο D[f[x], x]. Όταν όµως θέλουµε να παραγωγίσουµε µια συνάρτηση µιας µόνο µεταβλητής ως προς το όρισµα της µπορούµε να χρησιµοποιήσουµε το γνωστό συµβολισµό της παραγώγου µε το σύµβολο του τόνου, ’, που είναι αποδεκτός από τη Mathematica. Οπότε έχουµε

D[f[x],x] f’[x] D[f[x], x, 2] f’’[x], κ.ο.κ.

Σηµειώστε ότι ο τόνος προηγείται του ορίσµατος της συνάρτησης και ότι συµβολίζει παράγωγο ως προς το συνολικό όρισµα, οπότε ο συµβολισµός

Page 95: Theodorou Math Practikos Odigos

5.6 Συναρτήσεις µε συνθήκες

95

]2^[' yxf + σηµαίνει παράγωγο ως προς yx +2 , και όχι ως προς x ή y. Σε µια

τέτοια συνάρτηση, εάν θέλουµε να παραγωγίσουµε ως προς x θα πρέπει να χρησιµοποιήσουµε το συµβολισµό D[f[x^2+y], x], οπότε έχουµε

In[1]:=Sin'[x^2+y] Out[1]=Cos[x^2 + y] In[2]:=D[Sin[x^2+y], x] Out[2]=2 x Cos[x^2 + y]

Η παραπάνω παραγώγιση που εκτελείται µε το σύµβολο του τόνου είναι φυσικά διαφορετική από την ολική παράγωγο ως προς x µιας συνάρτησης που ορίζεται στα µαθηµατικά, και η οποία στη Mathematica συµβολίζεται µε το Dt.

In[3]:=Dt[Sin[x^2+y],x] Out[3]=Cos[x^2 + y](2 x + Dt[y, x])

5.6 Συναρτήσεις µε συνθήκες Σε πολλές περιπτώσεις εµφανίζονται συναρτήσεις που η τιµή τους

εξαρτάται από την ικανοποίηση συγκεκριµένων συνθηκών. Μπορούµε να προγραµµατίσουµε µε τη Mathematica τέτοιες συναρτήσεις. Οι συνθήκες αυτές µπορεί να αναφέρονται:

5.6.1 Στο είδος της µεταβλητής

Σ’ αυτή τη περίπτωση ορίζουµε τη συνάρτηση µόνο για ένα συγκεκριµένο είδος µεταβλητής, π.χ. για ακέραιες τιµές του x, και ο προγραµµατισµός της έχει τη µορφή: name[x_type]: = f[x] όπου για το τύπο (type) της µεταβλητής µπορούµε να χρησιµοποιήσουµε τις περιπτώσεις Integer, Real, Rational, Complex, Symbol, String, List. Παράδειγµα: Η συνάρτηση

Page 96: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

96

In[1]:=fun1[n_Integer] := n!

ορίζεται µόνο για ακέραιες τιµές του x. Όποτε έχουµε In[2]:=fun1[3] Out[2]=6,

ενώ η εκτέλεση της για µια µη ακέραια τιµή του x δεν δίνει αποτέλεσµα, In[3]:=fun1[3.1] Out[3]=fun1[3.1]

Έχοντας ορίσει την fun1[n], µπορούµε π.χ. να υπολογίσουµε τις τιµές της για n=1-10, και να τις αποθηκεύσουµε στον πίνακα A µε την εντολή:

In[4]:=A = Table[ fun1[n], n, 1, 10] Out[4]=1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800

Άσκηση 5.7 Για ακέραιες τιµές του n, ορίστε τις παρακάτω συναρτήσεις:

α) 2)(1 nnf = , γ) )ln()(3 nnf = ,

β) 1)(2 += nnf , δ) )exp()(4 nnf = .

Χρησιµοποιώντας τα ονόµατα των συναρτήσεων αυτών δηµιουργήστε πίνακες µε τις τιµές τους για n=1-10, και κατόπιν χρησιµοποιώντας τους πίνακες αυτούς κάντε τις αντίστοιχες γραφικές παραστάσεις.

5.6.2 Στις περιοχές τιµών της µεταβλητής

Μπορούµε να ορίσουµε συναρτήσεις οι οποίες εξαρτώνται και από τις περιοχές τιµών του x. Οι συνθήκες που καθορίζουν τις συναρτήσεις αυτές επιβάλλονται µε τη χρήση τελεστών σύγκρισης που εισάγονται µετά το σύµβολο /; το οποίο τοποθετείται µέσα στο όρισµα ή στο τέλος της συνάρτησης. Ένα παράδειγµα µιας τέτοιας συνάρτησης δίνεται παρακάτω,

In[5]:=step[x_ /; x >= 0] := 1 In[6]:=step[x_ /; x < 0] := -1

Page 97: Theodorou Math Practikos Odigos

5.6 Συναρτήσεις µε συνθήκες

97

Η παραπάνω συνάρτηση µπορεί επίσης να προγραµµατισθεί µε τη εισαγωγή των συνθηκών στο τέλος κάθε εντολής

In[7]:=step[x_] := 1 /; x >= 0 In[8]:=step[x_] := -1 /; x < 0

Η παραπάνω συνάρτηση ορίζεται µε διαφορετική εντολή για κάθε ένα από τα διαστήµατα του x που καθορίζουν οι συνθήκες, και για το συγκεκριµένο παράδειγµα ορίζεται ίση µε τη µονάδα για θετικά x και το µείον ένα για τα αρνητικά. Άσκηση 5.8 Ορίστε µια συνάρτηση η οποία ισούται µε 1-|x| για |x|<1, και µηδέν διαφορετικά. Κάντε γραφική παράσταση της συνάρτησης αυτής. Άσκηση 5.9 Ορίστε µια συνάρτηση η οποία ισούται µε το πρόσηµο του x όταν x≠0, και µηδέν όταν x=0. Κάντε γραφική παράσταση της συνάρτησης αυτής. Άσκηση 5.10 Ορίστε συναρτήσεις που για x>0 ταυτίζονται µε µια από τις εκφράσεις: (α) )sin(x , (β) x , (γ) 1,

ενώ για x<0 µε µία από τις: (i) )cos(x , (ii) 2x . Κάντε τις γραφικές τους παραστάσεις στο διάστηµα (-π, π). Άσκηση 5.11 Ορίστε τις παρακάτω συναρτήσεις δύο µεταβλητών:

α) 22 yx + β) )sin()sin( 22 xyyx + γ) 22 xy − .

Κατόπιν κάντε τις γραφικές τους παραστάσεις στο διάστηµα (-π, π).

Page 98: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

98

5.6.3 Στις αρχικές τιµές παραµέτρων

Είναι δυνατόν να ορίσουµε µια συνάρτηση µε προκαθορισµένες τις αρχικές τιµές κάποιων παραµέτρων. Ο ορισµός αυτός συνεπάγεται ότι εάν στο µετέπειτα υπολογισµό της συνάρτησης δεν δοθούν νέες τιµές στις παραµέτρους αυτές, τότε ο υπολογισµός γίνεται µε τις αρχικές τους τιµές, εάν όµως δοθούν, τότε χρησιµοποιούνται οι καινούργιες τιµές. Το σύµβολο για τον καθορισµό της αρχικής τιµής είναι : , το οποίο τοποθετείται µέσα στο όρισµα της συνάρτησης µετά την παράµετρο, και ακολουθείται από την αρχική τιµή της παραµέτρου, π.χ.

In[9]:=step1[x_, x0_:0] := 1 /; x >= x0 In[10]:=step1[x_, x0_:0] := 0 /; x < x0

Στο παραπάνω παράδειγµα η προκαθορισµένη τιµή του x0 είναι µηδέν. Όταν η συνάρτηση κληθεί µε ένα µόνο όρισµα, τότε ο υπολογισµός γίνεται µε τη χρήση της προκαθορισµένης τιµής της παραµέτρου x0, π.χ.

In[11]:=step1[2] Out[11]=1,

ενώ στη περίπτωση που κληθεί µε δύο ορίσµατα, τότε το δεύτερο όρισµα καθορίζει τη καινούργια τιµή του x0. Ένα παράδειγµα µιας τέτοιας κλήσης είναι το παρακάτω

In[12]:=step1[2, 3] Out[12]=0

Άσκηση 5.12 Ορίστε συναρτήσεις που για x>x0 ταυτίζονται µε µια από τις εκφράσεις: (α) )sin(x , (β) x , (γ) 1,

ενώ για x<0 µε µία από τις: (i) )cos(x , (ii) 2x . Ορίστε τις συναρτήσεις αυτές µε τη διαδικασία του προκαθορισµού της τιµής του x0, και µε αρχική τιµή ίση µε µηδέν. Ο ορισµός να γίνει κατά τέτοιο τρόπο ώστε να µπορεί εκ των υστέρων να αλλάζει η τιµή αυτή του x0.

Page 99: Theodorou Math Practikos Odigos

5.7 Αναδροµικές συναρτήσεις

99

5.7 Αναδροµικές συναρτήσεις Οι αναδροµικές συναρτήσεις χρησιµοποιούνται για τον υπολογισµό όρων

αναδροµικών ακολουθιών, όπου η τιµή του n-οστού όρου καθορίζεται από τις τιµές προγενέστερων όρων της ακολουθίας αυτής, µέσω µιας αναδροµικής σχέσης. Η αναδροµική συνάρτηση ορίζεται µέσα από την αναδροµική αυτή σχέση, ταυτόχρονα µε τον απαιτούµενο αριθµό αρχικών τιµών. Ένα παράδειγµα αναδροµικής συνάρτησης είναι το ακόλουθο, που υπολογίζει το παραγοντικό ακεραίων αριθµών, n!:

In[1]:=f[n_Integer]:=n f[n-1] In[2]:=f[0]=1 Out[2]=1

Η εντολή In[1] καθορίζει την αναδροµική συνάρτηση, ενώ η In[2] ορίζει την αρχική τιµή. Μετά τον παραπάνω ορισµό, η εντολή f[4] δίνει τη τιµή του 4!

In[3]:=f[4] Out[3]=24

Με βάση τον παραπάνω ορισµό, για να υπολογισθεί η τιµή του n-οστού όρου απαιτείται η τιµή του όρου n-1, για τη τιµή του όρου n-1, η τιµή του όρου n-2 κ.ο.κ. Με τη διαδικασία αυτή αναγόµαστε τελικά στη τιµή του πρώτου όρου, η οποία έχει καθορισθεί ίση µε τη µονάδα, και έτσι τερµατίζεται η αναδροµική διαδικασία. Ένα παράδειγµα αναδροµικής σχέσης, που χρησιµοποιεί περισσότερους από έναν προγενέστερους όρους, είναι το παρακάτω

In[4]:=g[n_Integer]:=g[n-1]-g[n-2] In[5]:=g[1]=1; g[2]=2;

Μετά τον παραπάνω ορισµό, η εντολή g[10] δίνει In[6]:=g[10] Out[6]=-1

Όταν δεν έχουν ορισθεί σωστά οι αρχικές συνθήκες, π.χ. έχει ορισθεί f[1.5]=1 αντί της σχέσης In[2], τότε η αναδροµική σχέση οδηγείται σε µια ατέρµονη αναδροµική διαδικασία, η οποία τελικά διακόπτεται από τη Mathematica ως λανθασµένη, µετά

Page 100: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

100

από ένα ορισµένο αριθµό επαναλήψεων. Ο µέγιστος αριθµός επαναλήψεων που είναι επιτρεπτός καθορίζεται από τη παράµετρο $RecursionLimit. Η προκαθορισµένη τιµή της παραµέτρου αυτής είναι 256. Η τιµή αυτή µπορεί να αλλάξει µε την εντολή $RecursionLimit=newvalue. Άσκηση 5.13 Να ορισθούν οι συναρτήσεις που υπολογίζουν τους όρους των παρακάτω αναδροµικών ακολουθιών:

(α) n

aa n

n13 −= µε 21 =a

(δ) )1(2.3 11 −− −= nnn aaa µε 5.01 =a

(β) 22

1 )( −− −= nnn aaa µε 21 =a ,

12 =a

(ε) 21 −− += nnn aaa µε 121 == aa ,

(γ) 1−

=n

n ana µε 21 =a (στ) )*2sin(

41

11 −− −= nnn aaa ππ

µε 25.01 =a .

Κατόπιν, µε τη χρήση των συναρτήσεων αυτών, να γίνουν πίνακες µε τις τιµές των δέκα πρώτων όρων των ακολουθιών, και τέλος να παρασταθούν γραφικά οι τιµές αυτές.

Εφαρµογή: Ο προσεγγιστικός προσδιορισµός της ρίζας µιας συνάρτησης f(x), που βρίσκεται κοντά στο x0, µπορεί να γίνει µε την µέθοδο των διαδοχικών προσεγγίσεων των Newton-Raphson, δηλαδή την αναδροµική σχέση,

)()(

1'

11

−− −=

n

nnn xf

xfxx ,

και τιµή εκκίνησης τη x=x0. Χρησιµοποιώντας τη µέθοδο αυτή, υπολογίστε τις οκτώ διαδοχικές προσεγγίσεις της ρίζας που βρίσκεται κοντά στο 3, για τη συνάρτηση 3)exp()3( −− xx . Συγκρίνετε τις τιµές αυτές µε τη ρίζα που

υπολογίζεται µε τη χρήση της εντολής FindRoot.

Page 101: Theodorou Math Practikos Odigos

5.8 Επαναληπτικοί υπολογισµοί

101

Λύση: Οι τιµές αυτές υπολογίζονται και αποθηκεύονται στο πίνακα A µε το παρακάτω πρόγραµµα

In[7]:=fa1[x_]:=(3-x)*Exp[x]-3 In[8]:=fa2[x_]=D[f1[x], x] Out[8]= x)- (3e- x xe+

In[9]:=xroot[n_Integer]:=xroot[n-1]-fa1[xroot[n-1]] / fa2[xroot[n-1]] In[10]:=xroot[1]=3. Out[10]=3. In[11]:=Α=Table[xroot[n], n, 1, 8] Out[11]=3.,2.85064,2.82235,2.82144,2.82144,2.82144,2.82144,2.82144 In[12]:=FindRoot[fa1[x], x, 3] Out[12]=x 2.82144

Άσκηση 5.14 Χρησιµοποιώντας συναρτησιακό προγραµµατισµό, και τη µέθοδο των διαδοχικών προσεγγίσεων των Newton-Raphson, να υπολογισθούν οι οκτώ διαδοχικές προσεγγίσεις της ρίζας που βρίσκεται κοντά στη µονάδα, των παρακάτω συναρτήσεων: α) x4-3xex+5, γ) x12+cos(x)-x2-12, β) x5-x4sin(x)+4x2-4, δ) x6+5x5-27. Να συγκριθούν οι τιµές αυτές µε τη ρίζα που υπολογίζεται µε την εντολή FindRoot.

5.8 Επαναληπτικοί υπολογισµοί Έχοντας ορίσει τις κατάλληλες συναρτήσεις, µπορούµε να εκτελέσουµε

επαναληπτικούς υπολογισµούς, χρησιµοποιώντας τις εντολές Table, Sum, και Product, που ορίσαµε σε προηγούµενα κεφάλαια. Στη περίπτωση της εντολής Table, αποδίδονται οι τιµές της συνάρτησης για τις τιµές του ορίσµατος της, ενώ στη περίπτωση των Sum και Product αποδίδεται µόνο το άθροισµα ή το γινόµενο των όρων αυτών αντίστοιχα. Ένας άλλος τρόπος εκτέλεσης επαναληπτικών υπολογισµών, όπως θα δούµε στη παράγραφο 8.3, γίνεται µε την επίδραση συνάρτησης πάνω σε λίστα.

Page 102: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

102

Παράδειγµα 1: Έχοντας ορίσει την συνάρτηση f[n]= n!, στη παράγραφο 5.7, µπορούµε να βρούµε

τις τιµές της συνάρτησης για n=1, … 10, και το άθροισµα ∑10

0!n µε τον ακόλουθο

τρόπο, In[1]:=Table[f[n], n, 1, 10] Out[1]=1,2,6,24,120,720,5040,40320,362880,3628800 In[2]:=Sum[f[n], n, 1, 10] Out[2]=4037913

Παράδειγµα 2:

Ο αριθµητικός υπολογισµός του ορισµένου ολοκληρώµατος ∫b

a

dxxf )( µπορεί να

γίνει µε τη διαµέριση του διαστήµατος [a, b] σε Νt ίσα υποδιαστήµατα µήκους h=(b-a)/Nt, και τη χρήση του κανόνα των τραπεζίων

.2/)))1(()(()(1

∫ ∑=

−+++=b

a

Nt

kkhafkhafhdxxf ,

Χρησιµοποιώντας συναρτησιακό προγραµµατισµό, και Νt=50, η αριθµητική τιµή

του ολοκληρώµατος ∫1

0

2 dxx υπολογίζεται ως εξής

In[3]:=Remove[x, s1] In[4]:=fun1[x_]:=x^2 In[5]:=a=0.;b=1.; In[6]:=Nt=50;h=(b-a)/Nt; In[7]:=s1[fun_]:=h*Sum[(fun[a+i*h]+fun[a+(i-1)*h])/2.,i,1,Nt] In[8]:=s1[fun1] Out[8]=0.3334

Η ακριβής τιµή του ολοκληρώµατος είναι 1/3,

In[9]:=1/3. Out[9]=0.333333

Page 103: Theodorou Math Practikos Odigos

5.8 Επαναληπτικοί υπολογισµοί

103

Παράδειγµα 3: Στην ύλη των µαθηµατικών που διδάσκονται στο λύκειο περιλαµβάνεται πλέον και µια εισαγωγή στη στατιστική ανάλυση δεδοµένων. Οι δύο βασικές ποσότητες για τη στατιστική τους περιγραφή είναι η µέση τιµή και η τυπική απόκλιση (standard deviation). Η µέση τιµή εκφράζει τη τιµή γύρω από την οποία είναι διασπαρµένα τα δεδοµένα, ενώ η τυπική απόκλιση δίνει το εύρος της περιοχής µέσα στην οποία βρίσκονται τα περισσότερα δεδοµένα. Η µέση τιµή των δεδοµένων δίνεται από τη σχέση

∑ ==

n

i ixn

x1

1,

και η αµερόληπτη τιµή της τυπικής απόκλισης από τη σχέση

∑ =−

−==

n

i i xxn

ss1

22 )(1

1 ,

όπου n είναι ο αριθµών των δεδοµένων του προβλήµατος. Όπως θα δούµε στη παράγραφο 10.3, στη Mathematica υπάρχει ένα εσωτερικό πακέτο που υπολογίζει τις ποσότητες αυτές, όµως, ως εφαρµογή του συναρτησιακού προγραµµατισµού, θα δώσουµε ένα πρόγραµµα που εκτελεί τους υπολογισµούς αυτούς.

Τα δεδοµένα που χρησιµοποιούνται στους παραπάνω υπολογισµούς προκύπτουν ως µετρήσεις κάποιου πειράµατος, και στην περίπτωση µας θα προσδιορίσουµε τα δεδοµένα αυτά εκτελώντας ένα «πείραµα» στον υπολογιστή. Σ’ ένα τέτοιο «εικονικό πείραµα» θεωρούµε ότι το αποτελέσµατα µιας «µέτρησης» της µεταβλητής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της εντολής:

y=2.0+ Random[] Εκτελούµε µια σειρά 50 τέτοιων «µετρήσεων» και κατόπιν υπολογίζουµε τη µέση τιµή και τη τυπική τους απόκλιση. Ο υπολογισµός γίνεται µε το πρόγραµµα που ακολουθεί

In[10]:=m=50; In[11]:=A=Table[2+ Random[],m]; In[12]:=meanvalue[A_, m_]:=Sum[A[[i]], i,1,m]/m In[13]:=mv=meanvalue[A, m] Out[13]=2.48473

Page 104: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

104

In[14]:=S2[A_, m_]:=Sum[(A[[i]]-mv)^2, i,1,m]/(m-1)//Sqrt In[15]:=sd=S2[A, m] Out[15]=0.276239

Σηµειώστε ότι σε κάθε καινούργια εκτέλεση του προγράµµατος παίρνουµε και διαφορετικό αποτέλεσµα, και αυτό οφείλεται στο γεγονός ότι διαφορετικές εκτελέσεις της εντολής Randon[] δίνουν διαφορετικά αποτελέσµατα. Άσκηση 5.15 Χρησιµοποιώντας συναρτησιακό προγραµµατισµό, να προσδιοριστούν τα τοπικά µέγιστα και ελάχιστα της συνάρτησης x+5*Sin[x], γύρω από τις θέσεις x=ν*π µε ν=1,…,10, και οι τιµές τους να αποθηκευθούν σε πίνακα. Άσκηση 5.16

Ο αριθµητικός υπολογισµός του ορισµένου ολοκληρώµατος ∫b

a

dxxf )( µπορεί να

γίνει µε τη διαµέριση του διαστήµατος [a, b] σε Ν ίσα υποδιαστήµατα και τον υπολογισµό του εµβαδού σύµφωνα µε τον κανόνα των ορθογωνίων, οπότε το ολοκλήρωµα προσεγγίζεται είτε από το άθροισµα, ως προς k,

∫ ∑− −

+−

==b

a

N

kN

abafN

abdxxfS1

01 )()( ,

είτε το άθροισµα

∫ ∑ −+

−==

b

a

N

kN

abafN

abdxxfS1

2 )()( .

Υπολογίζοντας το εµβαδόν αυτό µε τον κανόνα των τραπεζίων, παίρνουµε ότι η τιµή του ολοκληρώµατος δίνεται προσεγγιστικά από τη σχέση

2/)( 21 SSS +=τρ .

Χρησιµοποιώντας συναρτησιακό προγραµµατισµό, τις παραπάνω προσεγγιστικές σχέσεις, και τις τιµές Ν=5, 10, 50, 200, υπολογίστε τις αριθµητικές τιµές των παρακάτω ολοκληρωµάτων:

Page 105: Theodorou Math Practikos Odigos

5.8 Επαναληπτικοί υπολογισµοί

105

α) ∫2

0

xdx , γ) ∫ +

1

02 11 dx

x,

β) ∫2

0

)exp( dxx , δ) ∫π2

0

)sin( dxx .

Συγκρίνατε τις τιµές αυτές µε τις ακριβείς τιµές των ολοκληρωµάτων και σχολιάστε τα αποτελέσµατα σας.

Page 106: Theodorou Math Practikos Odigos

ΣΥΝΑΡΤΗΣΙΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

106

Page 107: Theodorou Math Practikos Odigos

5.8 Επαναληπτικοί υπολογισµοί

107

ΚΕΦΑΛΑΙΟ 6

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Όπως είδαµε στο προηγούµενο κεφάλαιο, µπορούµε να προγραµµατίσουµε στη Mathematica εξωτερικές συναρτήσεις µε τις οποίες να εκτελέσουµε υπολογισµούς. Ο συναρτησιακός αυτός τρόπος προγραµµατισµού είναι αρκετά διαφορετικός από το παραδοσιακό διαδικαστικό προγραµµατισµό που συναντά κανείς σε κλασικές γλώσσες, όπως Fortran, C, C++, κλπ. Εκτός όµως από το συναρτησιακό αυτό προγραµµατισµό, υπάρχει στη Mathematica και η δυνατότητα προγραµµατισµού µε το παραδοσιακό διαδικαστικό τρόπο, τον οποίο θα παρουσιάσουµε παρακάτω. Οι εντολές του διαδικαστικού προγραµµατισµού χωρίζονται σε δύο κατηγορίες, τις εντολές ελέγχου ροής και τις επαναληπτικές εντολές.

Προτού γίνει παρουσίαση του διαδικαστικού προγραµµατισµού, θα δοθούν µερικά στοιχεία από το συµβολισµό της Mathematica χρήσιµα στο προγραµµατισµό αυτό. Ο συµβολισµός αυτός έχει προέλθει από τη γλώσσα C, και είναι ο παρακάτω:

x++ αυξάνει τη τιµή του x κατά 1, και εκτυπώνει τη παλιά τιµή του x. x += dx προσθέτει το dx στο x και εκτυπώνει τη νέα τιµή του x. x— µειώνει τη τιµή του x κατά 1, και εκτυπώνει τη παλιά τιµή του x. x -= dx αφαιρεί το dx από το x και εκτυπώνει τη νέα τιµή του x. ++x αυξάνει τη τιµή του x κατά 1, και εκτυπώνει τη νέα τιµή του x. --x µειώνει τη τιµή του x κατά 1, και εκτυπώνει τη νέα τιµή του x.

Page 108: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

108

Παραδείγµατα εφαρµογής του συµβολισµού αυτού δίνονται παρακάτω:

In[1]:=x=2 Out[1]=2 In[2]:=x++ Out[2]=2 In[3]:=x Out[3]=3 In[4]:=x+=2 Out[4]=5 In[5]:=x-- Out[5]=5 In[6]:=x Out[6]=4 In[7]:=x-=2 Out[7]=2 In[8]:=++x Out[8]=3 In[9]:=--x Out[9]=2

6.1 Εντολές ελέγχου ροής Σε µερικές περιπτώσεις επιθυµούµε το πρόγραµµα να επιλέγει µόνο του

ποια από τις επόµενες εντολές θα εκτελέσει. Αυτό επιτυγχάνεται µε τις εντολές ελέγχου If και Which. Με το τρόπο αυτό, από ένα σύνολο εντολών επιλέγεται για εκτέλεση µία, ανάλογα µε το αποτέλεσµα της εντολής ελέγχου.

6.1.1 Εντολή If

Η δοµή της εντολής αυτής είναι η παρακάτω If[ test, f1, f2]

Στη σύνθετη αυτή εντολή If, αρχικά εκτελείται η εντολή test, που είναι µια εντολή ελέγχου µε δυνατά αποτελέσµατα τα True (ορθό) και False (λαθεµένο), και στη

Page 109: Theodorou Math Practikos Odigos

6.1 Εντολές ελέγχου ροής

109

συνέχεια, αν το αποτέλεσµα του ελέγχου είναι θετικό (True) επιλέγεται για εκτέλεση η εντολή f1 και παραλείπεται η f2, ενώ όταν είναι λαθεµένο (False) επιλέγεται η f2 και παραλείπεται η f1. Έτσι µε το τρόπο αυτό το πρόγραµµα επιλέγει µεταξύ των εντολών f1 και f2. Παράδειγµα: Χρησιµοποιώντας την εντολή If µπορούµε να ορίσουµε µία συνάρτηση που να ισούται µε το x για αρνητικά x και το sin(x) για θετικά, ως εξής:

In[1]:=fun[x_]:=If[x<0, x, Sin[x]] In[2]:=Plot[fun[x], x, -Pi, 2Pi];

-2 2 4 6

-3

-2

-1

1

Σχόλιο: οι εσωτερικές πράξεις, f1 και f2, της εντολής If, µπορεί να είναι είτε απλές, είτε σύνθετες. Στη δεύτερη περίπτωση τα διάφορα µέρη της εντολής χωρίζονται µεταξύ τους µε το Αγγλικό σύµβολο ;, όπως στο παρακάτω παράδειγµα

In[3]:=x=4; If[x > 6, a = 2; b = 3, a = 5; b = 6] Out[3]=6

Στο παραπάνω παράδειγµα τυπώνεται µόνο η τιµή της παραµέτρου b, και όχι αυτή της παραµέτρου a, διότι η πρώτη εντολή ακολουθείται από το Αγγλικό σύµβολο ;

Page 110: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

110

και έτσι το αποτέλεσµα της δεν τυπώνεται. Σύνθετες πράξεις θα συναντήσουµε και στις διαδικαστικές εντολές που θα ορισθούν παρακάτω.

6.1.2 Εντολή Which

Στη περίπτωση της εντολής Which το πρόγραµµα επιλέγει για εκτέλεση µία, από ένα σύνολο δύο ή περισσότερων εντολών. Η δοµή της εντολής αυτής είναι:

Which[ test1, f1, test2, f2, test3, f3, …] Το πρόγραµµα εκτελεί τα διαδοχικά τεστ και δίνει ως αποτέλεσµα την εντολή fi που αντιστοιχεί στο πρώτο θετικό τεστ. Στο παρακάτω παράδειγµα δίνεται ο ορισµός της συνάρτησης που για x<0 ισούται µε x, για 0≤ x <1 ισούται µε µηδέν, και για 1≤ x είναι ίση µε x-1, και ταυτόχρονα γίνεται και η γραφική της παράσταση,

In[4]:=Plot[Which[x < 0, x, x<1, 0, 1<=x, x-1], x, -Pi, Pi]];

-3 -2 -1 1 2 3

-3

-2

-1

1

2

Το ίδιο αποτέλεσµα επιτυγχάνεται και µε την εντολή In[5]:=Plot[If[x<0, x, If[x<1, 0, x-1]],x,-Pi,Pi]

Page 111: Theodorou Math Practikos Odigos

6.2 Επαναληπτικές εντολές - Βρόχοι

111

-3 -2 -1 1 2 3

-3

-2

-1

1

2

που περιέχει διπλό, φωλιασµένο If.

6.2 Επαναληπτικές εντολές - Βρόχοι Οι επαναληπτικές εντολές χρησιµοποιούνται στις περιπτώσεις που

απαιτείται η επαναληπτική εκτέλεση µιας ή περισσοτέρων πράξεων. ∆ηµιουργείται δηλαδή µία κυκλική διαδικασία, που αποκαλείται βρόχος, η οποία εκτελείται επαναληπτικά µέχρι να παραβιαστεί το κριτήριο επανάληψης. Στο διαδικαστικό προγραµµατισµό οι βασικές εντολές δηµιουργίας ενός βρόχου είναι οι Dο, For και While.

6.2.1 Εντολή Do

Η δοµή της εντολής αυτής είναι η ακόλουθη: Do[ f[i], i, i1, i2, δi ]

όπου f[i] είναι µια απλή ή σύνθετη πράξη, η εκτέλεση της οποίας επαναλαµβάνεται µε το δείκτη i να µεταβάλλεται από τη τιµή i1 µέχρι τη i2, µε βήµα δi. ∆ηλαδή, το κριτήριο για να τερµατιστεί η επαναληπτική διαδικασία είναι να υπερβεί η τιµή του δείκτη i το i2.

Page 112: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

112

Έχουµε επίσης τη δυνατότητα να δηµιουργήσουµε φωλιασµένους βρόχους. Μια τέτοια σύνθετη δοµή, µε δύο φωλιασµένους βρόχους, δίνεται στη παρακάτω εντολή,

Do[ Do[ f[i, j], i, i1, i2, δi ], j, j1, j2, δj]

Παράδειγµα 1:

In[1]:=s=0; Do[s=s+x^i; Print[s], i,1,5]; s x x + x^2 x + x^2 + x^3 x + x^2 + x^3 + x^4 x + x^2 + x^3 + x^4 + x^5 Out[1]=x + x^2 + x^3 + x^4 + x^5

Στο παραπάνω παράδειγµα η τιµή εκκίνησης του s καθορίζεται ίση µε µηδέν. Με την επαναληπτική διαδικασία προσθέτουµε στη τρέχουσα τιµή του s τη ποσότητα xi, µε i να µεταβάλλεται από ένα έως πέντε. Με την εντολή Print[s] τυπώνονται τα ενδιάµεσα αποτελέσµατα. Μετά το τέλος της εντολής Do ξανατυπώνουµε το τελικό αποτέλεσµα. Παράδειγµα 2: Παράδειγµα φωλιασµένων βρόχων είναι το παρακάτω,

In[2]:= DoADoAPrintA"i=", i, ", j=", j, ", è!!!!!!!!!i∗ j=", Sqrt@1.∗i∗jDE, 8i, 1, 3<E,

8j, 1, 3<E Out[2]=

i=1, j=1, è!!! !! !! !!i∗j =1. i=2, j=1, è!!! !! !! !!i∗j =1.41421 i=3, j=1, è!!! !! !! !!i∗j =1.73205 i=1, j=2, è!!! !! !! !!i∗j =1.41421 i=2, j=2, è!!! !! !! !!i∗j =2.

Page 113: Theodorou Math Practikos Odigos

6.2 Επαναληπτικές εντολές - Βρόχοι

113

i=3, j=2, è!!! !! !! !!i∗j =2.44949 i=1, j=3, è!!! !! !! !!i∗j =1.73205 i=2, j=3, è!!! !! !! !!i∗j =2.44949 i=3, j=3, è!!! !! !! !!i∗j =3.

Παράδειγµα 3: Να ευρεθεί ο µεγαλύτερος από µια λίστα αριθµών. Λύση: Τη λίστα που θα µελετήσουµε τη δηµιουργούµε χρησιµοποιώντας την εντολή Random[]. Στη προκειµένη περίπτωση δηµιουργούµε είκοσι ακεραίους αριθµούς επιλεγµένους µε τυχαίο τρόπο στο διάστηµα 1,20.

In[3]:=A=Table[Random[Integer,1,20], 20] Out[3]=1,12,17,19,9,16,10,9,1,6,18,6,18,17,13,7,8,18,2,11

Στην αρχή κάνουµε την υπόθεση ότι ο πρώτος αριθµός της λίστας είναι και ο µεγαλύτερος. Στη συνέχεια αρχίζουµε να συγκρίνουµε τον αριθµό αυτό µε τους αριθµούς που έπονται. Εάν συναντήσουµε κάποιον µεγαλύτερο απ’ αυτόν, τότε επιλέγουµε τον τελευταίο σαν το µεγαλύτερο της λίστας, και κατόπιν συνεχίζουµε τη σύγκριση µε τους αριθµούς που έπονται. Με το πέρας της διαδικασίας αυτής έχουµε εντοπίσει τον µέγιστο αριθµό.

In[4]:=amax=A[[1]] Out[4]=1 In[5]:=Do[ If[A[[i]]>amax, amax=A[[i]]], i,1,20] In[6]:=amax Out[6]=19

Παράδειγµα 4: Σ’ ένα «εικονικό πείραµα» θεωρούµε ότι το αποτελέσµατα µιας «µέτρησης» της µεταβλητής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της επόµενης εντολής:

y=2.0+0.2 Random[] Εκτελούµε µια σειρά 20 τέτοιων «µετρήσεων» και κατόπιν υπολογίζουµε τη µέση τους τιµή. Ο υπολογισµός αυτός γίνεται µε το πρόγραµµα που ακολουθεί:

In[7]:=A1=Table[2+0.2 Random[],20] Out[7]=2.12682,2.03318,2.10096,2.17778,2.14763,2.01572,

Page 114: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

114

2.17989,2.11257,2.10967,2.15143,2.08852,2.06829,2.00778, 2.06092,2.029,2.04481,2.08911,2.01691,2.15197,2.07032

Το µήκος της παραπάνω λίστας προσδιορίζεται µε την εντολή

In[8]:=m=Length[A1] Out[8]=20

Υπολογίζουµε το άθροισµα των αριθµών της λίστας χρησιµοποιώντας διαδικαστικό προγραµµατισµό, και κατόπιν υπολογίζουµε τη µέση τους τιµή:

In[9]:=S=0; Do[S=S+A1[[i]], i,1,m]; S Out[9]=41.7833 In[10]:=meanvalue=S/m Out[10]=2.08916

6.2.2 Εντολή For

Η δοµή της εντολής αυτής είναι: For[i= i1, test, incr, body]

στην οποία η εκτέλεση των πράξεων body (απλών ή σύνθετων) επαναλαµβάνεται, µε τον δείκτη i να αρχίζει από τη τιµή i1 και να µεταβάλλεται µε το τρόπο που καθορίζεται στη εντολή incr, µέχρι να παραβιαστεί το test οπότε η διαδικασία διακόπτεται. Στο παρακάτω παράδειγµα εκτελείται µε διαφορετικό τρόπο η άθροιση που έγινε παραπάνω µε την εντολή Do,

In[11]:= s1=0; For[i=0, i<5, i+=1, s1=s1+x^i]; s1 Out[11]=1+x+x^2+x^3+x^4

Σηµειώστε ότι η σειρά εκτέλεσης των εσωτερικών εντολών της εντολής For είναι η ακόλουθη: πρώτα εκτελείται για µία και µοναδική φορά η εσωτερική εντολή που βρίσκεται στη πρώτη θέση ( i= i1) και καθορίζει την αρχική τιµή του δείκτη, και κατόπιν γίνεται επαναληπτική εκτέλεση των υπολοίπων εντολών µε τη εξής σειρά, πρώτα η εντολή στη δεύτερη θέση (test), µετά η εντολή στη τέταρτη θέση (body), και τελευταία η εντολή στη τρίτη θέση (incr). ∆ηλαδή προηγείται η τέταρτη της τρίτης εντολής.

Page 115: Theodorou Math Practikos Odigos

6.2 Επαναληπτικές εντολές - Βρόχοι

115

∆ίνοντας την εντολή For µε αλλαγµένη τη σειρά της τρίτης εσωτερικής εντολής µε τη τέταρτη, έχει ως συνέπεια να εκτελείται πρώτα η αύξηση του δείκτη και µετά να γίνονται οι εσωτερικές πράξεις body, µε προφανή αλλαγή του αποτελέσµατος, π.χ.

In[12]:=s1=0;For[i=0, i<5, s1=s1+x^i, i+=1]; s1 Out[12]= x+x^2+x^3+x^4+x^5

Παράδειγµα 1: Να ευρεθεί ο µεγαλύτερος αριθµός από αυτούς που είναι αποθηκευµένοι σε µια λίστα, προσδιορίζοντας ταυτόχρονα και τη θέση του στη λίστα αυτή. Λύση: ∆ηµιουργούµε µια λίστα αριθµών χρησιµοποιώντας την Random[]. Στη προκειµένη περίπτωση δηµιουργούµε είκοσι ακεραίους αριθµούς επιλεγµένους µε τυχαίο τρόπο στο διάστηµα 1, 20.

In[13]:=A=Table[Random[Integer,1, 20], 20] Out[13]=1,12,17,19,9,16,10,9,1,6,18,6,18,17,13,7,8,18,2,11

Στη αρχή κάνουµε την υπόθεση ότι ο πρώτος αριθµός της λίστας είναι ο ζητούµενος. Στη συνέχεια αρχίζουµε να συγκρίνουµε τον αριθµό αυτό µε τους αριθµούς που έπονται. Εάν συναντήσουµε κάποιον µεγαλύτερο απ’ αυτόν τότε επιλέγουµε τον τελευταίο σαν το µεγαλύτερο της λίστας, δηλώνοντας ταυτόχρονα και τη θέση του, και κατόπιν συνεχίζουµε τη διαδικασία αυτή µε τους αριθµούς που έπονται. Με το πέρας της διαδικασίας αυτής έχουµε εντοπίσει τον µέγιστο αριθµό, µαζί µε τη θέση του. Για τον προσδιορισµό της θέσης του χρησιµοποιούµε τον δείκτη nindex.

In[14]:=A2=Table[Random[Integer,1,20],20] Out[14]=3,12,1,9,11,5,3,11,14,7,8,18,11,5,20,5,3,12,6,8 In[15]:=m1=Length[A2] Out[15]=20 In[16]:=amax=A2[[1]] nindex=1 Out[16]=3 Out[17]=1 In[18]:=For[i=1, i<=m1, i++,

Page 116: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

116

If[A2[[i]]>amax, amax=A2[[i]]; nindex=i]] In[19]:=amax nindex Out[19]=20 Out[20]=15

Παράδειγµα 2:

Σ’ ένα «εικονικό πείραµα» θεωρούµε ότι το αποτελέσµατα µιας «µέτρησης» της µεταβλητής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της εντολής:

y=2.0+0.2 Random[] Εκτελούµε µια σειρά 20 τέτοιων «µετρήσεων» και κατόπιν υπολογίζουµε τη µέση τιµή και τη τυπική τους απόκλιση (standard deviation). Ο υπολογισµός γίνεται µε το πρόγραµµα που ακολουθεί:

In[21]:=A3=Table[2+0.2 Random[],20] Out[21]=2.14259,2.1251,2.1675,2.17643,2.08517,2.06816,2.10991, 2.1052, 2.16618,2.14631, 2.06025,2.17897,2.05879, 2.12639, 2.11757,2.01996,2.01538,2.19266,2.10196,2.11561 In[22]:=m3=Length[A2] Out[22]=20 In[23]:=S=0 For[i=1, i<=m3, i++, S=S+A3[[i]]];S Out[23]=0 Out[24]=42.2801 In[25]:=meanvalue=S/m Out[25]=2.114 In[26]:=S2=0 For[i=1, i<=m3, i++, S2=S2+(A3[[i]]-meanvalue)^2];S2 Out[26]=0 Out[27]=0.0497223

Page 117: Theodorou Math Practikos Odigos

6.2 Επαναληπτικές εντολές - Βρόχοι

117

In[28]:=sdeviation=Sqrt[S2/(m3-1)] Out[28]=0.0511562

6.2.3 Εντολή While

Η δοµή της εντολής αυτής είναι: i=i1; While[test, body]

στην οποία γίνεται επαναληπτική εκτέλεση των πράξεων, body, µέχρι να παραβιαστεί το test. Για να µπορέσει να τερµατιστεί η διαδικασία αυτή, θα πρέπει να υπάρχει µια παράµετρος η τιµή της οποίας θα µεταβάλλεται µέσα στις εντολές των πράξεων, body, κατά τρόπο ώστε να παραβιαστεί κάποια στιγµή η εντολή test. Παραδείγµατα εφαρµογής της εντολής While είναι τα παρακάτω,

In[29]:= s2=0; i=0; While[i<5, i+=1; s2=s2+x^i]; s2 Out[29]=x+x^2+x^3+x^4+x^5 In[30]:= s2=0; i=0; While[i<5, s2=s2+x^i; i+=1]; s2 Out[30]=1+x+x^2+x^3+x^4

Η διαφορά µεταξύ των δύο παραπάνω αποτελεσµάτων οφείλεται στο γεγονός ότι στο παράδειγµα In[29] πρώτα γίνεται αύξηση του δείκτη i, και µετά εκτελείται ο υπολογισµός του s2, ενώ στο In[30] γίνεται το αντίθετο. Παράδειγµα:

Ο αριθµητικός υπολογισµός του ορισµένου ολοκληρώµατος ∫b

a

dxxf )( µπορεί να

γίνει µε τη διαµέριση του διαστήµατος [a, b] σε Νt ίσα υποδιαστήµατα µήκους h=(b-a)/Nt, και τη χρήση του κανόνα των τραπεζίων

∫ ∑−

=

++++=b

a

Nt

kkhafkhafhdxxf

1

0)))1(()(()( /2.,

Χρησιµοποιώντας διαδικαστικό προγραµµατισµό, την εντολή While και Νt=200, η

αριθµητική τιµή του ολοκληρώµατος ∫1

0

2 dxx υπολογίζεται ως εξής

Page 118: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

118

In[31]:=fun1[x_]=x^2 Out[31]=x^2 In[32]:=i=0; s=0; Nt=200; h=1./Nt; While[i<Nt, s=s+h*(fun1[i*h]+fun1[(i+1)*h])/2.; i=i+1]; s Out[32]=0.333338

Η ακριβής τιµή του οποίου είναι 1/3 In[33]:=1/3. Out[33]=0.333333

6.3 Εντολές ελέγχου Στις επαναληπτικές διαδικασίες της προηγούµενης παραγράφου, που

δηµιουργούνται µε τις εντολές Do, For και While, ο βρόχος επαναλαµβάνεται µέχρι να παραβιαστεί το κριτήριο επανάληψης. Σε µερικές όµως περιπτώσεις χρειάζεται να επέµβουµε, µέσω µιας εντολής ελέγχου, και να τροποποιήσουµε ή να διακόψουµε τη λειτουργία του βρόχου νωρίτερα. Η διαδικασία αυτή γίνεται µε τις εντολές Continue και Break. Άλλες χρήσιµες εντολές ελέγχου είναι οι Label και Goto.

6.3.1 Εντολή Continue

Με τη χρήση της εντολής αυτής µπορούµε να παραλείψουµε την εκτέλεση, για κάποιες τιµές του δείκτη, ενός µέρους ή του συνόλου των πράξεων που υπάρχουν µέσα σ’ ένα βρόχο. Με την κλήση της εντολή Continue[] παραλείπεται, για τη συγκεκριµένη τιµή του δείκτη, η εκτέλεση των πράξεων που έπονται της εντολής αυτής, και ο βρόχος οδηγείται στον επόµενο κύκλο, που αντιστοιχεί στην επόµενη τιµή του δείκτη.

In[1]:= DoAPrint@"i=", i, " j=", jD

IfAi≠ j, PrintA"è!!!!!!!!!i∗j= ", Sqrt@1.∗i∗jDE, Continue@DE,

8i, 1, 2<, 8j, 1, 2<E Out[1]=i= 1 j= 1

Page 119: Theodorou Math Practikos Odigos

6.3 Εντολές ελέγχου

119

i= 1 j= 2

è!!! !! !! !!i∗j = 1.41421

i= 2 j= 1

è!!! !! !! !!i∗j = 1.41421

i= 2 j= 2

6.3.2 Εντολή Break

Με την κλήση της εντολής αυτής µπορούµε να διακόψουµε τη λειτουργία, και να βγούµε από ένα βρόχο Do, For ή While. Η έξοδος γίνεται µε την εντολή Break[ ], από το σηµείο που καλείται η εντολή αυτή.

In[2]:=t=2; Do[t=t*k; Print[t]; If[t>10,Break[]], k, 1, 20] 2 4 12

6.3.3 Εντολή Label

Η σύνταξη της εντολής αυτής είναι: Label[pointer]

Καθορίζεται ένα σηµείο του προγράµµατος, στο οποίο αποδίδεται ο δείκτης pointer, στο οποίο µπορεί να επιστρέψει ο υπολογισµός µε την εντολή Goto.

6.3.4 Εντολή Goto

Η σύνταξη της εντολής είναι: Goto[pointer]

Με την εντολή αυτή ο υπολογισµός επιστρέφει στο σηµείο που βρίσκεται ο δείκτης pointer, και συνεχίζεται από το σηµείο αυτό. Παράδειγµα

In[3]:=q=2;Label[point1];Print[q];q=q+1; If[q<6, Goto[point1]] 2 3

Page 120: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

120

4 5

Ερώτηση: Εξηγείστε τα αποτελέσµατα των παραπάνω παραδειγµάτων.

6.4 Λογικοί Τελεστές Σε µια εντολή ελέγχου µπορεί να περιλαµβάνονται περισσότεροι από ένας

τελεστές σύγκρισης, οι οποίοι συνδέονται µεταξύ τους µε έναν λογικό τελεστή. Οι βασικοί λογικοί τελεστές είναι οι And (που συµβολίζεται µε &&), Or ( || ) και Not (!).

6.4.1 Λογικός τελεστής And ( && )

Με τον τελεστή αυτό µπορούµε να επιβάλουµε να ικανοποιούνται ταυτόχρονα δύο ή περισσότερες σχέσεις σύγκρισης, π.χ.

In[1]:=x=3; x>2 && x>5 Out[1]=False In[2]:=x=Pi/2. ; x>1 && x<5 && Sin[x]>0 Out[2]=True In[3]:=Plot[If[x>0 && Sin[x]>0, Sin[x], 0], x,-10,16]

-10 -5 5 10 15

0.2

0.4

0.6

0.8

1

Page 121: Theodorou Math Practikos Odigos

6.4 Λογικοί Τελεστές

121

Ερώτηση: Εξηγείστε τα αποτελέσµατα των παραπάνω παραδειγµάτων.

6.4.2 Λογικός τελεστής Or ( || )

Με τον τελεστή αυτό µπορούµε να επιβάλουµε να ικανοποιείται τουλάχιστον µία από ένα σύνολο σχέσεων σύγκρισης, π.χ.

In[4]:=x=3; x>2 || x>5 Out[4]=True In[5]:=x=Pi/2.; x>2 || x>5 || Sin[x]<0 Out[5]=False In[6]:=Plot[If[x>0 || Sin[x]>0, Sin[x], 0],x,-4Pi,4Pi]

-10 -5 5 10

-1

-0.5

0.5

1

Ερώτηση: Εξηγείστε τα αποτελέσµατα των παραπάνω παραδειγµάτων.

6.4.3 Λογικός τελεστής Not ( ! )

Ο τελεστής αυτός αντιστρέφει το αποτέλεσµα (από False σε True και από True σε False) µιας πράξεις σύγκρισης, π.χ.

In[7]:=x=3; !(x>2) Out[7]=False In[8]:=x=Pi/2.; !( x>1) && x<5 && Sin[x]>0 Out[8]=False In[9:=Plot[If[!(x>0) || Sin[x]>0 ,Sin[x], 0],x,-4Pi,4Pi]

Page 122: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

122

-10 -5 5 10

-1

-0.5

0.5

1

Ερώτηση: Εξηγείστε τα αποτελέσµατα των παραπάνω παραδειγµάτων.

6.5 Τοπικές µεταβλητές Όπως ξέρουµε, ο καθορισµός της τιµής του x, µε την εντολή x = x0,

συνεπάγεται ότι η τιµή αυτή του x παραµένει στη µνήµη του υπολογιστή. Όπως είδαµε στο πρώτο κεφάλαιο, µπορούµε να εκτελέσουµε ένα υπολογισµό για µια συγκεκριµένη τιµή του x, χωρίς αυτή να µείνει στη µνήµη του υπολογιστή, χρησιµοποιώντας την εντολή της συντακτικής αντικατάστασης. Ο τρόπος αυτός αντιµετώπισης του προβλήµατος χρησιµοποιείται σε απλές περιπτώσεις. Όταν όµως θέλουµε να εκτελέσουµε αρκετές πράξεις µε τη τιµή αυτή του x, τότε η προαναφερθείσα µέθοδος δεν ενδείκνυται. Οι δυνατότητες που έχουµε είναι ή να χρησιµοποιήσουµε για την εκτέλεση των πράξεων την εντολή Module, ή για πιο µακροσκελείς υπολογισµούς να γράψουµε ένα ανεξάρτητο πρόγραµµα που θα χρησιµοποιείται ως εξωτερικό πακέτο και θα εκτελεί τους υπολογισµούς αυτούς και θα καλείται από το αρχικό πρόγραµµα. Στο παρόν κεφάλαιο θα παρουσιάσουµε την

Page 123: Theodorou Math Practikos Odigos

6.5 Τοπικές µεταβλητές

123

εντολή Module, αφήνοντας για το κεφάλαιο 12 τη παρουσίαση του τρόπου δηµιουργίας των εξωτερικών πακέτων.

Η εντολή Module δηµιουργεί ένα τοπικό περιβάλλον για ένα σύνολο µεταβλητών, οι οποίες δεν µεταφέρονται στο κυρίως πρόγραµµα. Οι µεταβλητές αυτές τοποθετούνται µέσα σε µια λίστα η οποία αποτελεί το πρώτο στοιχείο του ορίσµατος της εντολής Module. Μετά τον ορισµό των εσωτερικών µεταβλητών, µέσα στο όρισµα της εντολής Module δίνονται οι εντολές για την εκτέλεση των εσωτερικών πράξεων, στις οποίες περιλαµβάνονται τόσο οι εσωτερικές µεταβλητές όσο και µεταβλητές του κυρίως προγράµµατος. Η εκτέλεση γίνεται µε τον ακόλουθο τρόπο:

result=Module[x1, x2, …, expressions[x1, x2, …, x, y, …]] Στη παραπάνω εντολή, οι παράµετροι που περιέχονται στη λίστα, x1, x2, … παραµένουν εσωτερικές του Module και δεν µεταφέρονται στο κυρίως πρόγραµµα, ενώ οι υπόλοιπες µεταφέρονται. Ένα παράδειγµα εφαρµογής του Module είναι το παρακάτω:

In[1]:=Module[z, z=1; z=z*2; z=z*2; z=z*2] Out[1]=8

Στο παράδειγµα αυτό, η µεταβλητή z δεν µεταφέρεται στο κυρίως πρόγραµµα, παρά µόνο το αποτέλεσµα της εκτέλεσης της πράξεων. Ένα πιο σύνθετο παράδειγµα, το οποίο έχει να κάνει µε τον ορισµό µιας συνάρτησης, µε τη χρήση της εντολής Module, για τον υπολογισµό του παραγοντικού ενός αριθµού, είναι το παρακάτω:

In[2]:=factorialNum[y_]:=Module[x=0, z=1, If[y==0, 1, While[!(x==y), x=x+1; z=z x]]; z]

Μετά τον ορισµό της συνάρτησης, ο υπολογισµός του 4! γίνεται µε την εντολή,

In[3]:=factorialNum[4] Out[3]=24

Page 124: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

124

Ερώτηση: Εξηγείστε τη σύνταξη και τη λειτουργία της παραπάνω συνάρτησης factorialNum[y].

6.6 Ασκήσεις Άσκηση 6.1 Χρησιµοποιώντας την εντολή If, ορίστε, και κατόπιν κάντε τη γραφική τους παράσταση, τις συναρτήσεις που για x≥0 ταυτίζονται µε µια από τις εκφράσεις:

(α) )sin(x , ή (β) x , ενώ για x<0 µε µία από τις: (i) x )cos(x , ή (ii) 2x .

Επαναλάβατε την ίδια διαδικασία χρησιµοποιώντας την εντολή Which. Άσκηση 6.2 Χρησιµοποιώντας σε συνδυασµό τις εντολές If και Which ορίστε µε διαφορετικούς τρόπους, και κατόπιν κάντε τη γραφική παράσταση της συνάρτησης που για x<0 ισούται µε x, για 0≤ x <1 µε µηδέν, για 1≤ x <2 µε ένα, και για 2≤ x µε x. Άσκηση 6.3 Προγραµµατίστε µε διαδικαστικό τρόπο, χρησιµοποιώντας τις εντολές (α) Do (β) For και (γ) While, τον υπολογισµό των παρακάτω αθροισµάτων:

α) ∑ +

10

1 )1(1

nn, δ) ∑ −

10

1

ne ,

β) ∑10

1

1n

, ε) ∑ ++

10

1 )2)(1(1

nnn.

γ) ∑10

16

1n

, δ) ∑10

1 !2n

n

Άσκηση 6.4 Προγραµµατίστε µε διαδικαστικό τρόπο, τον προσδιορισµό των τοπικών µεγίστων και ελαχίστων της συνάρτησης x+5*sin(x), γύρω από τις θέσεις x=ν*π, µε ν=1,…, 10, χρησιµοποιώντας τις εντολές (α) Do (β) For και (γ) While.

Page 125: Theodorou Math Practikos Odigos

6.6 Ασκήσεις

125

Άσκηση 6.5 Λύστε την άσκηση 5.8 χρησιµοποιώντας διαδικαστικό προγραµµατισµό. Άσκηση 6.6 Η ακολουθία Fibonacci ορίζεται µε τον εξής τρόπο: ο πρώτος όρος είναι µηδέν, ο δεύτερος µονάδα και από εκεί και πέρα κάθε όρος προκύπτει από το άθροισµα των δύο προηγούµενων όρων. Να γραφεί ένα πρόγραµµα που να υπολογίζει (α) τους 100 πρώτους όρους της ακολουθίας, και (β) τους όρους της ακολουθίας που είναι µικρότεροι του 2000. Άσκηση 6.7 Ο σηµερινός αριθµός των αυτοκινήτων που κυκλοφορούν σε µια πόλη είναι 5000, και αυξάνει µε ρυθµό 5 %. Γράψτε ένα πρόγραµµα που να υπολογίζει σε πόσα χρόνια ο αριθµός αυτός θα ξεπεράσει τις 20000. Άσκηση 6.8 Κάποιος κατέθεσε στη τράπεζα 10000 Ευρώ µε σταθερό επιτόκιο 4%. Αν στο τέλος κάθε χρόνου το κεφάλαιο ανατοκίζεται, να γραφεί πρόγραµµα που να δίνει το κεφάλαιο στο τέλος κάθε χρόνου για τα επόµενα 10 χρόνια. Άσκηση 6.9 Γνωρίζετε ότι ο αριθµός e, η βάση των νεπερίων λογαρίθµων, δίνεται από το όριο

n

n n⎟⎠⎞

⎜⎝⎛ +

∞→

11lim . Υπολογίστε (α) τους 100 πρώτους όρους της ακολουθίας

n

n na ⎟

⎠⎞

⎜⎝⎛ +=

11 , και (β) τον µικρότερο αριθµό n για τον οποίο |e-an|<0.001.

Άσκηση 6.10 Χρησιµοποιώντας την συνάρτηση Random[] δηµιουργήστε ένα πίνακα µε στοιχεία 20 τυχαίους αριθµούς µεταξύ 1-100. Χρησιµοποιείστε συναρτησιακό προγραµµατισµό για να βρείτε το µικρότερο και µεγαλύτερο από τους αριθµούς αυτούς, και τη θέση που κατέχει στη παραπάνω λίστα.

Page 126: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

126

Άσκηση 6.11

Από τα µαθηµατικά ξέρουµε τη σχέση nxx nn /)1()1log(1

1∑∞

+−=+ .

Χρησιµοποιώντας διαδικαστικό προγραµµατισµό βρείτε τον ελάχιστο αριθµό όρων που πρέπει να χρησιµοποιήσετε στη σειρά αυτή για να υπολογίσετε το log(2) µε ακρίβεια 1%. Άσκηση 6.12

Από τα µαθηµατικά ξέρουµε τη σχέση ∑∞

=1

2

2 16 n

π. Ορίζουµε την ακολουθία

∑−=n

n ma

12

2 16

π , που δίνει το σφάλµα στη προσέγγιση του

6

2π από τη

παραπάνω σειρά χρησιµοποιώντας πεπερασµένο αριθµό όρων. Χρησιµοποιώντας

διαδικαστικό προγραµµατισµό υπολογίστε το σφάλµα στον υπολογισµό του 6

2π για

τιµές του m=10-100. Παραστήστε γραφικά τη µεταβολή αυτή. Άσκηση 6.13 Από τα µαθηµατικά ξέρουµε ότι η συνάρτηση ζήτα ορίζεται από τη σχέση

∑∞

=1

1)( pnpζ . Χρησιµοποιείστε διαδικαστικό προγραµµατισµό για να υπολογίστε

τις τιµές της συνάρτησης αυτής για p=2, 3, ... 10, µε ακρίβεια δέκα δεκαδικών ψηφίων. Άσκηση 6.14 Με την εκτέλεση της παρακάτω εντολής, για ποιες περιοχές τιµών των µεταβλητών x και e, η παράµετρος y παίρνει τη τιµή –20,

]20,20),1!(!&&8&&3[ =−==<=> yyexxIf .

Page 127: Theodorou Math Practikos Odigos

6.6 Ασκήσεις

127

Άσκηση 6.15 Να γραφεί ένα πρόγραµµα που να υπολογίζει τις ρίζες της δευτεροβάθµιας

εξίσωσης 02 =++ γβ xxa , για όλες τις δυνατές περιπτώσεις.

Άσκηση 6.16 Χρησιµοποιώντας διαδικαστικό προγραµµατισµό, και την εντολή Module, γράψτε ένα πρόγραµµα που υπολογίζει τους όρους της ακολουθίας,

.1,11 11

=+=−

SS

Sn

n µε

Παραστήστε γραφικά τα αποτελέσµατα σας.

Page 128: Theodorou Math Practikos Odigos

∆ΙΑ∆ΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

128

Page 129: Theodorou Math Practikos Odigos

7.1 Προσέγγιση αριθµητικών τιµών

129

ΚΕΦΑΛΑΙΟ 7

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA

Στο παρόν κεφάλαιο παραθέτονται µερικές χρήσιµες πληροφορίες σχετικά µε τη διαχείριση της Mathematica. Περισσότερες πληροφορίες µπορείτε να βρείτε στο Help της Mathematica και σε βιβλία.

7.1 Προσέγγιση αριθµητικών τιµών Αρκετές φορές, τα αριθµητικά αποτελέσµατα που υπολογίσθηκαν µε τη

Mathematica χρειάζεται να εξαχθούν από το πρόγραµµα και να αποθηκευθούν στο σκληρό δίσκο υπό µορφή ενός αρχείου. Τα αποτελέσµατα αυτά θα πρέπει επίσης να αποθηκευθούν µε την επιθυµητή ακρίβεια για να είναι εύχρηστα για περαιτέρω επεξεργασία.

Παρόλο που τα αποτελέσµατα εµφανίζονται στην οθόνη µε µικρό αριθµό δεκαδικών ψηφίων, οι αριθµητικοί υπολογισµοί γίνονται στη Mathematica µε ακρίβεια 16 δεκαδικών ψηφίων, και τα αποτελέσµατα αποθηκεύονται στον πυρήνα του προγράµµατος µ’ αυτή την ακρίβεια. Εάν προσπαθήσουµε να αποθηκεύσουµε σ’ ένα αρχείο τους δεκαδικούς αυτούς αριθµούς, έτσι όπως υπολογίσθηκαν, θα πάρουµε αριθµούς που στις περισσότερες περιπτώσεις είναι δύσχρηστοι, µια και θα έχουν 16 δεκαδικά ψηφία. Θα πρέπει λοιπόν προτού εξάγουµε τα αριθµητικά αυτά αποτελέσµατα να τα προσεγγίσουµε µε την επιθυµητή ακρίβεια. Οι βασικές συναρτήσεις προσέγγισης που υπάρχουν στη Mathematica είναι οι εξής:

Ceiling[a], υπολογίζει τον πλησιέστερο προς τα πάνω ακέραιο αριθµό.

Page 130: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA

130

In[1]:=Ceiling[2.4] Out[1]=3

Floor[a], υπολογίζει τον πλησιέστερο προς τα κάτω ακέραιο αριθµό. In[2]:=Floor[2.4] Out[2]=2

Round[a], υπολογίζει τον πλησιέστερο στον α ακέραιο αριθµό. In[3]:=Round[2.6] Out[3]=3

IntegerPart[a], δίνει το ακέραιο µέρος του α. In[4]:=IntegerPart[2.4] Out[4]=2

Chop[a], µετατρέπει µια αριθµητική τιµή πολύ κοντά στο µηδέν σε ακριβώς µηδέν. Η προκαθορισµένη µέγιστη απόκλιση για µηδενισµό είναι 10-10.

In[5]:=Chop[1.*10^(-11)] Out[5]=0

Χρησιµοποιώντας τις παραπάνω εντολές µπορούµε να προσεγγίσουµε ένα

δεκαδικό αριθµό ώστε να έχει ακρίβεια n δεκαδικών ψηφίων, µικρότερη των 16 ψηφίων, µε την εντολή:

a1 = Round[10n a]/10n // N ∆ηλαδή, παίρνουµε τον πλησιέστερο ακέραιο αριθµό αφού πρώτα πολλαπλασιά-σουµε µε 10n, και µετά διαιρέσουµε το αποτέλεσµα µε το 10n. Επειδή ο αριθµός Round[10n a] / 10n είναι ρητός, τον µετατρέπουµε ξανά σε δεκαδικό µε την εντολή //Ν. Παράδειγµα

In[6]:=a=Table[Sqrt[n], Sin[n]//N, n, 2, 5]

Page 131: Theodorou Math Practikos Odigos

7.2 Εκτύπωση αποτελέσµατος στην οθόνη

131

Out[6]=1.41421,0.909297,1.73205,0.14112,2.,-0.756802,2.23607,-0.958924 In[7]:=a1=Round[10^2 a]/10^2//N Out[7]=1.41, 0.91, 1.73, 0.14, 2., -0.76, 2.24, -0.96

7.2 Εκτύπωση αποτελέσµατος στην οθόνη Η εκτύπωση στην οθόνη της αριθµητικής τιµής των παραµέτρων a, b, ...

γίνεται µε την εντολή Print[a, b, …]

Παράδειγµα:

In[1]:=a1=2;a2=3;a3=4; In[2]:=Print[a1] From In[2]:=2 In[3]:=Print[a1,a2,a3] From In[3]:=234

Από το παραπάνω παράδειγµα είναι φανερό ότι στην περίπτωση που περιλαµβάνονται πολλοί αριθµοί στο ίδια εντολή Print, η Mathematica εκτυπώνει τον ένα αριθµό δίπλα στον άλλο, χωρίς την ύπαρξη ενδιάµεσων κενών. Όµως, µε το τρόπο αυτό γραφής δεν µπορούµε να τους ξεχωρίσουµε, και για να αποφύγουµε τέτοιου είδους προβλήµατα, µπορούµε να τυπώνουµε ενδιάµεσο κείµενο που να τους ξεχωρίζει και να δηλώνει τον καθένα απ΄ αυτούς. Το κείµενο αυτό πρέπει να τοποθετείται µέσα σε εισαγωγικά, χρησιµοποιώντας το Αγγλικό πληκτρολόγιο, π.χ.

In[4]:=Print["a1= ", a1,", a2= ", a2,", a3= ", a3] From In[4]:=a1= 2, a2= 3, a3= 4

Μέσα στο κείµενο µπορούν να περιλαµβάνονται σηµεία στίξεως, σύµβολα και κενά.

Page 132: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA

132

7.3 Έξοδος αποτελεσµάτων Μια λίστα a, που περιέχει αριθµητικά αποτελέσµατα, µπορεί να

αποθηκευθεί στο δίσκο µε την εντολή: Export[“filename”, a, “Format”]

Το όνοµα filename περιλαµβάνει το όνοµα του αρχείου µαζί µε τη διεύθυνση στην οποία αποθηκεύεται. Το Format καθορίζει τον τύπο του filename, π.χ. Table για τη περίπτωση πίνακα. Εάν η επέκταση του αρχείου filename είναι dat, τότε δεν χρειάζεται να ορισθεί το Format, και η αποθήκευση γίνεται υπό µορφή πίνακα µε την εντολή:

Export[“filename.dat” , a] In[1]:=Export["c:\dat.dat", a1, "Table"] Out[1]=c:\dat.dat In[2]:=Export["c:\dat1.dat", a1] Out[2]=c:\dat1.dat

7.4 Έξοδος σχήµατος Ένα σχήµα που έχει δηµιουργηθεί µε τη Mathematica µπορεί να εξαχθεί

από αυτή και να αποθηκευθεί στο δίσκο σε διάφορες µορφές, π.χ. σε «Windows Metafile Format» (*.wmf), που είναι κατάλληλη για εισαγωγή στο word, ή σε «Encapsulated PostScript Format» (*.eps), για εισαγωγή σε Tex, µε τον ακόλουθο τρόπο: επιλέγουµε το σχήµα µε το «ποντίκι» και κατόπιν µέσα από το παράθυρο «Edit Save Selection As» επιλέγουµε Windows Metafile (WMF) ή EPS, ανάλογα µε τη περίπτωση.

7.5 Είσοδος δεδοµένων Ένα αρχείο µε δεδοµένα µπορεί να διαβαστεί από τη Mathematica µε την

εντολή a = Import[“filename”, “Format”]

Page 133: Theodorou Math Practikos Odigos

7.6 Εντοπισµός συντακτικού λάθους

133

όπου Filename είναι το όνοµα του αρχείου µαζί µε τη διεύθυνση του και a ο πίνακας µε τα δεδοµένα αυτά. Το Format καθορίζει τον τύπο του αρχείου, π.χ. Table, όταν πρόκειται για αρχείο µε αριθµητικά δεδοµένα. Εάν η επέκταση του αρχείου filename είναι dat, τότε δεν χρειάζεται να ορισθεί το Format.

In[1]:=ain=Import["c:\dat.dat"]

7.6 Εντοπισµός συντακτικού λάθους Η πιο συχνή περίπτωση διαχείρισης της Mathematica που αντιµετωπίζει ο

χρήστης, έχει να κάνει µε τη κατανόηση των µηνυµάτων µε τα οποία απαντά ο υπολογιστής σε περίπτωση σφαλµάτων, και στη συνέχεια τη διόρθωση των λανθασµένων εντολών. Τα µηνύµατα αυτά περιέχουν ουσιαστικές πληροφορίες και αποσκοπούν στο να καθοδηγήσουν τον χρήστη στον εντοπισµό του λάθους. Σε µερικές όµως περιπτώσεις είναι πρακτικά αδύνατο να εντοπισθεί το συντακτικό λάθος στη προβληµατική εντολή, όταν αυτή εξεταστεί µεµονωµένα. Μια τέτοια απλή περίπτωση είναι η παρακάτω:

In[1]:=x=3 Out[1]=3 In[2]:=D[x^2, x] From In[2]:=General::ivar: 3 is not a valid variable. Out[2]= 93∂

Στην εντολή In[2] φαινοµενικά δεν υπάρχει συντακτικό λάθος. Το λάθος οφείλεται στο γεγονός ότι δεν µπορεί να εκτελεστεί παραγώγιση ως προς ένα σύµβολο, στο οποίο προγενέστερα έχει αποδοθεί συγκεκριµένη αριθµητική τιµή. Στο παραπάνω παράδειγµα, στη παράµετρο x έχει αποδοθεί, µε προγενέστερη εντολή, η αριθµητική τιµή 3. Για να διορθωθεί το πρόβληµα θα πρέπει να αναιρεθεί η αριθµητική αυτή τιµή, που γίνεται µε την εντολή

In[3]:=x=. In[4]:=D[x^2, x] Out[4]=2 x

Page 134: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA

134

Σε µακροσκελή προγράµµατα συχνά εµφανίζονται παρόµοια λάθη, που έχουν να κάνουν µε την απόδοση σε µια παράµετρο, σε διαφορετικά σηµεία του προγράµµατος, διαφορετικών και αλληλοσυγκρουόµενων ιδιοτήτων, πράγµα που καθιστά τον εντοπισµό των λαθών αυτών αρκετά δύσκολο. Μια διαδικασία που διευκολύνει τον εντοπισµό του λάθους έχει να κάνει µε τη διαγραφή όλων των παραµέτρων από τη µνήµη του υπολογιστή, µε την εντολή Remove["Global`*"] (ή του ξεφορτώµατος του Kernel), και στη συνέχεια την επιλεγµένη εκτέλεση µερικών εντολών του προγράµµατος για έλεγχο. Τέλος πρέπει να αναφερθεί ότι ουσιαστική εµπειρία στη χρήση της Mathematica αποκτάται µόνο µε την εξάσκηση και όχι µε την εκµάθηση συνταγών.

7.7 ∆ιαµόρφωση φύλλου εργασίας Μπορούµε να διαµορφώσουµε το φύλλο εργασίας της Mathematica

εισάγοντας κείµενο που να επεξηγεί τη λύση του προβλήµατος που αντιµετωπίζουµε, το οποίο δεν αποτελεί εκτελέσιµη εντολή για τη Mathematica αλλά σχόλιο, και µπορεί να είναι είτε στα Ελληνικά είτε στα Αγγλικά. Με τις επιλογές που υπάρχουν στο παράθυρο Style του Format µπορούµε να ορίσουµε τίτλο, υπότιτλο, παραγράφους, υποπαραγράφους και επεξηγηµατικό κείµενο (text). Οι επιλογές αυτές µπορούν είτε να ενεργοποιηθούν από το παράθυρο µε τη χρήση του «ποντικιού», είτε µε το πληκτρολόγιο, δίνοντας την εντολή Alt→n µε n έναν αριθµό από 1-9 που αντιστοιχεί στη συγκεκριµένη επιλογή. Η διαµόρφωση του κειµένου αυτού, ως προς το είδος των γραµµάτων (Font), την εµφάνιση τους (Face), το µέγεθος τους (Size), το χρώµα τους (Text Color), το χρώµα του υπόβαθρου (Background Color), τη στοίχιση του κειµένου (Text Alignment) κ.λ.π., µπορεί να γίνει µε τις επιλογές που υπάρχουν στο παράθυρο Format του κυρίως µενού.

7.8 Εντολές ελέγχου του προγράµµατος Timing[expression]: εκτελεί την εντολή expression και ταυτόχρονα υπολογίζεται και ο χρόνος που χρειάζεται ο υπολογιστής για να εκτελέσει την εντολή αυτή. Τα δυο αυτά αποτελέσµατα επιστρέφονται υπό µορφή λίστας.

Page 135: Theodorou Math Practikos Odigos

7.8 Εντολές ελέγχου του προγράµµατος

135

TimeUsed[ ]: δίνει το συνολικό χρόνο, σε δευτερόλεπτα, που χρειάστηκε ο επεξεργαστής για την εκτέλεση όλων των πράξεων που έγιναν από την έναρξη του προγράµµατος της Mathematica. Για να προσδιοριστεί ο χρόνος που χρειάζεται για την εκτέλεση ενός τµήµατος του προγράµµατος, εκτελούµε στην αρχή του τµήµατος αυτού την εντολή startingtime=TimeUsed[ ], για να προσδιορίσουµε την αρχή του χρόνου, και στο τέλος την εντολή totaltime=TimeUsed[ ]-startingtime. MaxMemoryUsed[ ]: δίνει το µέγιστο αριθµό bytes µνήµης που χρησιµοποίησε η Mathematica στο συγκεκριµένο πρόγραµµα. MemoryInUse[ ]: δίνει τον αριθµό bytes µνήµης που χρησιµοποιεί η Mathematica τη συγκεκριµένη στιγµή. Trace[expression]: δηµιουργεί µια λίστα µε όλα τα ενδιάµεσα αποτελέσµατα που δηµιουργούνται κατά τον υπολογισµό της expression. FullForm[expression]: δίνει την έκφραση που χρησιµοποιεί εσωτερικά η Mathematica για να αναπαραστήσει την εντολή expression. TreeForm[expression]: παρόµοια µε την εντολή FullForm µόνο που δίνει το αποτέλεσµα σε µορφή δένδρου.

Page 136: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΤΗΣ MATHEMATICA

136

Page 137: Theodorou Math Practikos Odigos

7.8 Εντολές ελέγχου του προγράµµατος

137

ΚΕΦΑΛΑΙΟ 8

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

Η λίστα είναι ένα βασικό εργαλείο της Mathematica. Χρησιµοποιείται για την αναπαράσταση ανυσµάτων, πινάκων, την οµαδοποίηση διάφορων αντικείµενων κλπ, αλλά και στον προγραµµατισµό. Στο πρώτο κεφάλαιο είδαµε διάφορους τρόπους ορισµού µιας λίστας. Στο παρόν κεφάλαιο θα παρουσιάσουµε µερικές βασικές εντολές µε τις οποίες µπορούµε να τροποποιήσουµε µια λίστα, και µερικές βασικές τεχνικές χρήσης της λίστας στο προγραµµατισµό.

Μια λίστα από διαδοχικούς αριθµούς µπορεί να δηµιουργηθεί µε την εντολή Range,

Range[a1, a2, a3] η οποία δηµιουργεί µια λίστα αριθµών από το a1 µέχρι το a2 και µε βήµα ίσο µε a3. Όταν το a3 είναι ίσο µε τη µονάδα µπορεί να παραληφθεί. Επίσης όταν a1=a3=1 τότε η εντολή µπορεί να γραφεί σε συντοµία ως Range[a2] και δηµιουργεί µία λίστα µε όλους τους ακέραιους αριθµούς από το 1 µέχρι το ακέραιο µέρος του a2. Παραδείγµατα:

In[1]:=Range[5] Out[1]=1, 2, 3, 4, 5 In[2]:=Range[4.3] Out[2]=1, 2, 3, 4 In[3]:=Range[1.2, 7] Out[3]=1.2, 2.2, 3.2, 4.2, 5.2, 6.2

Page 138: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

138

8.1 Τροποποίηση λίστας Συχνά εµφανίζεται η ανάγκη τροποποίησης υπάρχουσας λίστας. Η κάθε

τροποποίηση γίνεται µε βάση κάποιους κανόνες οι οποίοι διέπουν το συγκεκριµένο πρόβληµα, και είναι διαφορετικοί από περίπτωση σε περίπτωση. Στη συγκεκριµένη παράγραφο θα παρουσιάσουµε µερικούς βασικούς κανόνες τροποποίησης λίστας, οι οποίοι υπάρχουν ως εσωτερικές εντολές της Mathematica και µπορούν να χρησιµοποιηθούν είτε µεµονωµένα είτε σε συνδυασµό για να επιλύσουν συγκεκριµένα προβλήµατα. Θα εφαρµόσουµε τις εντολές αυτές στη παρακάτω λίστα

In[1]:=A = 12, 3, 6, 3, 8, 9, 10.

Οι βασικές εσωτερικές εντολές της Mathematica για τη τροποποίηση λίστας είναι οι παρακάτω, Sort: επιστρέφει µία λίστα της οποίας τα στοιχεία είναι σε αύξουσα σειρά τιµών,

In[2]:=Sort[A] Out[2]=3, 3, 6, 8, 9, 10, 12

Reverse: επιστρέφει µία λίστα της οποίας τα στοιχεία είναι σε αντεστραµµένη σειρά,

In[3]:=Reverse[A] Out[3]=10, 9, 8, 3, 6, 3, 12

Rest: επιστρέφει µια λίστα παραλείποντας το πρώτο στοιχείο της αρχικής, In[4]:=Rest[A] Out[4]=3, 6, 3, 8, 9, 10

Drop[Α, n]: επιστρέφει µια λίστα παραλείποντας τα n πρώτα στοιχεία της αρχικής. Εάν το n είναι αρνητικό παραλείπει τα τελευταία n στοιχεία,

In[5]:=Drop[A, 3] Out[5]=3, 8, 9, 10 In[6]:=Drop[A, -3] Out[6]=12, 3, 6, 3

Page 139: Theodorou Math Practikos Odigos

8.1 Τροποποίηση λίστας

139

Take[Α, n]: επιστρέφει µία λίστα που περιέχει τα n πρώτα στοιχεία της αρχικής λίστας. Εάν το n είναι αρνητικό επιστρέφει τα n τελευταία,

In[7]:=Take[A, 3] Out[7]=12, 3, 6 In[8]:=Take[A, -3] Out[8]=8, 9, 10

Append: επιστρέφει µία λίστα προσθέτοντας ένα στοιχείο στο τέλος της αρχικής, In[9]:=Append[A, a4] Out[9]=12, 3, 6, 3, 8, 9, 10, a4

Prepend: επιστρέφει µία λίστα προσθέτοντας ένα στοιχείο στην αρχή της αρχικής, In[10]:=Prepend[A, a4] Out[10]=a4, 12, 3, 6, 3, 8, 9, 10

Insert[A, a4, i]: επιστέφει µία λίστα που δηµιουργείται µε την εισαγωγή του στοιχείου a4 στη θέση i της λίστας A. Εάν το i είναι αρνητικό, το εισάγει στη θέση |i| µετρώντας από το τέλος της λίστας.

In[11]:=Insert[A, a4, 3] Out[11]= 12, 3, a4, 6, 3, 8, 9, 10

Count[A, a]: υπολογίζει πόσες φορές το στοιχείο a εµφανίζεται στη λίστα Α. In[12]:=Count[A, 3] Out[12]=2

Position[A, a]: προσδιορίζει τις θέσεις της λίστας Α στις οποίες εµφανίζεται το στοιχείο a.

In[13]:=Position[A, 3] Out[13]=2,4

Στις παραπάνω εντολές το αποτέλεσµα είναι µια καινούργια λίστα, χωρίς έτσι να προκαλείται αλλοίωση στην αρχική. Με τις εντολές AppentTo, και PrependTo η

Page 140: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

140

προσθήκη γίνεται στην αρχική λίστα, π.χ. την A, η οποία και τροποποιείται. Με τις εντολές αυτές έχουµε τη δυνατότητα να προσθέτουµε νέα στοιχεία σε υπάρχουσα λίστα και έτσι να αυξάνουµε το µήκος της. AppendTo: εισάγει το νέο στοιχείο στο τέλος της αρχικής λίστας,

In[14]:=AppendTo[A, a4] Out[14]=12, 3, 6, 3, 8, 9, 10, a4

PrependTo: εισάγει το νέο στοιχείο στην αρχή της αρχικής λίστας, In[15]:=PrependTo[A, a4] Out[15]=a4, 12, 3, 6, 3, 8, 9, 10

First[A]: επιστρέφει το πρώτο στοιχείο της λίστας.

In[16]:=First[A] Out[16]=12

Last[A]: επιστέφει το τελευταίο στοιχείο της λίστας. In[17]:=Last[A] Out[17]=10

Υπάρχουν επίσης οι παρακάτω εντολές διαχείρισης µιας λίστας Permutations[A]: επιστρέφει µια λίστα που περιέχει ως υπολίστες αυτές που δηµιουργούνται από την αρχική µε αντιµετάθεση των στοιχείων της.

In[18]:=Permutations[3,7,4] Out[18]=3,7,4, 3,4,7,7,3,4, 7,4,3,4,3,7, 4,7,3

Join[A, B]: επιστρέφει µια λίστα, ενοποιώντας τις λίστες Α και Β. Η λίστα αυτή δηµιουργείται µε παράθεση των στοιχείων της µιας λίστας δίπλα στα στοιχεία της άλλης, χωρίς την αφαίρεση της πολλαπλότητας που προκαλούν τα κοινά στοιχεία,

In[19]:=Join[1,4,3, 3,5,2] Out[19]=1,4,3,3,5,2

Page 141: Theodorou Math Practikos Odigos

8.2 Χαρακτηριστικά λίστας

141

Union[Α, Β]: επιστρέφει µια λίστα µε όλα τα στοιχεία των Α και Β, χωρίς επαναλήψεις (ένωση των συνόλων Α και Β). Η λίστα που επιστρέφεται έχει τα στοιχεία σε αύξουσα σειρά,

In[20]:=Union[1,4,3, 3,5,2] Out[20]=1,2,3,4,5

Η εντολή αυτή όταν εφαρµοστεί σε µια µόνο λίστα επιστρέφει µία λίστα µε τα διακριτά στοιχεία της αρχικής, τοποθετηµένα σε αύξουσα σειρά. Με το τρόπο αυτό µπορούµε να βρούµε τα διάκριτα στοιχεία µιας λίστας,

In[21]:=Union[1,4,6,4,10,1,6] Out[21]=1,4,6,10

Intersection[A, B]: επιστρέφει µια λίστα µε τα κοινά στοιχεία των Α και Β (τοµή των συνόλων Α και Β).

In[22]:=Intersection[1,2,3, 3,5,2,3] Out[22]=2,3

Flatten: µετατρέπει µια πολυδιάστατη λίστα σε µονοδιάστατη, ενοποιώντας τις εσωτερικές λίστες (αφαιρεί τα εσωτερικά άγκιστρα),

In[23]:=Flatten[1, 2, 3, 4] Out[23]=1, 2, 3, 4

Partition[A, n]: διαµέλιση της λίστας Α σε υπολίστες µεγέθους n, In[24]:=Partition[1, 2, 3, 4, 5, 6, 3] Out[24]=1, 2, 3, 4, 5, 6

8.2 Χαρακτηριστικά λίστας Τα χαρακτηριστικά µιας λίστας µπορούν να προσδιοριστούν µε τις

παρακάτω εντολές: Length: υπολογίζει το µήκος µιας µονοδιάστατης λίστας,

In[1]:=Length[A] Out[1]=7

Page 142: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

142

Dimensions: προσδιορίζει τις διαστάσεις της λίστας. In[2]:=Dimensions[A] Out[2]=7

Short: Πολλές φορές οι λίστες που δηµιουργούνται έχουν µεγάλο µέγεθος και δεν ενδείκνυται να εµφανιστούν ολόκληρες στην οθόνη. Η εντολή Short[A, n] εµφανίζει στην οθόνη ένα µικρό κοµµάτι της λίστας για έλεγχο. Το n δηλώνει το πλήθος των στοιχείων που εµφανίζονται.

8.3 Επίδραση συνάρτησης σε λίστα Στη παρούσα παράγραφο θα εξετάσουµε την επίδραση συναρτήσεων, και

τελεστών γενικότερα, πάνω σε λίστες. Για να κατανοήσουµε την επίδραση αυτή θα πρέπει να δούµε το τρόπο που χρησιµοποιεί η Mathematica για την εσωτερική αναπαράσταση εκφράσεων σε δενδρική µορφή (TreeForm), και ιδιαίτερα να διερευνήσουµε τη δοµή που χρησιµοποιεί για να αναπαραστήσει λίστες που άµεσα µας ενδιαφέρουν. Η δενδρική αυτή µορφή της έκφρασης expression µπορεί να εµφανιστεί µε την εντολή

TreeForm[expression] Η δενδρική µορφή π.χ. µίας µονοδιάστατης λίστας δίνεται παρακάτω

In[1]:=TreeForm[1,3,2,8] Out[1]//TreeForm=List[1,3,2,8]

Όπως συνάγεται και από το αποτέλεσµα αυτό, κάθε στοιχείο περιγράφεται από την επικεφαλίδα του, που το χαρακτηρίζει, και το κυρίως µέρος που αποδίδει το µέγεθος του. Για τη περίπτωση της µονοδιάστατης λίστας, η επικεφαλίδα είναι το List και δηλώνει ότι η παράµετρος είναι λίστα, ενώ το δεύτερο µέρος δηλώνει το περιεχόµενο της. Η επικεφαλίδα της λίστας αυτής χαρακτηρίζεται ως το µηδενικό επίπεδο της δοµής, ενώ το εσωτερικό της ως το πρώτο επίπεδο της.

Στη περίπτωση σύνθετων εκφράσεων, που αποτελούνται από φωλιασµένες δοµές, όπως είναι µια δισδιάστατη λίστα, η δενδρική µορφή τους είναι δοµηµένη σε

Page 143: Theodorou Math Practikos Odigos

8.3 Επίδραση συνάρτησης σε λίστα

143

περισσότερα επίπεδα. Για τη περίπτωση π.χ. της δισδιάστατης λίστας, η δοµή δίνεται παρακάτω

In[2]:=TreeForm[2,3,5,8]

ListB»

List@2, 3D, »List@5, 8D

F,

και αποτελείται από την εξωτερική λίστα που όπως είπαµε χαρακτηρίζεται από την επικεφαλίδα της (µηδενικό επίπεδο της δοµής), και το εσωτερικό της που είναι το πρώτο επίπεδο. Στη δισδιάστατη όµως λίστα το εσωτερικό της αποτελείται επίσης από λίστες. Κάθε εσωτερική λίστα χαρακτηρίζεται από την επικεφαλίδα της, που είναι τώρα πρώτου επιπέδου, και το εσωτερικό της που είναι δευτέρου επιπέδου. Με το τρόπο αυτό µπορούµε να αναλύσουµε και πιο σύνθετες δοµές.

Οι λίστες µπορούν να τροποποιηθούν µε τη χρήση των εντολών Map και

Apply. 8.3.1 Εντολή Map

Εάν ως όρισµα της συνάρτησης Cos[x] χρησιµοποιηθεί µια λίστα, π.χ. η λίστα a, b, c, d, τότε το αποτέλεσµα της πράξης είναι:

In[3]:=A=a, b, c, d Out[3]=a, b, c, d In[4]:=Cos[A] Out[4]=Cos[a], Cos[b], Cos[c], Cos[d]

δηλαδή η Mathematica εφαρµόζει τη συνάρτηση Cos σε κάθε στοιχείο της λίστας. Αυτός ο τρόπος επίδρασης είναι ιδιότητα, που καλείται Listable, της συνάρτησης Cos[x], την οποία έχουν και πολλές άλλες συναρτήσεις όπως η Log[x], αλλά δεν είναι καθολική. Εάν θέλουµε να επιβάλουµε σε µια τυχαία συνάρτηση να επιδράσει πάνω σε κάθε ένα από τα στοιχεία µιας λίστας, χρησιµοποιούµε την εντολή Map,

Map[f, a, b, c] Η εντολή Map σε συνοπτική µορφή είναι /@, π.χ.

Page 144: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

144

f /@ a, b, c Έτσι µπορούµε να επιβάλουµε µια συνάρτηση f να επιδράσει πάνω σε κάθε στοιχείο της λίστας, και µ’ αυτό το τρόπο να εκτελέσουµε επαναληπτικούς υπολογισµούς, προσδιορίζοντας τη τιµή της συνάρτησης για όλα τα σηµεία της λίστας,

In[5]:=Map[f, A] Out[5]=f[a], f[b], f[c], f[d]

Όταν όµως θέλουµε η εντολή f να επιδράσει σε ένα µόνο στοιχείο, που βρίσκεται στη θέση k, τότε χρησιµοποιούµε την εντολή MapAt,

MapAt[f, list, k]

In[6]:=MapAt[f, A, 2] Out[6]=a, f[b], c, d

Από την ανάλυση που δώσαµε παραπάνω, για την αναπαράσταση µιας

δοµής, και τον ορισµό της εντολής Map, είναι φανερό ότι η τελευταία επιδρά πάνω στα στοιχεία του πρώτου επιπέδου της λίστας,

In[7]:=Map[f, a, b,c, d] Out[7]=f[a, b], f[c,d ]

Μπορούµε να επιβάλλουµε να δράσει πάνω σε στοιχεία ανωτέρου επιπέδου, π.χ. του k, µε την εντολή

Map[f, expression, k] Παρακάτω δίνεται ένα παράδειγµα δράσης της εντολής Map πάνω στο δεύτερο επίπεδο µιας δισδιάστατης λίστας,

In[8]:=Map[f, a, b, c, d, 2] Out[8]=f[a], f[b],f[c], f[d]

Page 145: Theodorou Math Practikos Odigos

8.3 Επίδραση συνάρτησης σε λίστα

145

8.3.2 Εντολή Apply

Μια παρόµοια εντολή µε τη Map, είναι η εντολή Apply. Η εντολή αυτή επιδρά και τροποποιεί την επικεφαλίδα ενός στοιχείου. Η δοµή της εντολής αυτής είναι η ακόλουθη:

Apply[NewHead, expression] η οποία αντικαθιστά την υπάρχουσα επικεφαλίδα της έκφρασης expression, µε την NewHead. Η εντολή αυτή, σε πιο συνοπτική µορφή, γράφεται

NewHead@@expression Παραδείγµατα εφαρµογής της είναι τα παρακάτω:

In[9]:=Apply[Plus,1,2,3,4] Out[9]=10 In[10]:=Apply[Plus, 1,2, 3,4] Out[10]= 4, 6

Στο πρώτο παράδειγµα η εντολή αυτή αποδίδει το άθροισµα των στοιχείων της λίστας, 4321 +++ , και στο δεύτερο, το άθροισµα των πινάκων 4,32,1 + .

Στα παραπάνω παραδείγµατα, έχουµε την αλλαγή της επικεφαλίδας στο βασικό (µηδενικό) επίπεδο από List σε Plus. Εκτός όµως από το επίπεδο αυτό έχουµε τη δυνατότητα αλλαγής της επικεφαλίδας σε ανώτερο επίπεδο, στο εσωτερικό µιας έκφρασης. Η εντολή για την αλλαγή της επικεφαλίδας στο επίπεδο k είναι

Apply[NewHead, expression, k] Για παράδειγµα, σε µια δισδιάστατη λίστα µπορούµε να αλλάξουµε την επικεφαλίδα σε πρώτο επίπεδο, που συνεπάγεται αλλαγή στις επικεφαλίδες στις εσωτερικές λίστες, όπως γίνεται παρακάτω:

In[11]:=Apply[Plus, 1,2, 3,4 ,1] Out[11]= 3, 7.

και συνεπάγεται το άθροισµα των στοιχείων στις επιµέρους εσωτερικές λίστες.

Page 146: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

146

8.4 Προγραµµατισµός µε τη χρήση λίστας Όπως αναφέραµε παραπάνω, µπορούµε να χρησιµοποιήσουµε τις εντολές

διαχείρισης µιας λίστας στο προγραµµατισµό. Με το τρόπο αυτό µπορούµε να γράψουµε προγράµµατα σε πιο συµπαγή µορφή. Παραδείγµατα του τρόπου γραφής τέτοιων προγραµµάτων δίνονται παρακάτω. Παράδειγµα 1: Θέλουµε να εντοπίσουµε, και να αποθηκεύσουµε σε µια λίστα, τους ακεραίους αριθµούς µεταξύ ένα και είκοσι που το Modulo τους ως προς τρία είναι ίσο µε ένα. Λύση: Ξεκινάµε ορίζοντας µια κενή λίστα, την F, στην οποία θα εισάγουµε κάθε αριθµό που εντοπίζουµε µε τις ζητούµενες ιδιότητες,

In[1]:=F=0; ∆ηµιουργούµε ένα βρόχο που υπολογίζει τους αριθµούς αυτούς Modulo τρία. Όσοι δε βρεθούν να ικανοποιούν την απαιτούµενη ιδιότητα αποθηκεύονται στη λίστα F,

In[2]:=Do[If[Mod[i,3]==1, AppendTo[F, i]],1, 2, 20] In[3]:=F Out[3]=1,4,7,10,13,16,19

Η εντολή Mod[x,y] υπολογίζει το x modulo y. Παράδειγµα 2: ∆ηµιουργήστε µία λίστα µε 10 ακεραίους αριθµούς, επιλεγµένους µε τυχαίο τρόπο µεταξύ ένα και δέκα. Για κάθε διάκριτο στοιχείο της λίστας, βρείτε τη συχνότητα εµφάνισης του στη λίστα και τις θέσεις τις οποίες κατέχει. Λύση: ∆ηµιουργούµε λίστα µε δέκα ακεραίους αριθµούς, επιλεγµένους µε τυχαίο τρόπο µεταξύ ένα και δέκα,

In[4]:=F1=Table[Random[Integer, 1,10],10] Out[4]=10,2,8,1,6,10,6,7,2,9

Χρησιµοποιώντας την εντολή Union, βρίσκουµε τα διάκριτα στοιχεία της λίστας αυτής και µε την εντολή Length υπολογίζουµε το πλήθος τους,

In[5]:=F2=Union[F1] Out[5]=1,2,6,7,8,9,10

Page 147: Theodorou Math Practikos Odigos

8.4 Προγραµµατισµός µε τη χρήση λίστας

147

In[6]:=m=Length[F2] Out[6]=7

Για κάθε στοιχείο της λίστας F2, βρίσκουµε την συχνότητα εµφάνισης του στη λίστα F1, µαζί µε τις θέσεις που κατέχει,

In[7]:=Do[m1=Count[F1,F2[[i]]]; m2=Position[F1,F2[[i]]]; Print["element= ",F2[[i]],", frequency=",m1,", positions= ",m2],i,1,m] element= 1 , frequency= 1 , positions= 4 element= 2 , frequency= 2 , positions= 2,9 element= 6 , frequency= 2 , positions= 5,7 element= 7 , frequency= 1 , positions= 8 element= 8 , frequency= 1 , positions= 3 element= 9 , frequency= 1 , positions= 10 element= 10 , frequency= 2 , positions= 1,6

Παράδειγµα 3: ∆ηµιουργήστε µία λίστα µε 50 ακεραίους αριθµούς, τυχαία επιλεγµένους µεταξύ 1-500. Χρησιµοποιώντας την εντολή Map, υπολογίστε τους αριθµούς αυτούς Modulo 11, Λύση: ∆ηµιουργούµε τη λίστα µε τους αριθµούς αυτούς, χρησιµοποιώντας την εντολή Random,

In[8]:=G=Table[Random[Integer, 1,500], 50]; κατόπιν υπολογίζουµε τους αριθµούς αυτούς Modulo 11

In[9]:=Map[Mod[#,11]&, G] Out[9]=3,6,1,8,0,1,2,4,6,8,7,10,0,0,0,2,9,3,0,3,3,8,6,2,1,1,4,8, 7,5,9,8,7,1,1,0,8,1,3,0,4,0,8,1,10,6,4,1,7,0

Παράδειγµα 4: Όπως είναι γνωστό, για το καλύτερο πειραµατικό προσδιορισµό της τιµής µιας ποσότητας, που την αποκαλούµε y, το πείραµα επαναλαµβάνεται πολλές φορές και η τιµή της παραµέτρου προσδιορίζεται από τη µέση τιµή των µετρήσεων αυτών.

Page 148: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

148

Έστω ότι εκτελούµε πάνω στον υπολογιστή ένα τέτοιο «πείραµα», µε τις τιµές των ανεξάρτητων «µετρήσεων» να δίνονται ως αποτέλεσµα της εντολής:

y=2.0+Random[] Με τις επόµενες εντολές δηµιουργούµε µια σειρά 50 ανεξάρτητων «µετρήσεων» και κατόπιν βρίσκουµε τη µέση τους τιµή, av, και τη διασπορά τους, sd.

In[10]:=m=50; In[11]:=G[m_]:=Table[2.+Random[],m]; In[12]:=A=G[m]; In[13]:=av=Apply[Plus, A]/m Out[13]=2.49292 In[14]:=f2:=Apply[Plus,#^2]/(m-1)& In[15]:=sd=Sqrt[f2[A-av]] Out[15]=0.318769

Για εξάσκηση στο προγραµµατισµό, διαχωρίσουµε τα δεδοµένα αυτά σε δύο οµάδες, των 25 µετρήσεων, και για καθεµιά απ’ αυτές υπολογίζουµε τη µέση τιµή και τη διασπορά.

In[16]:=m1=25 Out[16]=25 In[17]:=Α1=Partition[A,m1]; In[18]:=av2=Apply[Plus, Α1,1]/m1 Out[18]=2.4908,2.49503 In[19]:=sd2=Apply[Plus,(Α1-av2)^2,1]/(m1-1)//Sqrt Out[19]=0.338498, 0.304747

Ερώτηση: Εξηγείστε την επίδραση των διαφόρων εντολών του παραδείγµατος 4. Άσκηση 8.1 (i) ∆ηµιουργήστε µία λίστα µε τους 15 άρτιους θετικούς αριθµούς, χρησιµοποιώντας τις εντολές α) Table και β) Range. (ii) Ξεχωρίστε τα 10 πρώτα στοιχεία της λίστας που δηµιουργήθηκε, χρησιµοποιώντας τις εντολές α) Take και β) Drop.

Page 149: Theodorou Math Practikos Odigos

8.5 ∆ιαχείριση πίνακα

149

Άσκηση 8.2 Χρησιµοποιώντας την εντολή Table και Random δηµιουργήστε δύο λίστες, η καθεµιά αποτελούµενη από 15 ακέραιους αριθµούς τυχαία επιλεγµένους µεταξύ 1 και 10. Χρησιµοποιώντας εντολές διαχείρισης, (α) βάλτε τους αριθµούς σε κάθε µια λίστα σε αύξουσα σειρά, (β) βρείτε πόσες φορές κάθε στοιχείο της πρώτης λίστας εµφανίζεται στη δεύτερη, και τις θέσεις στις οποίες εµφανίζεται, (β) δηµιουργήστε µία λίστα µε τα κοινά στοιχεία που υπάρχουν και στις δύο λίστες, (γ) βρείτε τα στοιχεία που ανήκουν στη πρώτη λίστα και δεν ανήκουν στη δεύτερη.

8.5 ∆ιαχείριση πίνακα Εκτός από τις εντολές διαχείρισης λίστας που παρουσιάσαµε στις

προηγούµενες παραγράφους, στη παρούσα παράγραφο θα παρουσιάσουµε εντολές που ειδικά αφορούν τη διαχείριση πίνακα (δισδιάστατης λίστας). Η Mathematica περιέχει ένα εκτενές σύνολο εντολών για την εκτέλεση αυτών των διαδικασιών, οι οποίες βρίσκονται συγκεντρωµένες στο πακέτο MatrixManipulation. Το σύνολο των εντολών που περιέχονται στο πακέτο αυτό παρουσιάζονται στο Help της Mathematica, από τις οποίες θα παρουσιάσουµε, στη παρούσα παράγραφο, ένα µικρό υποσύνολο.

Για την εκτέλεση των παραπάνω εντολών χρειάζεται πρώτα να ενεργοποιηθεί το αντίστοιχο πακέτο της Mathematica, στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση του πακέτου είναι η ακόλουθη

<< LinearAlgebra`MatrixManipulation`

In[1]:=<<LinearAlgebra`MatrixManipulation` Για τη παρουσίαση της δράσης των εντολών θα χρησιµοποιήσουµε τους πίνακες b1 και b2 που ορίζονται παρακάτω. Για λόγους εποπτικής παρουσίασης των αποτελεσµάτων χρησιµοποιείται η εντολή MatrixForm, που εµφανίζει τα αποτελέσµατα υπό µορφή αλγεβρικού πίνακα.

Page 150: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

150

In[2]:=b1=5,9,6,9,3,6,0,2,8,0,4,1,1,5,7,4; b1//MatrixForm Out[2]= i

k

jjjjjjjjj

5 9 6 93 6 0 28 0 4 11 5 7 4

y

zzzzzzzzz

In[3]:=b2=9,7,7,7,7,2,3,3,1,6,9,6,4,3,2,9; b2//MatrixForm Out[3]= i

k

jjjjjjjjj

9 7 7 77 2 3 31 6 9 64 3 2 9

y

zzzzzzzzz

Με τη χρήση των εντολών του πακέτου MatrixManipulation µπορούµε να εκτελέσουµε τις παρακάτω διαδικασίες: AppendColumns, για να συνενώσουµε τις στήλες δύο πινάκων (οι στήλες του δεύτερου πίνακα συνενώνονται µε αυτές του πρώτου),

In[4]:=AppendColumns[b1,b2]//MatrixForm Out[4]= i

k

jjjjjjjjjjjjjjjjjjjjjjjjj

5 9 6 93 6 0 28 0 4 11 5 7 49 7 7 77 2 3 31 6 9 64 3 2 9

y

zzzzzzzzzzzzzzzzzzzzzzzzz

AppendRows, για να συνενώσουµε τις γραµµές των πινάκων,

In[5]:= AppendRows[b1,b2]//MatrixForm Out[5]= i

k

jjjjjjjjj

5 9 6 9 9 7 7 73 6 0 2 7 2 3 38 0 4 1 1 6 9 61 5 7 4 4 3 2 9

y

zzzzzzzzz

Page 151: Theodorou Math Practikos Odigos

8.5 ∆ιαχείριση πίνακα

151

TakeColumns, για να επιλέξουµε τις πρώτες στήλες του πίνακα σε αριθµό ίσο µε αυτό που δηλώνεται στην εντολή,

In[6]:=TakeColumns[b1, 3]//MatrixForm Out[6]= i

k

jjjjjjjjj

5 9 63 6 08 0 41 5 7

y

zzzzzzzzz

ή για να επιλέξουµε τις τελευταίες στήλες του πίνακα σε αριθµό ίσο µε αυτό που δηλώνεται µε αρνητικό αριθµό στην εντολή,

In[7]:=TakeColumns[b1, -3]//MatrixForm Out[7]= i

k

jjjjjjjjj

9 6 96 0 20 4 15 7 4

y

zzzzzzzzz

TakeRows, για να επιλέξουµε τις πρώτες γραµµές του πίνακα σε αριθµό ίσο µε αυτό που δηλώνεται στην εντολή,

In[8]:=TakeRows[b1, 3]//MatrixForm Out[8]= i

k

jjjjj5 9 6 93 6 0 28 0 4 1

y

zzzzz

ή για να επιλέξουµε τις τελευταίες γραµµές του πίνακα σε αριθµό ίσο µε αυτό που δηλώνεται στην εντολή,

In[9]:=TakeRows[b1, -3]//MatrixForm Out[9]= i

k

jjjjj3 6 0 28 0 4 11 5 7 4

y

zzzzz

Page 152: Theodorou Math Practikos Odigos

∆ΙΑΧΕΙΡΙΣΗ ΛΙΣΤΑΣ

152

TakeColumns, για να επιλέξουµε ένα υποσύνολο από τις στήλες του πίνακα, από αυτή που καθορίζεται από το πρώτο έως αυτή που καθορίζεται από το τελευταίο αριθµό που δηλώνεται στην εντολή,

In[10]:=TakeColumns[b1,2, 4]//MatrixForm Out[10]= i

k

jjjjjjjjj

9 6 96 0 20 4 15 7 4

y

zzzzzzzzz

TakeRows, για να επιλέξουµε ένα υποσύνολο από τις γραµµές του πίνακα, από αυτή που καθορίζεται από το πρώτο έως αυτή που καθορίζεται από το τελευταίο αριθµό που δηλώνεται στην εντολή,

In[11]:=TakeRows[b1,2,3]//MatrixForm Out[11]=

J3 6 0 28 0 4 1

N

TakeMatrix, για να επιλέξουµε ένα υποπίνακα που καθορίζεται από τις δύο θέσεις που δίνονται στην εντολή

In[12]:=TakeMatrix[b1,2,2,3,3]//MatrixForm Out[12]=

J 6 00 4

N

Page 153: Theodorou Math Practikos Odigos

9.1 Ηµιλογαριθµικές και λογαριθµικές γραφικές παραστάσεις

153

ΚΕΦΑΛΑΙΟ 9

ΓΡΑΦΙΚΑ Στο κεφαλαίο 2 παρουσιάσαµε µερικές απλές περιπτώσεις γραφικών. Πέραν

όµως από τις περιπτώσεις αυτές η Mathematica έχει τη δυνατότητα να εκτελέσει πιο σύνθετες γραφικές παραστάσεις, µερικές από τις οποίες θα παρουσιάσουµε στο παρόν κεφάλαιο. Τα πακέτα που χρειάζονται για να γίνουν αυτές οι πιο σύνθετες γραφικές παραστάσεις συνήθως δεν ενεργοποιούνται αυτόµατα µε την εκκίνηση της Mathematica, και για να χρησιµοποιηθούν θα πρέπει πρώτα να ενεργοποιηθούν.

9.1 Ηµιλογαριθµικές και λογαριθµικές γραφικές παραστάσεις Οι γραφικές παραστάσεις που παρουσιάστηκαν στο τρίτο κεφάλαιο

αναφέρονται σε περιπτώσεις όπου οι άξονες είναι γραµµικοί. Όµως, σε αρκετές συναρτήσεις η προκύπτουσα µεταβολή τιµών είναι τέτοια που είναι προτιµότερο, για τη καλύτερη παρουσίαση της µεταβολής αυτής, να χρησιµοποιηθεί λογαριθµική κλίµακα. Η λογαριθµική αυτή κλίµακα µπορεί να αφορά είτε τον έναν είτε και τους δύο άξονες. Για την εκτέλεση των γραφηµάτων αυτών χρειάζεται το πακέτο γραφικών Graphics, το οποίο πρέπει να ενεργοποιηθεί στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση αυτή είναι η ακόλουθη

<<Graphics`Graphics` Μετά τη ενεργοποίηση του πακέτου, µπορούµε να χρησιµοποιούµε, ανάλογα µε τη περίπτωση, µια από τις εντολές LinearLogPlot, LogLinearPlot, ή LogLogPlot για τη δηµιουργία της γραφικής παράστασης. Στην πρώτη εντολή δηµιουργείται ένα

Page 154: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

154

Γραµµικό-Λογαριθµικό διάγραµµα (µε τον άξονα x γραµµικό και των y λογαριθµικό), στη δεύτερη περίπτωση ένα Λογαριθµικό-Γραµµικό διάγραµµα και στην τελευταία περίπτωση ένα Λογαριθµικό-Λογαριθµικό διάγραµµα. Ένα παράδειγµα µιας Linear-Log γραφικής παράστασης είναι η παρακάτω:

In[1]:=<<Graphics`Graphics` In[2]:=LinearLogPlot[Exp[x], x, 1, 10]

0 2 4 6 8 101

10

100

1000

10000

Στην περίπτωση αναπαράστασης λίστας χρησιµοποιούµε τις εντολές LinearLogListPlot, LogLinearListPlot, ή LogLogListPlot αντίστοιχα. Ένα τέτοιο παράδειγµα δίνεται παρακάτω

In[3]:=a=Table[x, x^(-2), x, 0.1 , 10, 0.1]; In[4]:=LogLogListPlot[a]

Page 155: Theodorou Math Practikos Odigos

9.2 Αποτύπωση πειραµατικών σφαλµάτων στο γράφηµα

155

0.1 0.2 0.5 1 2 5 100.01

0.1

1

10

100

Όταν το πρώτο συνθετικό µιας εντολής είναι το Linear, τότε αυτό µπορεί να παραληφθεί, π.χ. η εντολή LinearLogListPlot[a] µπορεί να δοθεί και ως LogListPlot[a]. Άσκηση 9.1 ∆ηµιουργήστε, στο διάστηµα (1, 100), τις γραφικές παραστάσεις των συναρτήσεων α) exp(-2x) β) x4 γ) ln(x4). Επιλέξτε, σε κάθε περίπτωση ξεχωριστά, την κατάλληλη κλίµακα αξόνων έτσι ώστε οι καµπύλες, στην κλίµακα αυτή, να έχουν την εµφάνιση ευθείας γραµµής.

9.2 Αποτύπωση πειραµατικών σφαλµάτων στο γράφηµα Τα πειραµατικά δεδοµένα συνήθως δίνονται µε το σφάλµα που υπεισέρχεται

στη µέτρηση κάθε σηµείου. Π.χ. η θέση y(t) ενός κινητού, τη χρονική στιγµή t, είναι γνωστή µε µια ακρίβεια ∆y(t), που ισοδυναµεί µε τη δήλωση ότι το σφάλµα στη µέτρηση της θέσης y(t), τη χρονική στιγµή t είναι ίσο µε ∆y(t). Στην περίπτωση αυτή µπορούµε να δηλώσουµε κάθε µέτρηση µε µια λίστα τριών αριθµών,

,, iii yyt ∆ , εκ των οποίων ο πρώτος δηλώνει τη χρονική στιγµή που έγινε η

µέτρηση, ο δεύτερος τη τιµή του y που µετρήθηκε, και ο τελευταίος το εκτιµούµενο σφάλµα στη τιµή της µέτρησης. Μια συλλογή (λίστα) τέτοιων µετρήσεων µπορεί να παρασταθεί γραφικά µε τις συντεταγµένες , ii yt να δηλώνουν το σηµείο στο

Page 156: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

156

διάγραµµα, το δε σφάλµα να δηλώνεται στο γράφηµα µε µπάρα εύρους iy∆ γύρο

από το σηµείο που δηλώνει τη µέτρηση. Για την εκτέλεση των γραφηµάτων αυτών χρειάζεται το πακέτο γραφικών

Graphics, το οποίο πρέπει να ενεργοποιηθεί στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση αυτή είναι η ακόλουθη

<<Graphics`Graphics` Μετά την ενεργοποίηση του πακέτου, µπορούµε να δηµιουργήσουµε το πολικό διάγραµµα της συνάρτησης µε την εντολή

ErrorListPlot[ datalist ] µε datalist τη λίστα στην οποία είναι αποθηκευµένα τα σηµεία. Ένα τέτοιο παράδειγµα δίνεται παρακάτω

In[1]:=<< Graphics`Graphics` In[2]:=dat=Table[i/10.,Sin[i/5.],.2,i,1,50]; In[3]:=errorp = ErrorListPlot[dat];

1 2 3 4 5

-1

-0.5

0.5

1

Άσκηση 9.2 Βλήµα βάλλεται προς τα πάνω µε ταχύτητα 100 m/sec2. Η θέση του σώµατος µετράται µε το χρόνο και βρίσκεται ότι το ύψος του µπορεί να περιγραφεί από την

Page 157: Theodorou Math Practikos Odigos

9.3 Ιστογράµµατα

157

εξίσωση 21021100 tt − , το δε σφάλµα στη µέτρηση του αυξάνει µε τη τιµή του

ύψους σύµφωνα µε τη σχέση yy =∆ . ∆ηµιουργήστε µια λίστα µε τα δεδοµένα

,, iii yyt ∆ , µε t να µεταβάλλεται από µηδέν έως 20, µε βήµα 0.5 δευτερόλεπτα.

Αποδώστε γραφικά τα αποτελέσµατα αυτά.

9.3 Ιστογράµµατα Σε µερικά προβλήµατα, οι αριθµητικές τιµές µιας παραµέτρου είναι

διασπαρµένες σε µια περιοχή, και συχνά ενδιαφερόµαστε να ταξινοµήσουµε (οµαδοποιήσουµε) τις παραπάνω τιµές σε ένα µικρό πλήθος οµάδων, έτσι ώστε κάθε µια από τις εµφανιζόµενες τιµές να εντάσσεται σε µία µόνο οµάδα. Το εύρος των τιµών µιας οµάδας επιλέγεται να είναι µικρό σε σχέση µε το συνολικό εύρος, οπότε οι τιµές των παραµέτρων που ανήκουν σε µια οµάδα µπορούν να θεωρηθούν περίπου ίσες και έτσι να «αντιπροσωπευτούν» από την κεντρική τιµή της οµάδας. Η γραφική παράσταση των οµαδοποιηµένων δεδοµένων γίνεται µε το λεγόµενο ιστόγραµµα. Στον οριζόντιο άξονα της γραφικής παράστασης του ιστογράµµατος δηλώνονται τα όρια των οµάδων, και στη συνέχεια κατασκευάζονται διαδοχικά ορθογώνια µε το εµβαδόν τους να είναι ανάλογο µε το πλήθος των στοιχείων της οµάδας. Ο συντελεστής αναλογίας επιλέγεται αυτόµατα από το πρόγραµµα. Όπως θα δούµε παρακάτω, µπορούµε να επιβάλουµε να επιλέγεται ο συντελεστής αναλογίας µε τρόπο ώστε το συνολικό εµβαδόν των ορθογωνίων να γίνεται συγκεκριµένο.

Η Mathematica έχει τη δυνατότητα κατασκευής ιστογραµµάτων. Για την εκτέλεση των γραφηµάτων αυτών χρησιµοποιείται το πακέτο γραφικών Graphics, το οποίο ενεργοποιείται στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση αυτή είναι η ακόλουθη

<<Graphics`Graphics` Μετά την ενεργοποίηση του πακέτου, µπορούµε να δηµιουργήσουµε το ιστόγραµµα δεδοµένων µε την εντολή

Histogram[ datalist ]

Page 158: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

158

µε datalist τη λίστα στην οποία είναι αποθηκευµένα τα δεδοµένα. Ένα τέτοιο παράδειγµα δίνεται παρακάτω

In[1]:=<<Graphics`Graphics` In[2]:= In[20]:=n1=10000 Out[2]=10000 In[3]:=a1=a^(1/4); In[4]:=Histogram[a1];

0.2 0.4 0.6 0.8 1

100

200

300

Στο παραπάνω παράδειγµα δηµιουργούνται 10000 τυχαίοι αριθµοί κατανεµηµένοι µε τυχαίο τρόπο στο διάστηµα (0, 1), κατόπιν παίρνεται η τετάρτη ρίζα τους και τέλος κατασκευάζεται το ιστόγραµµα τους. Το ιστόγραµµα δίνεται στο παραπάνω σχήµα. Το εύρος κάθε περιοχής επιλέγεται αυτόµατα από τη Mathematica, και αλλάζει µε τον αριθµό των σηµείων του δείγµατος. Επιλέγοντας π.χ. 1000 σηµεία, το ιστόγραµµα που δίνεται από τη Mathematica έχει διαφορετικό εύρος για κάθε περιοχή. Επίσης, το συνολικό εµβαδόν στο παραπάνω ιστόγραµµα, που καθορίζει και τη κλίµακα του, έχει καθορισθεί αυτόµατα από το πρόγραµµα. Με τη παρακάτω εντολή επιβάλουµε το συνολικό αυτό εµβαδόν να έχει συγκεκριµένη τιµή, και η τιµή που έχει επιλεγεί είναι η µονάδα,

In[5]:=Histogram[a1, HistogramScale 1];

Page 159: Theodorou Math Practikos Odigos

9.4 Γραφικές παραστάσεις πεπλεγµένων συναρτήσεων

159

0.2 0.4 0.6 0.8 1

1

2

3

Μια άλλη επιλογή που υπάρχει, είναι να δηµιουργήσουµε το ιστόγραµµα σε µια περιοχή τιµών, π.χ. να περιλαµβάνει µόνο τις τιµές στο διάστηµα (0, 0.8), και το συνολικό εµβαδόν του ιστογράµµατος να ισούται µε τη µονάδα,

In[6]:=Histogram[a1, HistogramRange 0.,0 .8, HistogramScale 1];

0.2 0.4 0.6 0.8

1

2

3

4

5

Εκτός από τις παραπάνω επιλογές, υπάρχουν περισσότερες δυνατότητες διαµόρφωσης του ιστογράµµατος, οι οποίες µπορούν να βρεθούν στο Help της Mathematica.

9.4 Γραφικές παραστάσεις πεπλεγµένων συναρτήσεων Αρκετά συχνά, η συνάρτηση που θέλουµε να παραστήσουµε γραφικά δεν

έχει την απλή µορφή y=f[x], αλλά δίνεται σε πεπλεγµένη µορφή ως εξίσωση F[x, y]=0, η οποία γενικώς δεν µπορεί να επιλυθεί ως προς y. H Mathematica έχει τη

Page 160: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

160

δυνατότητα να εκτελέσει γραφικές παραστάσεις τέτοιων πεπλεγµένων συναρτήσεων. Για την εκτέλεση των γραφηµάτων αυτών χρειάζεται το πακέτο ImplicitPlot, το οποίο πρέπει να ενεργοποιηθεί στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση αυτή είναι η ακόλουθη

<<Graphics`ImplicitPlot` Μετά τη ενεργοποίηση του πακέτου αυτού, µπορούµε να χρησιµοποιούµε την εντολή ImplicitPlot για τη δηµιουργία γραφικών µε την εντολή:

ImplicitPlot[ F[x, y]==0, x, xmin, xmax] Παράδειγµα

In[1]:=<<Graphics`ImplicitPlot` In[2]:=ImplicitPlot[x^2+y^2==4, x, -2, 2]

-2 -1 1 2

-2

-1

1

2

Άσκηση 9.3 Να γίνουν οι γραφικές παραστάσεις, για x στη περιοχή του (-4, 4), των παρακάτω πεπλεγµένων συναρτήσεων:

α) 44/ 22 =+ yx , δ) xyyx 433 =+ ,

Page 161: Theodorou Math Practikos Odigos

9.5 Πολικά διαγράµµατα

161

β) 122 =− xy , ε) )4()1( 2222 yyyx −+= .

γ) xyxy =+ 222 )2( , στ) 144 =++ yyxx

9.5 Πολικά διαγράµµατα Η εξίσωση µιας επίπεδης καµπύλης, σε πολικές συντεταγµένες, έχει τη

µορφή r=f(θ), που µας δίνει την απόσταση των σηµείων της καµπύλης από την αρχή των αξόνων ως συνάρτηση της πολικής γωνίας θ. Το πολικό διάγραµµα της καµπύλης αυτής γίνεται µε τη βοήθεια του πακέτου Graphics, το οποίο ενεργοποιείται µε την εντολή

<<Graphics`Graphics` Μετά την ενεργοποίηση του πακέτου, µπορούµε να δηµιουργήσουµε το πολικό διάγραµµα της συνάρτησης µε την εντολή

PolarPlot[ f[θ], θ, θ1, θ2] Επειδή το r είναι θετικός αριθµός, έπεται ότι αρνητικές τιµές του f(θ) δεν είναι αποδεκτές. Εάν όµως η συνάρτηση f(θ) που χρησιµοποιείται στη γραφική παράσταση παίρνει αρνητικές τιµές σε µερικές περιοχές της κυκλικής γωνίας, τότε για τις γωνίες αυτές δεν δηµιουργείται γραφική παράσταση. Για παράδειγµα, σχεδιάζουµε τις γραφικές παραστάσεις των συναρτήσεων )3sin( θ=r και

|)3sin(| θ=r , που γίνονται αντίστοιχα µε τις εντολές:

In[1]:=PolarPlot[Sin[3θ],θ, 0, 2Pi] In[2]:=PolarPlot[Abs[Sin[3θ]],θ, 0, 2Pi]

Page 162: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

162

-0.75 -0.5 -0.25 0.25 0.5 0.75

-1

-0.75

-0.5

-0.25

0.25

0.5

-0.75 -0.5 -0.25 0.25 0.5 0.75

-1

-0.5

0.5

1

Σχήµα 1. Σχήµα 2.

Η γραφική παράσταση που προκύπτει από τη πρώτη εντολή δίνεται στο σχήµα 1, και της δεύτερης στο σχήµα 2. Συγκρίνοντας τα δύο αυτά σχήµατα διαπιστώνουµε

ότι στο πρώτο σχήµα δεν υπάρχει καµπύλη στις περιοχές µε 3

23

πθπ<< ,

34πθπ << , και πθπ 2

35

<< . Αυτό συµβαίνει διότι στις περιοχές αυτές το

sin(3θ) γίνεται αρνητικό. Άσκηση 9.4 Να γίνουν τα παρακάτω πολικά διαγράµµατα οι γραφικές παραστάσεις, για x στη περιοχή του (-4, 4), των παρακάτω πεπλεγµένων συναρτήσεων:

α) )(sin)(cos 44 θθ + , γ) )sin( θ ,

β) )sin( 2θ , δ) )(cos)(sin 24 θθ .

Page 163: Theodorou Math Practikos Odigos

9.6 Γραφική αναπαράσταση διανυσµατικών πεδίων

163

9.6 Γραφική αναπαράσταση διανυσµατικών πεδίων Η γραφική παράσταση δισδιάστατων διανυσµατικών πεδίων γίνεται µε την

αναπαράσταση ανυσµάτων πάνω σ’ ένα δισδιάστατο πλέγµα σηµείων, µε το µήκος τους να δηλώνει την ένταση και η διεύθυνση τους τη διεύθυνση του πεδίου αυτού. Για τις γραφικές αυτές παραστάσεις απαιτείται το πακέτο PoltField, το οποίο ενεργοποιείται µε την εντολή

<<Graphics`PlotField` Αφού ενεργοποιηθεί το πακέτο αυτό, µετά καλείται η εντολή εκτέλεσης της γραφικής παράστασης του διανυσµατικού πεδίου που είναι

PlotVectorField[V1[x, y], V2[x, y], x, xmin, xmax, y, ymin, ymax], Η λίστα V1[x, y], V2[x, y] δίνει τις συνιστώσες του διανυσµατικού αυτού πεδίου. Ένα παράδειγµα αναπαράστασης διανυσµατικού πεδίου είναι το παρακάτω:

In[1]:=PlotVectorField[y,x,x,-1,1,y,-1,1]

Page 164: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

164

9.7 Γραφικές παραστάσεις σε σφαιρικές συντεταγµένες Σε σφαιρικές συντεταγµένες, η εξίσωση µιας επιφάνειας καθορίζεται µε τη

σχέση ),( φθfr = , που δίνει την απόσταση των σηµείων της επιφάνειας από την

αρχή των αξόνων ως συνάρτηση των γωνιών Euler, θ, και φ. Το διάγραµµα της επιφάνειας αυτής γίνεται µε τη βοήθεια του πακέτου ParametricPlot3D, το οποίο ενεργοποιείται µε την εντολή

<<Graphics`ParametricPlot3D` Αφού ενεργοποιηθεί το πακέτο αυτό, µπορούµε να δηµιουργήσουµε τη γραφική παράσταση µιας τρισδιάστατης επιφάνειας µε την εντολή

SphericalPlot3D[ f[θ, φ], θ, θ1, θ2, φ, φ1, φ2] Επειδή το r είναι θετική ποσότητα, το f(θ, φ) της εντολής πρέπει να παίρνει µόνο θετικές τιµές. Εάν όµως το f(θ, φ) που έχει επιλεγεί παίρνει αρνητικές τιµές σε µερικές κατευθύνσεις, τότε στις περιοχές αυτές δεν γίνεται γραφική παράσταση. Παράδειγµα:

In[1]:=SphericalPlot3D[(Sin[θ] Cos[φ])^2, θ, 0, Pi, φ, 0, 2Pi, PlotRange All, Ticks->False, PlotPoints 50]

που είναι το σχήµα της ηλεκτρονικής πυκνότητας φορτίου του τροχιακού px της ατοµικής φυσικής.

Page 165: Theodorou Math Practikos Odigos

9.8 Παραµετρικές καµπύλες και επιφάνειες σε τρεις διαστάσεις

165

Άσκηση 9.5 Χρησιµοποιώντας σφαιρικές συντεταγµένες, να γίνουν τα σχήµατα των επιφανειών που δίνονται από τις εξισώσεις:

α) 22 )1)(cos3(21

2 −= θz

d ,

β) 2))sin()cos()cos()(sin(43

22 φθφθ −=− yx

d ,

γ) 22 ))sin()cos()((sin3 φφθ=xyd ,

τα οποία εκφράζουν την ηλεκτρονική πυκνότητα των αντίστοιχων ατοµικών τροχιακών.

9.8 Παραµετρικές καµπύλες και επιφάνειες σε τρεις διαστάσεις Το διάγραµµα µιας τρισδιάστατης παραµετρικής καµπύλης γίνεται µε τη

βοήθεια του πακέτου ParametricPlot3D, και η γραφική παράσταση της αντίστοιχης καµπύλης γίνεται µε την εντολή

<<Graphics`ParametricPlot3D` ParametricPlot3D[ x[t], y[t], z[t], t, t1, t2]

µε x(t), y(t), z(t) τις συναρτήσεις που δίνουν τις συντεταγµένες των σηµείων και t1, t2 το διάστηµα στο οποίο γίνεται η γραφική παράσταση. Παράδειγµα:

In[1]:=ParametricPlot3D[(2+Sin[2t])Cos[t],(2+Sin[t])Cos[t],Cos[2t], t,0,6Pi, PlotPoints 300]

Page 166: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

166

-2

0

2

-2

0

2

-1-0.5

00.51

-2

0

2 Για τη δηµιουργία παραµετρικής επιφάνειας, η εντολή είναι

ParametricPlot3D[x[t, u], y[t, u], z[t, u], t, t1, t2, u, u1, u2] µε t1, t2, u1, u2 το ορθογώνιο παραλληλόγραµµο που καθορίζει το πεδίο ορισµού της συνάρτησης. Παράδειγµα:

In[2]:=ParametricPlot3D[(5+Cos[u])Cos[t], (5+Cos[u])Sin[t], Sin[u], t, 0, 2Pi, u, 0, 2Pi, PlotRange All, Ticks False]

Page 167: Theodorou Math Practikos Odigos

9.9 Κινούµενα γραφικά

167

9.9 Κινούµενα γραφικά Με τη Mathematica υπάρχει η δυνατότητα δηµιουργίας κινούµενων

γραφικών. Το πρώτο βήµα στη διαδικασία αυτή είναι η δηµιουργία, µε τη βοήθεια µιας επαναληπτικής εντολής, των σχηµάτων στα οποία θέλουµε να προσδώσουµε κίνηση. Π.χ. µε την εντολή

In[1]:=Do[Plot[Sin[x-t], x, 0, 4Pi], t, 0, 2Pi, 2Pi/11] δηµιουργούµε µια σειρά από 11 κυµατικούς παλµούς που περιγράφουν, σε διαδοχικές χρονικές στιγµές, την εικόνα του κύµατος. Αφού δηµιουργήσουµε τους παλµούς αυτούς, µπορούµε µετά να τους προσδώσουµε κίνηση µε το να µαρκάρουµε στη οθόνη την αγκύλη κάτω από την οποία βρίσκονται όλα τα σχήµατα του παλµού αυτού και κατόπιν να καλέσουµε την εντολή Cell Animate Selected Graphics. Μετά από αυτό τα σχήµατα του παραδείγµατος εµφανίζονται στην οθόνη διαδοχικά το ένα µετά το άλλο και δηµιουργούν µια οφθαλµαπάτη κίνησης. Τα χαρακτηριστικά της κίνησης αυτής (ταχύτητα και φορά) µπορούν να τροποποιηθούν από τα εικονίδια (κουµπάκια) που εµφανίζονται στο µενού, στο κάτω µέρος του φύλλου εργασίας. Άσκηση 9.6 ∆ηµιουργήστε, χρησιµοποιώντας την εντολή Do και την εντολή PolarPlot, διαδοχικά σχήµατα µε τη σπείρα του Αρχιµήδη r=θ, µε το θ να µεταβάλλεται από το µηδέν στο φ, και µε επιλογή του φ σύµφωνα µε την εντολή φ, 8π, 16π, π/3. Κατόπιν εµφανίστε τα σχήµατα αυτά ως κινούµενα γραφικά. Άσκηση 9.7 ∆ηµιουργήστε, χρησιµοποιώντας την εντολή Do, διαδοχικές τρισδιάστατες γραφικές παραστάσεις της επιφάνειας cos(x*y), µε το x να µεταβάλλεται στο διάστηµα (0, t/2), και το y στο διάστηµα (0, t), και µε επιλογή του t σύµφωνα µε την εντολή t, 1, 5, 3/5. Κατόπιν εµφανίστε τα σχήµατα αυτά ως κινούµενα γραφικά.

Page 168: Theodorou Math Practikos Odigos

ΓΡΑΦΙΚΑ

168

Page 169: Theodorou Math Practikos Odigos

9.9 Κινούµενα γραφικά

169

ΚΕΦΑΛΑΙΟ 10

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

Η διερεύνηση φαινοµένων µε τη συλλογή αριθµητικών δεδοµένων, είναι µια διαδικασία που χρονολογείται από την εποχή της αρχαιότητας. Όµως, η συστηµατική συλλογή και επεξεργασία δεδοµένων άρχισε να εφαρµόζεται από την εποχή της αναγέννησης, για θέµατα σχετικά µε τον πληθυσµό και την οικονοµία της χώρας. Στο παρόν κεφάλαιο θα παρουσιάσουµε µεθόδους για την περιγραφή και την ανάλυση τέτοιων δεδοµένων. Η απλούστερη µέθοδος που χρησιµοποιείται για ανάλυση στατιστικών δεδοµένων είναι η µέθοδος της περιγραφικής στατιστικής. Η µέθοδος αυτή θα παρουσιαστεί στη παράγραφο 10.2. Σε πολλές όµως περιπτώσεις θέλουµε να αναλύσουµε σηµειακά δεδοµένα, που προέρχονται είτε από πειραµατικές µετρήσεις είτε από αριθµητικούς υπολογισµούς, και να προσδιορίσουµε µια συνάρτηση που να τα περιγράφει. Η διαδικασία αυτή γίνεται είτε µε τη µέθοδο της προσαρµογής (fitting), είτε µε τη µέθοδο της παρεµβολής (interpolation). Η µέθοδος της προσαρµογής χρησιµοποιείται κυρίως για πειραµατικά αποτελέσµατα και παρουσιάζεται στη παράγραφο 10.3, ενώ της παρεµβολής για αποτελέσµατα αριθµητικών υπολογισµών και παρουσιάζεται στη παράγραφο 10.4. Τέλος, µια άλλη τεχνική διαχείρισης αριθµητικών δεδοµένων που περιγράφουν φαινόµενα που εξαρτώνται από το χρόνο, µε σηµαντικές τεχνολογικές εφαρµογές, βασίζεται στην ανάλυση Fourier, και αποβλέπει στον προσδιορισµό των αρµονικών που περιέχονται στα δεδοµένα αυτά. Η µέθοδος Fourier θα παρουσιαστεί στη παράγραφο 10.5.

Η Mathematica έχει τη δυνατότητα εκτέλεσης όλων των παραπάνω υπολογισµών, τους οποίους θα περιγράψουµε παρακάτω. Η ανάλυση που θα

Page 170: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

170

παρουσιάσουµε αναφέρεται µόνο σε περιπτώσεις όπου τα δεδοµένα περιγράφονται µε συναρτήσεις µιας µεταβλητής. Προτού όµως προχωρήσουµε στη παρουσίαση των µεθοδολογιών αυτών, θα δώσουµε µερικές εντολές που χρησιµοποιούνται για τη διαχείριση δεδοµένων που είναι αποθηκευµένα σε πίνακα.

10.1 ∆ιαχείριση δεδοµένων Στη παράγραφο 8.5 έχουµε ήδη παρουσιάσει µερικές εντολές διαχείρισης

πίνακα. Στη παρούσα παράγραφο θα παρουσιάσουµε ένα άλλο σύνολο από παρόµοιες εντολές, για τη διαχείριση δεδοµένων που είναι αποθηκευµένα σε λίστα. Οι εντολές που θα παρουσιάσουµε βρίσκονται συγκεντρωµένες στο πακέτο DataManipulation. Το σύνολο των εντολών που περιέχονται στο πακέτο αυτό παρουσιάζονται στο Help της Mathematica. Στη παρούσα παράγραφο θα παρουσιάσουµε ένα µικρό υποσύνολο από τις εντολές αυτές.

Για την εκτέλεση των παραπάνω εντολών χρειάζεται πρώτα να ενεργοποιηθεί το αντίστοιχο πακέτο της Mathematica, στην αρχή της διαδικασίας. Η εντολή για τη ενεργοποίηση του πακέτου είναι η ακόλουθη

<< Statistics`DataManipulation` In[1]:=<< Statistics`DataManipulation`

Παραδείγµατα δράσης των εντολών θα δοθούν µε τη χρήση των πινάκων b1 και b2 που ορίζονται παρακάτω. Για λόγους εποπτικής παρουσίασης των αποτελεσµάτων χρησιµοποιείται η εντολή MatrixForm, που εµφανίζει τα αποτελέσµατα υπό µορφή αλγεβρικού πίνακα.

In[2]:=b1=5,9,6,9,3,6,0,2,8,0,4,1,1,5,7,4; b1//MatrixForm Out[2]= i

k

jjjjjjjjj

5 9 6 93 6 0 28 0 4 11 5 7 4

y

zzzzzzzzz

In[3]:=b2=9,7,7,7,7,2,3,3,1,6,9,6,4,3,2,9; b2//MatrixForm

Page 171: Theodorou Math Practikos Odigos

10.1 ∆ιαχείριση δεδοµένων

171

Out[3]= i

k

jjjjjjjjj

9 7 7 77 2 3 31 6 9 64 3 2 9

y

zzzzzzzzz

Με τη χρήση των εντολών του πακέτου DataManipulation µπορούµε να

εκτελέσουµε τις παρακάτω διαδικασίες: Column, επιστέφει τη στήλη ενός πίνακα που δηλώνεται στην εντολή,

In[4]:= Column[b1, 2]//MatrixForm Out[4]= i

k

jjjjjjjjj

9605

y

zzzzzzzzz

ή τις στήλες που δηλώνονται στην εντολή,

In[5]:= Column[b1, 1,3]//MatrixForm Out[5]= i

k

jjjjjjjjj

5 63 08 41 7

y

zzzzzzzzz

ColumnTake, επιστρέφει ένα υποσύνολο από τις στήλες ενός πίνακα, από αυτή που καθορίζεται από τον πρώτο έως αυτή που καθορίζεται από τον τελευταίο αριθµό που δηλώνεται στην εντολή,

In[6]:= ColumnTake[b1,1, 3]//MatrixForm Out[6]= i

k

jjjjjjjjj

5 9 63 6 08 0 41 5 7

y

zzzzzzzzz

Page 172: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

172

ColumnDrop, απορρίπτει ένα υποσύνολο από στήλες του πίνακα, από αυτή που καθορίζεται από τον πρώτο έως αυτή που καθορίζεται από τον τελευταίο αριθµό που δηλώνεται στην εντολή,

In[7]:= ColumnDrop[b1, 1,3]//MatrixForm Out[7]= i

k

jjjjjjjjj

9214

y

zzzzzzzzz

ColumnJoin, για να συνενώσουµε τις στήλες δύο πινάκων (οι στήλες του δεύτερου πίνακα συνενώνονται µε αυτές του πρώτου),

In[8]:= ColumnJoin[b1, b2]//MatrixForm Out[8]= i

k

jjjjjjjjjjjjjjjjjjjjjjjjj

5 9 6 93 6 0 28 0 4 11 5 7 49 7 7 77 2 3 31 6 9 64 3 2 9

y

zzzzzzzzzzzzzzzzzzzzzzzzz

Τέλος θα αναφέρουµε την εντολή BinCounts η οποία προσδιορίζει των αριθµό των στοιχείων µιας µονοδιάστατης λίστας που βρίσκονται σε διαδοχικές περιοχές δοσµένου εύρους dx, σε µια περιοχή τιµών xmin, xmax. Η εντολή έχει τη µορφή

BinCounts[list, xmin, xmax, dx].

In[9]:=b3=Table[2Random[], 100]; In[10]:=BinCounts[b3, 0, 2, 0.5] Out[10]=20, 28, 20, 32

Page 173: Theodorou Math Practikos Odigos

10.2 Στατιστική περιγραφή δεδοµένων

173

10.2 Στατιστική περιγραφή δεδοµένων Στη σηµερινή εποχή γίνεται συστηµατική διερεύνηση πολλών στοιχείων της

χώρας µε την απογραφή και στη συνέχεια συστηµατική στατιστική ανάλυση των δεδοµένων ανά δεκαετία. Επίσης, η διεξαγωγή ερευνών για τη συµπεριφορά ανθρώπινων πληθυσµών (συχνά αναφερόµενες και ως δηµοσκοπήσεις) αποτελεί πλέον ένα συνηθισµένο εργαλείο των κοινωνικών επιστηµών. Τα δεδοµένα που συλλέγονται µε τους παραπάνω τρόπους αναλύονται µε στατιστικές µεθόδους για την εξαγωγή χρήσιµων συµπερασµάτων. Ο πιο απλός τρόπος επεξεργασίας των δεδοµένων αυτών γίνεται µε τη περιγραφική στατιστική. Στοιχεία της µεθόδου αυτής περιλαµβάνονται πλέον και στην ύλη των µαθηµατικών του Λυκείου.

Στο παρόν κεφάλαιο θα χρησιµοποιήσουµε τη Mathematica για να παρουσιάσουµε µερικά αποτελέσµατα της περιγραφικής στατιστικής. Τα στατιστικά δεδοµένα που θα αναλύσουµε παρακάτω δεν προέρχονται από κάποια πραγµατική έρευνα, αλλά έχουν δηµιουργηθεί µε τη χρήση της συνάρτησης Random[], που παράγει τυχαίους αριθµούς στο διάστηµα [0,1], µε την ακόλουθη εντολή

In[1]:=expdat=Table[1+Random[],100]; ∆εχόµαστε δηλαδή ότι τα δεδοµένα αυτά, που είναι αποθηκευµένα στη µονοδιάστατη λίστα expdat, αντιπροσωπεύουν το αποτέλεσµα 100 διαφορετικών µετρήσεων της ίδιας ποσότητας για ένα σύστηµα. Γραφική παράσταση της κατανοµής των δεδοµένων αυτών γίνεται µε την εντολή:

In[2]:=ListPlot[expdat, PlotRange 0, 2]

Page 174: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

174

20 40 60 80 100

0.25

0.5

0.75

1

1.25

1.5

1.75

2

Όπως συνάγεται από το παραπάνω σχήµα, τα αποτελέσµατα των «µετρήσεων» είναι διασπαρµένα µεταξύ της µονάδας και του δύο. Για τη συνοπτική περιγραφή των µετρήσεων αυτών µπορούµε να χρησιµοποιούµε παραµέτρους που προκύπτουν από τη στατιστική τους επεξεργασία. Οι παράµετροι αυτές έχουν να κάνουν (α) µε τη θέση του «κέντρου» των µετρήσεων στον κατακόρυφο άξονα, και (β) το µέγεθος της διασποράς τους γύρο από το «κέντρο» Η πρώτη ποσότητα αναφέρεται ως µέση τιµή, και η δεύτερη ως διακύµανση. Μια παράγωγος ποσότητα της διακύµανσης είναι η τυπική απόκλιση, που ισούται µε τη τετραγωνική ρίζα της διακύµανσης. Παρακάτω δίνουµε τον µαθηµατικό ορισµό για καθεµιά απ’ αυτές, και κατόπιν υπολογίζουµε τη τιµή της για τα δεδοµένα του προβλήµατος, που είναι αποθηκευµένα στη µια µονοδιάστατη λίστα µε το όνοµα expdat.

Το πακέτο της Mathematica που απαιτείται για να γίνουν οι υπολογισµοί των παραπάνω στατιστικών παραµέτρων δεν ενεργοποιείται αυτόµατα µε την εκκίνηση του προγράµµατος και για να χρησιµοποιηθεί πρέπει πρώτα να ενεργοποιηθεί. Αυτό γίνεται µε την εντολή

In[3]:=<<Statistics`DescriptiveStatistics` Μετά την ενεργοποίηση του πακέτου αυτού, µπορούµε να προχωρήσουµε στον υπολογισµό των στατιστικών παραµέτρων.

10.2.1 Μέση τιµή

Η µέση τιµή για n δεδοµένα δίνεται από τη σχέση

Page 175: Theodorou Math Practikos Odigos

10.2 Στατιστική περιγραφή δεδοµένων

175

∑= ixn

x 1

και εκφράζει τη τιµή γύρο από την οποία είναι διασπαρµένα τα δεδοµένα αυτά. Η µέση αυτή τιµή των δεδοµένων που είναι αποθηκευµένα σε µια µονοδιάστατη λίστα µε όνοµα data υπολογίζεται µε την εντολή

Mean[data] Για τα δεδοµένα του πίνακα expdat, η µέση τιµή υπολογίζεται ίση µε

In[4]:=Mean[expdat] Out[4]= 1.50919

10.2.2 ∆ιακύµανση

Η διακύµανση ή διασπορά (variance) εκφράζει ένα µέτρο της κατανοµής των σηµείων γύρο από τη µέση τους τιµή. Η αµερόληπτη τιµή της διακύµανσης δίνεται από τη σχέση

∑ −−

= 22 )(1

1 xxn

s i

Σηµειώστε ότι πολλές φορές για τον υπολογισµό της ποσότητας αυτής

χρησιµοποιείται η σχέση ∑ −= 22 )(1 xxn

s i , η οποία για µεγάλες τιµές του n δίνει

τα ίδια αριθµητικά αποτελέσµατα µε τη προηγούµενη, όµως για µικρές τιµές του n δίνει διαφορετικά αποτελέσµατα τα οποία δεν είναι ακριβή.

Με τη χρήση της Mathematica η ποσότητα αυτή υπολογίζεται µε την εντολή Variance[data]

Για τα δεδοµένα του πίνακα expdat, η τιµή της διακύµανσης υπολογίζεται ίση µε

In[5]:=Variance[expdat] Out[5]= 0.0831552

10.2.3 Τυπική απόκλιση

Μια παράγωγος ποσότητα της διακύµανσης είναι η τυπική απόκλιση (standard deviation), η οποία ισούται µε τη τετραγωνική ρίζα της διακύµανσης,

Page 176: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

176

∑ −−

== 22 )(1

1 xxn

ss i ,

και δίνει το εύρος της περιοχής µέσα στην οποία βρίσκονται διασπαρµένα τα περισσότερα . Με τη χρήση της Mathematica η ποσότητα αυτή υπολογίζεται µε την εντολή

StandardDeviation[data] Για τα δεδοµένα του πίνακα expdat, η τιµή της τυπικής απόκλισης υπολογίζεται ίση µε

In[6]:=StandardDeviation[expdat] Out[6]= 0.288366

Άσκηση 10.1 Αναλύσαµε παραπάνω τη περίπτωση 100 στατιστικών δεδοµένων που δηµιουργήθηκαν µε την εντολή Random[]. Επαναλάβετε την ανάλυση αυτή για µια σειρά δεδοµένων µε αριθµό σηµείων ίσο µε 100, 1000 και 10000. Υπολογίστε, και κάντε γραφική παράσταση, τις στατιστικές παραµέτρους, δηλαδή τη µέση τιµή και τη τυπική απόκλιση και διερευνείστε την εξάρτηση τους από το µέγεθος του δείγµατος. Προσπαθήστε να µαντέψτε το νόµο που διέπει τη µεταβολή αυτή. Άσκηση 10.2 ∆ηµιουργείστε τους πίνακες δεδοµένων: dat1=TableRandom[], 100] και dat1=TableRandom[], 100], και κατόπιν συνενώστε τους µε την εντολή dattotal=Join[dat1, dat2]. Υπολογίστε τη µέση τιµή και τη τυπική απόκλιση για κάθε ένα από τους παραπάνω πίνακες δεδοµένων και σχολιάστε τα αποτελέσµατα σας.

10.3 Προσαρµογή δεδοµένων (Fitting) Η µέθοδος της προσαρµογής χρησιµοποιείται εκτενώς για την ανάλυση

πειραµατικών αποτελεσµάτων. Η γενική συµπεριφορά των δεδοµένων αυτών

Page 177: Theodorou Math Practikos Odigos

10.3 Προσαρµογή δεδοµένων (Fitting)

177

αποδίδει το νόµο που διέπει το φαινόµενο, αλλά στις τιµές τους περιλαµβάνονται και διακυµάνσεις, δηλαδή σφάλµατα, που προέρχονται από τη διαδικασία της µέτρησης. Στόχος της ανάλυσης είναι αφενός να αναδειχθεί ο νόµος που διέπει το φαινόµενο και αφετέρου να προσδιοριστούν τα σφάλµατα που πηγάζουν από τη διαδικασία της µέτρησης. Ο παραπάνω στόχος επιτυγχάνεται µε τη προσαρµογή των δεδοµένων από µια συνάρτηση που προσδιορίζεται από την ελαχιστοποίηση της απόκλισης µεταξύ θεωρίας και πειράµατος. Η συνάρτηση που προσδιορίζεται µε αυτό το τρόπο αποδίδει το φυσικό νόµο, ενώ οι αποκλίσεις της από τα πειραµατικά δεδοµένα αποδίδουν τα σφάλµατα στις µετρήσεις.

Μια τέτοια συνάρτηση µπορεί να προκύψει από το γραµµικό συνδυασµό γνωστών συναρτήσεων, π.χ. των ))(..),(),(( 21 xfxfxf n , και η διαδικασία

ελαχιστοποίησης στηρίζεται στη µέθοδο των ελαχίστων τετραγώνων. Σύµφωνα µε τη µέθοδο αυτή, η προσαρµογή των δεδοµένων )),(...,),,(),,(( 2211 NN yxyxyx µε

τη σύνθετη συνάρτηση, )(...)()(),...,,( 22111 xfcxfcxfcxccF nnn +++= ,

γίνεται µε το προσδιορισµό των τιµών των παραµέτρων c1, c2, …, cn που

ελαχιστοποιούν τη ποσότητα ( )∑ =−

N

i iin yxccF1

21 ),...,,( . Οι συνθήκες

ελαχιστοποίησης είναι οι ακόλουθες:

( )⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

==−∂∂ ∑ =

njyxccFc

N

i iinj

...,,2,1,0),...,,(1

21 ,

από τις οποίες προκύπτει το γραµµικό σύστηµα:

( )⎭⎬⎫

⎩⎨⎧

==+++ ∑∑=

=njxfyxfxfcxfcxfc

N

iiji

N

i ijinnii ...,,2,1,)()()(...)()(1

1 2211 .

Το γραµµικό αυτό σύστηµα επιλύεται ως προς jc και από τη λύση του

προσδιορίζονται οι αριθµητικές τιµές των παραµέτρων αυτών, 0jj cc = . Η

συνάρτηση ),...,,,( 002

01 xcccF n που έτσι προκύπτει µας δίνει το νόµο που διέπει το

φαινόµενο. Η εντολή της Mathematica για το προσδιορισµό της συνάρτησης

προσαρµογής των δεδοµένων που είναι αποθηκευµένα σε µια λίστα είναι η ακόλουθη

Page 178: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

178

name=Fit[data, ][...],[],[ 21 xfxfxf n , x]

όπου data είναι η δισδιάστατη λίστα µε τα δεδοµένα, ][...],[],[ 21 xfxfxf n οι

συναρτήσεις που χρησιµοποιούνται στο γραµµικό συνδυασµό, οι οποίες επιλέγονται από το χρήστη, x το όνοµα της µεταβλητής, και name το όνοµα της παραµέτρου στην οποία αποθηκεύεται η συνάρτηση προσαρµογής, η οποία, όπως είπαµε παραπάνω, προκύπτει µε το προσδιορισµό των τιµών των παραµέτρων )...,,( 1 ncc .

Εάν η λίστα data είναι µονοδιάστατη, τότε τα δεδοµένα αυτά θεωρούνται ως τεταγµένες, και το πρόγραµµα αποδίδει στην τεταγµένη iy , που βρίσκεται στη θέση

i, το ζευγάρι των τιµών ),( iyi .

Παράδειγµα: Έστω τα δεδοµένα που δηµιουργούνται µε τη παρακάτω εντολή

In[1]:=data=Table[x, Cos[x]+x+1.5Random[], x, 0, 4Pi, Pi/8]//N; των οποίων η γραφική παράσταση δίνεται παρακάτω

In[2]:=g1=ListPlot[data, PlotStyle->PointSize[0.02]]

2 4 6 8 10 12

2

4

6

8

10

12

14

Η προσαρµογή των δεδοµένων αυτών µε το γραµµικό συνδυασµό των συναρτήσεων 1, x, Cos[x] γίνεται µε την εντολή

Page 179: Theodorou Math Practikos Odigos

10.3 Προσαρµογή δεδοµένων (Fitting)

179

In[3]:=param=Fit[data, 1, x, Cos[x], x] Out[3]=0.911801+0.989735 x+0.738884 Cos[x]

Το αποτέλεσµα της προσαρµογής αυτής παριστάνεται γραφικά µε την εντολή In[4]:=g2=Plot[param, x, 0, 4Pi]

2 4 6 8 10 12

2

4

6

8

10

12

14

Η σύγκριση των αρχικών δεδοµένων µε τη συνάρτηση προσαρµογής γίνεται µε τη παράθεση στο ίδιο σχήµα της καµπύλη προσαρµογής µε τα δεδοµένα αυτά, που πραγµατοποιείται µε την εντολή

In[5]:=Show[g1, g2]

Από τη σύγκριση αυτή συνάγεται ότι η καµπύλη προσαρµογής δεν περνά ακριβώς πάνω από τα αρχικά δεδοµένα, και οι αποκλίσεις µεταξύ των τιµών της συνάρτησης και των δεδοµένων αντιπροσωπεύουν τα σφάλµατα στις µετρήσεις.

Page 180: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

180

2 4 6 8 10 12

2

4

6

8

10

12

14

Η ποσότητα param, που ορίστηκε στην εντολή In[3], έχει ιδιότητες παραµέτρου και όχι συνάρτησης. Οπότε, ο υπολογισµός της για συγκεκριµένη τιµή της µεταβλητής x, π.χ. για x=x0, γίνεται µε την εντολή συντακτικής αντικατάστασης,

param/.x->x0 In[6]:=param/.x->2. Out[6]=2.58379

Μπορούµε όµως να αποδώσουµε το αποτέλεσµα της προσαρµογής σε µια συνάρτηση µε τον ακόλουθο τρόπο:

fitfun[x_]=Fit[data, f1[x], f2[x], … fn[x], x] Στη περίπτωση αυτή η συνάρτηση fitfun[x] µπορεί να χρησιµοποιηθεί για εκτέλεση µετέπειτα πράξεων, π.χ.

In[7]:=fitfun[x_]=Fit[data, 1, x, Cos[x], x] Out[7]=0.911801+0.989735 x+0.738884 Cos[x] In[8]:=fitfun[2.] Out[8]=2.58379 In[9]:=g4=Plot[fitfun[x],x,0, 4Pi]

Page 181: Theodorou Math Practikos Odigos

10.3 Προσαρµογή δεδοµένων (Fitting)

181

2 4 6 8 10 12

2

4

6

8

10

12

14

In[10]:=NIntegrate[fitfun[x], x, 0, 2Pi] Out[10]=25.2656

Άσκηση 10.3 ∆ηµιουργείστε πίνακα δεδοµένων µε τις τιµές της συνάρτησης Cosh[x] για x από µηδέν µέχρι 1.5, και µε βήµα 0.05. Κάντε προσαρµογή των δεδοµένων αυτών µε πολυώνυµο ν-οστού βαθµού, επιλέγοντας το ν ίσο µε 5, 7, και 9. Συγκρίνατε, κάνοντας γραφική παράσταση, την αρχική συνάρτηση µε αυτή που προήλθε από τη προσαρµογή. Αναπτύξτε σε σειρά τις παραπάνω συναρτήσεις, µέχρι όρους ν-οστού βαθµού, και συγκρίνατε τους συντελεστές του αναπτύγµατος που προέρχονται από την αρχική συνάρτηση µε αυτούς που παίρνεται µε τη µέθοδο της προσαρµογής. Επαναλάβατε την ίδια διαδικασία, και για το ίδιο διάστηµα τιµών του x, και για τη συνάρτηση Erf[x]. Άσκηση 10.4 Σε πολλές περιπτώσεις τα πειραµατικά αποτελέσµατα εµφανίζουν κορυφές. Μια τυπική πειραµατική συµπεριφορά γύρο από µια κορυφή περιγράφεται συνήθως από

µια συνάρτηση της µορφής 22)()(

dcxbaxf

+−+= . Τα πειραµατικά όµως

αποτελέσµατα εµφανίζουν µια διασπορά γύρο από αυτή τη µέση συµπεριφορά.

Page 182: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

182

Θεωρείστε ότι τα πειραµατικά δεδοµένα ενός τέτοιου πειράµατος µπορούν να προσοµοιωθούν µε την συνάρτηση

[]1.01)4(

12)( 2 Randomx

xf ++−

+= .

Χρησιµοποιώντας τη συνάρτηση αυτή προσοµοίωσης, δηµιουργείστε ένα σύνολο πειραµατικών δεδοµένων αυτού του υποθετικού πειράµατος, για x στη περιοχή (-8, 18), και µε βήµα 0.1. Κάντε τώρα προσαρµογή των πειραµατικών δεδοµένων που δηµιουργήσατε, χρησιµοποιώντας τις συναρτήσεις

α) 1)4(

)(1 2 +−+=

xbaxf β) ))4(exp(*)(2 2−−+= xbaxf .

Ποιες είναι οι τιµές των παραµέτρων που προκύπτουν; Συγκρίνετε τα πειραµατικά δεδοµένα µε τις συναρτήσεις που προέκυψαν από τη προσαρµογή, και σχολιάστε τα αποτελέσµατα σας. Εντοπίστε τη θέση της κορυφής µελετώντας τις συναρτήσεις προσαρµογή των δεδοµένων. Κάντε το ίδιο και για τη καµπυλότητα της µεταβολής.

10.4 Παρεµβολή (Interpolation) Εκτός από τη προσαρµογή, ένας άλλος τρόπος περιγραφής δεδοµένων είναι

µε τη µέθοδο της παρεµβολής, ο οποίος χρησιµοποιείται σε εκείνες τις περιπτώσεις όπου τα σφάλµατα στο προσδιορισµό της ποσότητας είναι αµελητέα και µπορούν να αγνοηθούν. Στη περίπτωση αυτή θέλουµε να περιγράψουµε τα αποτελέσµατα µε τέτοιο τρόπο ώστε η συνάρτηση που θα προκύψει να αναπαράγει πλήρως τα δεδοµένα, δηλαδή για τις τιµές του ορίσµατος για τις οποίες υπάρχουν δεδοµένα, η συνάρτηση να δίνει τις ίδιες ακριβώς τιµές µε τα δεδοµένα αυτά. Η µέθοδος της παρεµβολής χρησιµοποιείται για να αποδώσει π.χ. την αριθµητική λύση µιας διαφορικής εξίσωσης, όπως θα δούµε στο κεφάλαιο 11.

Η απλούστερη συνάρτηση παρεµβολής που περνά πάνω από n+1 σηµεία,

( , ii yx , i=1,…n+1), είναι ένα πολυώνυµο n-οστού βαθµού, ∑=n

kk xaxf

0)( . Οι

n+1 συντελεστές ...,,1,0, nkak = του πολυωνύµου αυτού προσδιορίζονται από

την απαίτηση η παραπάνω συνάρτηση να περνά πάνω από τα n+1 σηµεία,

Page 183: Theodorou Math Practikos Odigos

10.4 Παρεµβολή (Interpolation)

183

( )( ii xfy = , i=1,…n+1), το δε σύστηµα που προκύπτει, σε µορφή πίνακα, είναι το

ακόλουθο

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

+

++ 1

2

1

0

1

11

22

11

.

...

1.........

1...

1...

n

n

n

nnn

n

n

y

yy

a

aa

xx

xx

xx

.

Η λύση του γραµµικού αυτού συστήµατος δίνει τις τιµές των συντελεστών ia .

Συγκεκριµένες εκφράσεις πολυωνύµων παρεµβολής, π.χ. πολυώνυµα παρεµβολής Newton και Lagrange, µε συγκεκριµένες εκφράσεις για τους συντελεστές του πολυωνύµου, δίνονται σε βιβλία αριθµητικής ανάλυσης.

Στην Mathematica, τα δεδοµένα χωρίζονται σε διαδοχικές οµάδες µε ίσο αριθµό σηµείων, και σε κάθε µια από τις οποίες γίνεται παρεµβολή µε πολυώνυµο του ίδιου βαθµού. Η αρχική επιλογή της Mathematica είναι ο χωρισµός σε οµάδες των τεσσάρων σηµείων, στα οποία γίνεται παρεµβολή µε πολυώνυµα τρίτου βαθµού. Η εντολή δηµιουργίας της συνάρτησης παρεµβολής είναι η ακόλουθη

name=Interpolation[data] όπου το name είναι το όνοµα της συνάρτησης που επιλέξαµε για τη περιγραφή των δεδοµένων. Ο βαθµός του πολυωνύµου προσαρµογής µπορεί να αλλάξει µε την εντολή

name=Interpolation[data, InterpolationOrder->value] Η ποσότητα name έχει ιδιότητες συνάρτησης και µπορεί να χρησιµοποιηθεί για την εκτέλεση υπολογισµών.

Page 184: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

184

Παράδειγµα: Για τα δεδοµένα data, της προηγουµένης παραγράφου, µπορούµε να κάνουµε τη παρακάτω παρεµβολή:

In[1]:=b=Interpolation[data] Out[1]=InterpolatingFunction[0.,12.5664,<>]

Μερικά παραδείγµατα χρήσης της συνάρτησης παρεµβολής δίνονται παρακάτω, In[2]:=b[2.] Out[2]=2.75707 In[3]:=g3=Plot[b[x], x, 0, 4Pi]

2 4 6 8 10 12

2

4

6

8

10

12

14

In[4]:=Show[g1, g3]

Page 185: Theodorou Math Practikos Odigos

10.4 Παρεµβολή (Interpolation)

185

2 4 6 8 10 12

2

4

6

8

10

12

14

In[5]:=NIntegrate[b[x], x, 0, 2Pi] Out[5]=24.8883

Άσκηση 10.5 ∆ηµιουργείστε πίνακα δεδοµένων µε τις τιµές της συνάρτησης sin(x), για x στο διάστηµα (0, 2π), και βήµα ίσο µε 0.1. ∆ηµιουργείστε µια συνάρτηση παρεµβολής των δεδοµένων αυτών. Σχεδιάστε τη γραφική παράσταση τόσο της αρχικής συνάρτησης όσο και της συνάρτησης παρεµβολής. Κάντε το ίδιο για παραγώγους των συναρτήσεων αυτών. Αυξήστε τη παράγωγο ώστε να υπερβείτε τη τάξη της παρεµβολής. ∆ικαιολογείστε τη συµπεριφορά που παρατηρείται. Άσκηση 10.6 ∆ηµιουργείστε πίνακα µε τις τιµές της συνάρτησης cosh(x) µε x από µηδέν µέχρι 1.5, και µε βήµα 0.05. ∆ηµιουργείστε µια συνάρτηση παρεµβολής που να περιγράφει τα παραπάνω δεδοµένα. Συγκρίνατε, κάνοντας γραφική παράσταση, την αρχική συνάρτηση µε αυτή της παρεµβολής. Αναπτύξτε σε σειρά τις παραπάνω συναρτήσεις, µέχρι όρους 10-τού βαθµού, και συγκρίνατε τους συντελεστές του αναπτύγµατος που προέρχονται από την αρχική συνάρτηση µε αυτούς που παίρνετε µε τη µέθοδο της παρεµβολής. Τι θα συµβεί όταν αλλάξτε το βαθµό της συνάρτησης παρεµβολής από τρία σε έξι; Επαναλάβατε την ίδια διαδικασία, και για το ίδιο διάστηµα τιµών του x, και για τη συνάρτηση Erf[x].

Page 186: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

186

10.5 ∆ιακριτός µετασχηµατισµός Fourier Η τελευταία µέθοδος διαχείρισης αριθµητικών δεδοµένων που θα

παρουσιάσουµε, µε σηµαντικές τεχνολογικές εφαρµογές, βασίζεται στη τεχνική της ανάλυσης κατά Fourier, και αποβλέπει στον προσδιορισµό των αρµονικών που περιέχονται σ’ αυτό. Γνωρίζουµε από τα µαθηµατικά ότι µια περιοδική συνάρτηση µε περίοδο T, δηλαδή µια συνάρτηση )(tf που ικανοποιεί, για κάθε t, τη σχέση

)()( Ttftf += , µπορεί να αναλυθεί σε σειρά Fourier ως εξής,

∑+∞

∞−

⋅= ))/2(exp()( tnTiatf n π , µε ,...2,1,0 ±±=n

τα δε πλάτη των αρµονικών, na , δίνονται από τη σχέση:

∫ −=T

n dttftnTiT

a0

)())/2(exp(1 π .

Για τον προσεγγιστικό, αριθµητικό, υπολογισµό του παραπάνω ολοκληρώµατος µπορούµε να χρησιµοποιήσουµε τον κανόνα των ορθογωνίων, διαµερίζοντας το διάστηµα ολοκλήρωσης σε Ν ίσα µέρη, εύρους NTh /= . Με τη χρήση ανηγµένων συντεταγµένων, µε το χρόνο να µετράται σε µονάδες h και τη συχνότητα σε µονάδες 1/h, η αριθµητική τιµή του ολοκληρώµατος δίνεται από τη σχέση, (βλέπε άσκηση 5.8, άθροισµα S2):

∑ −=N

knn fkiNa1

)exp()/1( ω ,

µε Nnn /2πω = , )( kk tff = , και khtk = . Η παραπάνω έκφραση για τα πλάτη

συνεπάγεται τη σχέση περιοδικότητας nNn aa =+ , µε τα πλάτη των υψηλότερων

αρµονικών να ανάγονται σε αυτά των Ν πρώτων. ∆ηλαδή ισαπέχουσες διακριτές αριθµητικές τιµές της συνάρτησης συνεπάγονται περιοδικότητα στο φάσµα, µε το πλήθος των αρµονικών που υπάρχουν σε µία περίοδο ίσο µε το πλήθος των διακριτών τιµών της συνάρτησης που χρησιµοποιούνται. Στις παραπάνω ανηγµένες συντεταγµένες, το εύρος της περιόδου του φάσµατος ισούται µε πωω 2==∆ N , η

δε διαµέριση στον ευθύ χώρο ισούται µε 1=∆t , οπότε προκύπτει η σχέση πω 2=∆×∆ t .

Page 187: Theodorou Math Practikos Odigos

10.5 ∆ιακριτός µετασχηµατισµός Fourier

187

Ο παράγοντας 1/Ν που υπεισέρχεται στον υπολογισµό του πλάτους της αρµονικής µπορεί να διαµοιραστεί µεταξύ του ευθύ και του αντίστροφου µετασχηµατισµού. Με ίση διαµοίραση στους όρους αυτούς, ο διακριτός µετασχηµατισµός Fourier γράφεται ως εξής:

∑=N

nk NnkiaN

f1

)/2exp(1 π , µε ∑ −=N

kn fNnkiN

a1

)/2exp(1 π

Η παραπάνω σύµβαση είναι η προκαθορισµένη επιλογή της Mathematica. Για αλλαγή της σύµβασης αυτής βλέπε το Help.

Στη Mathematica, οι τιµές της συνάρτησης kf δίδονται µε τη µορφή

µονοδιάστατης λίστας, f=f1, f2, f3, ..., fΝ.

Τα δε πλάτη των Ν πρώτων αρµονικών αποδίδονται επίσης µε τη µορφή µονοδιάστατης λίστας, a=a1, a2, a3, ..., aN, µε την εντολή:

a=Fourier[f] Το ν-οστό στοιχείο της λίστας a δίνει το πλάτος της αρµονικής µε συχνότητα

νπων )/2( N= .

Έχοντας υπολογίσει τα πλάτη των αρµονικών, µπορούµε να ακολουθήσουµε την αντίστροφη διαδικασία, και να υπολογίσουµε τις τιµές της αρχικής συνάρτησης, χρησιµοποιώντας τον αντίστροφο µετασχηµατισµό Fourier

ff=InverseFourier[a]

Παράδειγµα In[1]:=f= 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 Out[1]=0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 In[2]:=a=Fourier[f] Out[2]=1.73925+0. I, -0.158114-0.486624 I, -0.158114-0.217625 I, -0.158114 - 0.114876 I, -0.158114-0.0513743 I, -0.158114+0. I, -0.158114 +0.0513743 I, -0.158114+0.114876 I, -0.158114+0.217625 I, -0.158114+0.486624 I

Page 188: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

188

Ακολουθώντας την αντίστροφη διαδικασία,

In[3]:=ff=InverseFourier[a] Out[3]=0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.

παίρνουµε την αρχική λίστα. Άσκηση 10.7 Χρησιµοποιώντας τον γεννήτορα τυχαίων αριθµών, Random[], δηµιουργείστε µονοδιάστατες λίστες µήκους 6, 7, 8, 9, και 10 σηµείων. Υπολογίστε το µετασχηµατισµό Fourier των δεδοµένων αυτών. Κατόπιν υπολογίστε τον αντίστροφο µετασχηµατισµό και συγκρίνατε το αποτέλεσµα αυτό µε τα αρχικά δεδοµένα. Άσκηση 10.8 Έστω περιοδική συνάρτηση f(x) µε περίοδο 2π, της οποίας οι τιµές στο διάστηµα (-π, π) δίνονται από τη σχέση f(x)=x. ∆ηµιουργείστε ένα πίνακα σηµείων της συνάρτησης αυτής και βρείτε το διακριτό της µετασχηµατισµό Fourier. Συγκρίνατε τα πλάτη των αρµονικών που βρήκατε µε αυτά του γνωστού αναλυτικού αποτελέσµατος:

∑ ∞+−

=1

1

)sin()1(2)( kxk

xfk

.

(Προσοχή: να χρησιµοποιηθεί η ίδια σύµβαση για τον αναλυτικό και αριθµητικό µετασχηµατισµό Fourier). Άσκηση 10.9 Έστω η περιοδική συνάρτηση |sin(x)| f(x) = µε περίοδο π. ∆ηµιουργείστε ένα

πίνακα σηµείων της συνάρτησης αυτής και βρείτε το διακριτό της µετασχηµατισµό Fourier. Συγκρίνατε τα πλάτη των αρµονικών που βρήκατε µε αυτά του γνωστού αναλυτικού αποτελέσµατος

∑ ∞

−−=

1 2 14)2cos(42|)sin(|

nnxx

ππ.

Page 189: Theodorou Math Practikos Odigos

10.5 ∆ιακριτός µετασχηµατισµός Fourier

189

(Προσοχή: να χρησιµοποιηθεί η ίδια σύµβαση για τον αναλυτικό και αριθµητικό µετασχηµατισµό Fourier).

Page 190: Theodorou Math Practikos Odigos

ΠΕΡΙΓΡΑΦΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆Ε∆ΟΜΕΝΩΝ

190

Page 191: Theodorou Math Practikos Odigos

10.5 ∆ιακριτός µετασχηµατισµός Fourier

191

ΚΕΦΑΛΑΙΟ 11

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

Όπως είναι γνωστό, συνήθης διαφορική εξίσωση είναι µια εξίσωση της µορφής,

0....),,,,( 2

2

=dt

yddtdyytF ,

που περιλαµβάνει τόσο γνωστές συναρτήσεις όσο και µια άγνωστη συνάρτηση µιας µεταβλητής, π.χ. τη y[t], µαζί µε παραγώγους της. Λύση της διαφορικής αυτής εξίσωσης είναι η εύρεση της άγνωστης συνάρτησης y[t]. Ένα πολύ γνωστό παράδειγµα διαφορικών εξισώσεων είναι οι εξισώσεις του Νεύτωνα, που περιγράφουν τη κίνηση ενός σωµατίου υπό την επίδραση εξωτερικής δύναµης. Όταν οι συνιστώσες της δύναµης αυτής έχουν τη µορφή ][],[],[ tftftf zyx , µε

fi[t] γνωστές συναρτήσεις, τότε οι διαφορικές εξισώσεις του Νεύτωνα γίνονται

][][2

2

tfdt

txdm x= , ][][2

2

tfdt

tydm y= , και ][][2

2

tfdt

tzdm z= .

Οι λύσεις των εξισώσεων αυτών προσδιορίζουν τη θέση του σηµείου σε κάθε χρονική στιγµή, δηλαδή προσδιορίζουν τις συντεταγµένες του x[t], y[t], και z[t]. Συµβολισµός: Είδαµε στη παράγραφο 5.5 ό,τι η παράγωγος ως προς t, µιας συνάρτησης µιας µεταβλητής, y[t], µπορεί να δηλωθεί και µε το σύµβολο του τόνου, ’. Έτσι, στις συνήθεις διαφορικές εξισώσεις για να αποφεύγεται ο σχετικά µακροσκελής ορισµός D[y[t], t], χρησιµοποιείται ο συµβολισµός της παραγώγου µε το σύµβολο του τόνου. Οπότε έχουµε

Page 192: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

192

D[y[t], t] y’[t] D[y[t], t, 2] y’’[t], κ.ο.κ.

Αρχικές ή συνοριακές συνθήκες: Η γενική λύση µιας διαφορικής εξίσωσης περιέχει γενικά παραµέτρους, οι τιµές των οποίων µπορούν να προσδιορισθούν από τις αρχικές ή τις συνοριακές συνθήκες που ικανοποιεί το πρόβληµα. Ένα παράδειγµα αρχικών συνθηκών είναι π.χ. οι x[t0]=x0, x’[t0]=υ0, ενώ συνοριακών συνθηκών οι x[t1]=x1, x[t2]=x2. Η Mathematica έχει τη δυνατότητα να λύνει τέτοιες εξισώσεις, τόσο αναλυτικά όσο και αριθµητικά.

11.1 Αναλυτική λύση Η εντολή για την εύρεση της αναλυτικής λύσης διαφορικής εξίσωσης µιας

µεταβλητής είναι: DSolve[equation, y[t], t ]

όπου equation είναι η διαφορική εξίσωση, y[t] η λύση που επιδιώκουµε να βρούµε, και t η ανεξάρτητη µεταβλητή. Η λύση της εξίσωσης αυτής αποδίδεται από τη Mathematica υπό µορφή λίστας αντικατάστασης. Παράδειγµα: Η διαφορική εξίσωση y’’+y’+2y=0, που περιγράφει φθίνουσα ταλάντωση, λύνεται µε την εντολή:

In[1]:=s1=DSolve[y''[t]+y'[t]+2y[t]==0, y[t], t]

Out[1]=y[t]→ ]2[])71(21[]1[])71(

21[ CtiExpCtiExp +−+−−

Στη σύνταξη της εντολής DSolve, είναι προτιµότερο να µην δηλώνεται

όρισµα στη ζητούµενη λύση, οπότε η εντολή επίλυσης γίνεται solution=DSolve[equation, y, t ]

Page 193: Theodorou Math Practikos Odigos

11.1 Αναλυτική λύση

193

Με τον τρόπο αυτό η λύση, στη λίστα εξόδου, δίνεται µε τη µορφή συνάρτησης, η οποία µπορεί κατόπιν να χρησιµοποιηθεί όπως χρησιµοποιούνται οι συναρτήσεις της Mathematica. Παράδειγµα: Η λύση της διαφορικής εξίσωσης y’’+y’+2y=0 δίνεται παρακάτω

In[2]:=solution=DSolve[y''[t]+y'[t]+2 y[t]==0, y, t] Out[2]=y→Function[t,

]]2[])71(21[]1[])71(

21[ CtiExpCtiExp +−+−−

Στο παραπάνω παράδειγµα, το αποτέλεσµα αποδίδεται ως λίστα αντικατάστασης µε όνοµα solution. Επειδή η λύση της διαφορικής εξίσωσης δίνεται µε τον έµµεσο αυτό τρόπο, υπό µορφή µιας λίστας αντικατάστασης, για να χρησιµοποιηθεί πρέπει να αποδοθεί σε µια συνάρτηση. Μπορούµε να ορίσουµε µια τέτοια συνάρτηση που να αποτελεί τη λύση της διαφορικής αυτής εξίσωσης, ως εξής

f[t_]:=y[t]/.solution[[1]] Ο δείκτης [[1]] δηλώνει το πρώτο στοιχείο της λίστας, και αντιπροσωπεύει τη πρώτη λύση της διαφορικής εξίσωσης.

In[3]:=f[t_]:=y[t]/.solution[[1]]

Μετά τον ορισµό αυτό, η συνάρτηση f[t] µπορεί να χρησιµοποιηθεί για την εκτέλεση πράξεων, όπως π.χ. της πρώτης παραγώγου της συνάρτησης

In[4]:=f’[t] Out[4]:=

]2[])71(21[)71(

21]1[])71(

21[)71(

21 CtiExpiCtiExpi +−+−+−−−−

Άσκηση 11.1 Να βρεθούν οι λύσεις των παρακάτω διαφορικών εξισώσεων, να αποδοθούν σε συναρτήσεις, και να υπολογιστούν οι δεύτεροι παράγωγοι των:

Page 194: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

194

α) y’’-4x=exp(x), στ) y’’-y=x, β) y’’+y=cos(3x), ζ) y’’-y=x2 , γ) y’+y=x η) y’’-y=sin(2x), δ) y’+y=exp(x), θ) y’’+y=x cosh(x), ε) y’-2y=sin(x), ι) y’’+2y’+y=x2 exp(x).

Όταν η εξίσωση ικανοποιεί καθορισµένες αρχικές ή συνοριακές συνθήκες, τότε η εντολή για τη λύση της είναι:

solution=DSolve[ eqn1, eqn2, ..., y, t ] Στην εντολή αυτή, η πρώτη είσοδος είναι µια λίστα που περιέχει τόσο τη διαφορική εξίσωση (eqn1) όσο και τις συνθήκες που ικανοποιεί η λύση (eqn2, …), η δεύτερη είσοδος δηλώνει τη λύση που επιδιώκουµε να βρούµε, και η τρίτη την ανεξάρτητη µεταβλητή. Για τη περίπτωση συστήµατος n διαφορικών εξισώσεων µε n άγνωστες συναρτήσεις y1[t], y2[t], ..., yn[t], η εντολή γίνεται:

solution=DSolve[ eqn1, eqn2, ..., y1, y2, ..., yn, t ] Επαλήθευση λύσης

Η επαλήθευση της λύσης solution της παραπάνω διαφορικής εξίσωσης γίνεται µε εντολή

eqn1, eqn2, …/.solution[[1]] Παράδειγµα: Η λύση της διαφορικής εξίσωσης y’’+y’+2y=0, µε αρχικές συνθήκες y'[0]=0, y[0]=1, υπολογίζεται µε την εντολή:

In[5]:=sol2=DSolve[y''[t]+y'[t]+2 y[t]==0, y'[0]==0 , y[0]==1, y, t]

]])71(21[7])71(

21[7

141

])71(21[7])71(

21[7

141,[y Out[5]

⎟⎠⎞

⎜⎝⎛ +−−+−+

⎟⎠⎞

⎜⎝⎛ −−+−−→=

tiExpitiExp

tiExpitiExptFunction

Page 195: Theodorou Math Practikos Odigos

11.1 Αναλυτική λύση

195

Τη λύση αυτή µπορούµε να την αποδώσουµε στη συνάρτηση f2[t], και να τη παραστήσουµε γραφικά, µαζί µε τη παράγωγο της, µε τις εντολές

In[6]:=f2[t_]:=y[t]/.sol2[[1]] In[7]:=fig1=Plot[f2[t], f2'[t], t, 0, 10, PlotStyle ,Dashing[0.04], PlotRange All]

2 4 6 8 10

-0.75

-0.5

-0.25

0.25

0.5

0.75

1

Παράδειγµα: κατακόρυφη βολή Σωµάτιο µάζας 1 Kgr, βρίσκεται εντός πεδίου βαρύτητας µε επιτάχυνση g=10 m/sec2, και βάλλεται κατακόρυφα προς τα πάνω µε αρχική θέση y[0]=0 και αρχική ταχύτητα y’[0]=10 m/sec. Η διαφορική εξίσωση που περιγράφει τη κίνηση αυτή είναι

In[8]:=eqn1 = y''[t] == -10 και οι αρχικές συνθήκες που ικανοποιεί

In[9]:=eqn2 = y[0] == 0; eqn3 = y'[0] == 10

Out[9]=y[0] == 0 Out[10]= y'[0] == 10

Η αναλυτική λύση του προβλήµατος αυτού βρίσκεται µε την εντολή

In[11]:=sol3=DSolve[eqn1,eqn2,eqn3, y, t]

Page 196: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

196

Out[11]=y[t] ->Function[t, -5(-2t+ t2] Η επαλήθευση της λύσης αυτής γίνεται µε την εντολή

In[12]:=eqn1, eqn2, eqn3/.sol3[[1]] Out[12]=True,True,True

Σε µερικές περιπτώσεις, παρόλο που υπάρχει γενική αναλυτική λύση της διαφορικής εξίσωσης, εντούτοις είναι δυνατόν να µην υπάρχει λύση που να ικανοποιεί συγκεκριµένες αρχικές ή συνοριακές συνθήκες. Στη περίπτωση αυτή η Mathematica επιστρέφει µια κενή λίστα ως λύση. Π.χ. η διαφορική εξίσωση y’[x]+y[x]/x=x2 ενώ έχει αναλυτική λύση

In[13]:=DSolve[y'[x]+y[x]/x==x^2, y, x] Out[13]=y-> Function[x, x^3/4 + C[1]/x],

όµως δεν έχει λύση µε αρχική συνθήκη y[0]=1,

In[14]:=DSolve[y'[x]+y[x]/x==x^2, y[0]==1, y, x] Out[14]=

Άσκηση 11.2 Να λυθούν τα ακόλουθα προβλήµατα αρχικών τιµών, και να επαληθευθούν οι λύσεις αυτές: α) y’’+y=x+3, y(0)=1, y’(0)=0 δ) y’’-y=sin(x) , y(0)=0, y’(0)=-1/2, β) y’’+y=2 ex , y(0)=0, y’(0)=1, ε) y’+y=x, y(0)=2, γ) y’’-y=1, y(0)=A, y’(0)=B στ) y’+y=exp(-x), y(0)=0. Άσκηση 11.3 Να λυθούν τα ακόλουθα συστήµατα διαφορικών εξισώσεων, επιβάλλοντας τις αρχικές συνθήκες όπου αυτές δίνονται, και να επαληθευθούν οι λύσεις αυτές: α) x’(t)=3x(t)+y(t), y’(t)=x(t)+3y(t) β) x’’(t)+8x(t)+2y(t)=0, y’’(t)+2x(t)+5y(t)=0 γ) x’(t)=2x(t)+3y(t)+et, y’(t)=3x(t)+2y(t)+3et, δ) x’(t)=-x(t)+y(t)+cos(t), y’(t)=-5x(t)+3y(t), x(0)=0, y(0)=0,

Page 197: Theodorou Math Practikos Odigos

11.2 Αριθµητική λύση

197

ε) x’(t)=x(t)+2y(t), y’(t)=-2x(t)-3y(t), x(0)=A, y(0)=B.

11.2 Αριθµητική λύση Όπως είναι γνωστό, µόνο σε σχετικά περιορισµένο αριθµό διαφορικών

εξισώσεων επιτυγχάνεται η εύρεση αναλυτικής λύσης. Όταν δεν είναι εφικτό να βρεθεί µια τέτοια λύση, µπορούµε να επιδιώξουµε να βρούµε αριθµητική λύση που να ισχύει σ’ ένα συγκεκριµένο διάστηµα τιµών της ανεξάρτητης µεταβλητής.

Όπως σε όλες τις αριθµητικές εντολές, έτσι και στις διαφορικές εξισώσεις, δεν µπορεί να βρεθεί αριθµητική λύση διαφορικής εξίσωσης όταν σ’ αυτή υπάρχουν αλγεβρικές παράµετροι χωρίς προκαθορισµένη αριθµητική τιµή. Τέλος, η λύση πρέπει να ικανοποιεί συγκεκριµένες αρχικές ή συνοριακές συνθήκες, ώστε να µην παραµένουν σ’ αυτήν απροσδιόριστες σταθερές. Οι εντολές για το προσδιορισµό αριθµητικής λύσης στο διάστηµα t1, t2, µιας διαφορικής εξίσωσης ή συστήµατος διαφορικών εξισώσεων, είναι:

NDSolve[ eqn1, eqn2, ..., y, t, t1, t2 ] NDSolve[ eqn1, eqn2, ..., y1, y2, ..., t, t1, t2 ]

Η αριθµητική λύση της εξίσωσης αποδίδεται υπό µορφή συνάρτησης παρεµβολής. Για την εντολή NDSolve υπάρχουν παράµετροι που καθορίζουν την ακρίβεια της µεθόδου, το µέγεθος του βήµατος, το µέγιστο αριθµό των βηµάτων κλπ, και έχουν προκαθορισµένες τιµές. Οι τιµές αυτές µπορούν να τροποποιηθούν. Η περίπτωση που απαντάται συχνά είναι η ανάγκη τροποποίησης του µέγιστου αριθµού βηµάτων, και η εντολή για την τροποποίηση αυτή είναι MaxSteps→Number, π.χ.

NDSolve[ eqn1, eqn2,..., y, t, t1, t2, MaxSteps→5000]. Περισσότερες πληροφορίες για τις παραµέτρους αυτές, και για το τρόπο που οι τιµές τους τροποποιούνται, υπάρχουν στο Help της Mathematica. Παράδειγµα: Τη διαφορική εξίσωση y’’[t]+y’[t]+2y[t]=0, µε τις αρχικές συνθήκες y’[0]=0, y[0]=1, την οποία λύσαµε παραπάνω αναλυτικά, µπορούµε να τη λύσουµε και αριθµητικά στο διάστηµα 0, 15 µε την εντολή:

Page 198: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

198

In[1]:=sol4 = NDSolve[y''[t] + y'[t] +2 y[t] == 0, y'[0] == 0, y[0] == 1, y, t, 0, 15] Out[1]=y -> InterpolatingFunction[0., 5., <>]

Στο παραπάνω παράδειγµα, η λύση αποδίδεται ως συνάρτηση παρεµβολής σε µορφή λίστας αντικατάστασης, µε το όνοµα sol4. Χρησιµοποιώντας τη λίστα αυτή µπορούµε να ορίσουµε µια συνάρτηση που να αποτελεί την αριθµητική λύση της διαφορικής εξίσωσης, ως εξής

In[2]:=f[t_]:=y[t]/.sol4[[1]] Η συνάρτηση αυτή µπορεί να χρησιµοποιηθεί σε οποιοδήποτε υπολογισµό, π.χ. στην γραφική παράσταση της συνάρτησης και της παραγώγου της,

In[3]:=fig2=Plot[f[t], f'[t], t, 0, 12, PlotStyle , Dashing[0.04], PlotRange All]

2 4 6 8 10

-0.75

-0.5

-0.25

0.25

0.5

0.75

1

Για να συγκρίνουµε την αναλυτική µε την αριθµητική λύση, παρουσιάζουµε τις αντίστοιχες γραφικές παραστάσεις, fig1 και fig2, στο ίδιο διάγραµµα µε την εντολή

In[4]:=Show[fig1, fig2]

Page 199: Theodorou Math Practikos Odigos

11.3 Εφαρµογή

199

2 4 6 8 10

-0.75

-0.5

-0.25

0.25

0.5

0.75

1

Στο διάγραµµα αυτό δεν ξεχωρίζει η αναλυτική από την αριθµητική λύση, που υποδηλώνει τη καλή ακρίβεια της αριθµητικής µεθόδου. Άσκηση 11.4 Να λυθούν αριθµητικά, στο διάστηµα 0,5, οι ακόλουθες διαφορικές εξισώσεις, και η λύση τους να παρασταθεί γραφικά: 1) y’’+y=x+3, y(0)=1, y’(0)=0 4) y’’+y=sin(x) , y(0)=0, y’(0)=-1/2, 2) y’’+y=2 ex , y(0)=0, y’(0)=1, 5) y’+y=x, y(0)=2, 3) y’’-y=1, y(0)=0, y’(0)=1, 6) y’+y=exp(-x), y(0)=0,

11.3 Εφαρµογή Σωµάτιο µάζας 10 gr βάλλεται υπό γωνία µέσα στον αέρα, ο οποίος ασκεί πάνω του

αντίσταση τριβής ίση µε dt

rdn→

− , και µε αρχικές συνθήκες x[0] = 0 cm, x'[0] = 10

cm/sec, y[0] = 0 cm, και y'[0] = 100 cm/sec, µε x να δηλώνει τον οριζόντιο και y τον κατακόρυφο άξονα. Να βρεθεί αριθµητικά η τροχιά του σωµατίου όταν ο συντελεστής τριβής έχει τη τιµή (α) n=0 και (β) n=0.1 cgs, και να παρασταθεί γραφικά η τροχιά του. Λύση: Οι παράµετροι του προβλήµατος είναι:

In[1]:=m = 10

Page 200: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

200

g = 10 Out[1]=10 Out[2]=10 (* η συναρτησιακή λύση των εξισώσεων κίνησης στο διάστηµα t, 0, 100 είναι *) In[3]:=newtonsol[n_]:=NDSolve[y''[t]==-n y'[t]-g, x''[t]==-n x'[t], x[0]==0, x'[0]==10, y[0]==0, y'[0]==100, x, y, t, 0, 100] (* η αριθµητική λύση των εξισώσεων κίνησης απουσία τριβών είναι *) In[4]:=boli1=newtonsol[0.] Out[4]=x -> InterpolatingFunction[0., 100., <>], y -> InterpolatingFunction[0., 100., <>] (* η αριθµητική λύση των εξισώσεων κίνησης παρουσία τριβών είναι *) In[5]:=boli2=newtonsol[0.1] Out[5]=x -> InterpolatingFunction[0., 100., <>], y -> InterpolatingFunction[0., 100., <>]

Γραφικές παραστάσεις της λύσης σε διάφορους συνδυασµούς, είναι2: (* απουσία τριβών *)

In[6]:=p1= ParametricPlot[Evaluate[x[t], y[t] /. boli1], t, 0, 25, PlotRange -> All, PlotStyle -> RGBColor[1, 0, 0], AxesLabel -> "x[t]", "y[t]"]

2 Για τη σηµασία της εντολής Evaluate, βλέπε παράρτηµα. Επίσης, στη παρούσα εφαρµογή, ο ορισµός των συναρτήσεων x(t) και y(t) που περιγράφουν τις λύσεις των διαφορικών εξισώσεων, γίνεται µέσα στο Plot, µε την εντολή x[t], y[t]/.boli1. Αυτός ο τρόπος έχει το µειονέκτηµα ότι οι συναρτήσεις αυτές ισχύουν µόνο µέσα στο Plot και δεν µπορούν να χρησιµοποιηθούν έξω από αυτό.

Page 201: Theodorou Math Practikos Odigos

11.3 Εφαρµογή

201

50 100 150 200 250x@tD

-600

-400

-200

200

400

y@tD

(* παρουσία τριβών *)

In[7]:=p2=ParametricPlot[Evaluate[x[t], y[t] /. boli2], t, 0, 25, PlotRange -> All, PlotStyle -> RGBColor[0, 0, 1], AxesLabel -> "x[t]", "y[t]"]

20 40 60 80x@tD

-600

-400

-200

200

y@tD

In[8]:=Show[p1, p2] (* συνδυάζει τις δύο γραφικές παραστάσεις σε µία *)

Page 202: Theodorou Math Practikos Odigos

ΛΥΣΕΙΣ ∆ΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ

202

50 100 150 200 250x@tD

-600

-400

-200

200

400

y@tD

Επίσης µπορούν να γίνουν γραφικές παραστάσεις της κίνησης µε τις παρακάτω εντολές:

In[9]:=fg1=Plot[Evaluate[x[t], y[t] /.boli1], t, 0, 25, PlotRange -> All, PlotStyle -> RGBColor[1, 0, 1], AxesLabel -> "time", "x[t], y[t]"] In[10]:=fg2=Plot[Evaluate[x[t], y[t] /.boli2], t, 0, 25, PlotRange -> All, PlotStyle -> RGBColor[1, 0, 1], AxesLabel -> "time", "x[t], y[t]"] In[11]:=Show[fg1, fg2] (* συνδυάζει τις δύο γραφικές παραστάσεις σε µία *)

Page 203: Theodorou Math Practikos Odigos

12.1 Περιβάλλον εργασίας

203

ΚΕΦΑΛΑΙΟ 12

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

Όπως είδαµε στα προηγούµενα κεφαλαία, στη Mathematica υπάρχει µια µεγάλη ποικιλία εσωτερικών συναρτήσεων και πακέτων που µπορούν να χρησιµοποιηθούν σε υπολογισµούς. Παραδείγµατα εσωτερικών συναρτήσεων και πακέτων συναντήσαµε στα προηγούµενα κεφάλαια. Εκτός όµως από τα έτοιµα αυτά προγράµµατα, ο χρήστης έχει τη δυνατότητα να γράψει τα δικά του, για την εκτέλεση συγκεκριµένων υπολογισµών. Στο κεφάλαιο 5 είδαµε πως προγραµµατί-ζονται οι εξωτερικές συναρτήσεις, στο δε παρόν κεφάλαιο θα γίνει η παρουσίαση του τρόπου γραφής των εξωτερικών πακέτων. Στη σύνταξη των πακέτων αυτών χρησιµοποιούνται οι εντολές Begin και BeginPackage, οι οποίες καθορίζουν και τον τρόπο που επικοινωνεί η Mathematica µε τα πακέτα αυτά. Οι παραπάνω εντολές παρουσιάζονται στη παράγραφο 12.1, η λειτουργία τους αναλύεται στη παράγραφο 12.2, ενώ στη παράγραφο 12.3 δίνεται µια τυπική δοµή ενός εξωτερικού πακέτου. Η παράγραφος 12.2 απευθύνεται σε πιο προχωρηµένους αναγνώστες, και σε πρώτη ανάγνωση µπορεί να παραληφθεί.

12.1 Περιβάλλον εργασίας Με την εκκίνηση της Mathematica δηµιουργείται ένα περιβάλλον εργασίας

(διεύθυνση) στη µνήµη του υπολογιστή, το οποίο ονοµάζεται γενικό (Global), και αντιστοιχεί στις διευθύνσεις (Directories) που δηµιουργούνται στο λειτουργικό σύστηµα των Windows. Στο περιβάλλον αυτό εργασίας αποθηκεύονται προσωρινά οι παράµετροι και τα αποτελέσµατα των υπολογισµών της Mathematica. Μπορούµε

Page 204: Theodorou Math Practikos Odigos

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

204

δε να ενηµερωθούµε για το περιβάλλον εργασίας της Mathematica µε την εντολή $Context

In[1]:=$Context Out[1]=Global`

Έστω τώρα ότι ορίζουµε, µε τη παρακάτω εντολή, τη µεταβλητή yy µε τιµή yy=2,

In[2]:=yy=2 Out[2]=2

Η µεταβλητή αυτή, µαζί µε τη τιµή της, αποθηκεύεται στη διεύθυνση Global. Με την εκτέλεση της εντολής ?Global`* µπορούµε να δούµε το περιεχόµενο της διεύθυνσης αυτής, και για τη συγκεκριµένη περίπτωση παίρνουµε

In[3]:=?Global`* Global`yy yy=2.

Αντίστοιχο µε το περιβάλλον Global, είναι το περιβάλλον εργασίας System που δηµιουργείται αυτόµατα από τον πυρήνα µε την εκκίνηση του. Με την εντολή $ContextPath εµφανίζονται στη οθόνη όλες οι διευθύνσεις που υπάρχουν στο πρόγραµµα κατά τη λειτουργία του,

In[4]:=$ContextPath Out[4]=Global`, System`

Εκτός από τις παραπάνω διευθύνσεις, οι οποίες δηµιουργούνται αυτόµατα, ο

χρήστης έχει τη δυνατότητα δηµιουργίας νέων διευθύνσεων, οι οποίες είναι απαραίτητες και στο προγραµµατισµό εξωτερικών πακέτων. Υπάρχουν δύο διαφορετικοί τρόποι δηµιουργίας τέτοιων διευθύνσεων, που έχουν όµως διαφορετικές ιδιότητες. Οι εντολές δηµιουργίας των διευθύνσεων είναι οι ακόλουθες,

Page 205: Theodorou Math Practikos Odigos

12.2 Ιδιότητες διευθύνσεων*

205

Begin["name`"] . . .

End[], και

BeginPackage["name`"] . . .

EndPackage[]. Οι εντολές Begin και BeginPackage ανοίγουν µια καινούργια διεύθυνση, ενώ οι εντολές End και EndPackage, αντίστοιχα, την κλείνουν. Ενδιάµεσα των εντολών αυτών τοποθετούνται οι εντολές που εκτελούν τους ζητούµενους υπολογισµούς, στο αντίστοιχο περιβάλλον εργασίας. Τα δύο αυτά είδη διευθύνσεων έχουν διαφορετικές ιδιότητες, που θα παρουσιαστούν στην επόµενη παράγραφο.

12.2 Ιδιότητες διευθύνσεων* Όπως αναφέρθηκε στη παράγραφο 12.1, οι διευθύνσεις που δηµιουργούνται

µε την εντολή Begin έχουν διαφορετικές ιδιότητες από αυτές που δηµιουργούνται µε την εντολή BeginPackage. Οι ιδιότητες αυτές αναλύονται στη παρούσα παράγραφο.

12.2.1 ∆ιεύθυνση από εντολή Begin

Σύµφωνα µε το τρόπο αυτό, η δηµιουργία µιας διεύθυνσης, µέσα από τη µητρική διεύθυνση Global, γίνεται µε την εντολή Begin["name`"], και το κλείσιµο

* Η παρούσα παράγραφος απευθύνεται σε προχωρηµένους αναγνώστες, και σε πρώτη ανάγνωση µπορεί να παραληφθεί.

Page 206: Theodorou Math Practikos Odigos

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

206

µε την εντολή End[]. Η θυγατρική διεύθυνση που έτσι δηµιουργείται έχει την ιδιότητα να «βλέπει» το περιεχόµενο της µητρικής διεύθυνσης Global, ενώ το δικό της περιεχόµενο δεν είναι ορατό από τη µητρική διεύθυνση. ∆ηµιουργεί δηλαδή ένα τοπικό περιβάλλον στο οποίο µπορούν να ορισθούν ένα σύνολο µεταβλητών, οι οποίες δεν θα µεταφέρονται στο κυρίως πρόγραµµα. ∆ηλαδή µια παράµετρος που ορίζεται στη θυγατρική διεύθυνση, χωρίς να προϋπάρχει στη µητρική, δεν είναι ορατή από τη µητρική διεύθυνση και δεν µπορεί να χρησιµοποιηθεί µέσα απ’ αυτήν. Όταν όµως µια παράµετρος έχει επίσης ορισθεί στη µητρική, τότε η τιµή της µεταφέρεται και µπορεί να χρησιµοποιηθεί µέσα από τη µητρική διεύθυνση. Τέλος, µπορεί να γίνει αλλαγή της τιµής µιας τέτοιας παραµέτρου µέσα στη θυγατρική διεύθυνση, και η καινούργια αυτή τιµή µεταφέρεται αυτόµατα στη µητρική διεύθυνση. Ένα τέτοιο παράδειγµα δίνεται παρακάτω,

In[5]:=Begin["Topiko1`"] Out[5]=Topiko1` In[6]:=$Context Out[6]=Topiko1` In[7]:=$ContextPath Out[7]=Global`, System` In[8]:=xx=3 Out[8]=3 In[9]:=Print[xx] From In[9]:=3

Μέσα από τη θυγατρική διεύθυνση Topiko1 έχουµε τη δυνατότητα να δούµε τη τιµή µιας παραµέτρου που είχε ορισθεί στη διεύθυνση Global, π.χ. τη τιµή της yy που ορίσθηκε µε την εντολή In[2],

In[10]:=Print[yy] From In[10]:=2

Μέσα από τη θυγατρική διεύθυνση µπορούµε επίσης να αλλάξουµε τη τιµή µιας µεταβλητής που έχει ορισθεί στη διεύθυνση Global, π.χ. της yy, της οποίας η καινούργια τιµή µεταφέρεται και µπορεί να χρησιµοποιηθεί στη µητρική διεύθυνση.

Page 207: Theodorou Math Practikos Odigos

12.2 Ιδιότητες διευθύνσεων*

207

Η διεύθυνση Global δεν έχει όµως πρόσβαση σε µια παράµετρο που έχει ορισθεί στη θυγατρική διεύθυνση και δεν υπάρχει στη Global, π.χ. η παράµετρος xx,

In[11]:=yy=3 Out[11]=3 In[12]:=End[] Out[12]=Topiko1` In[13]:=$Context Out[13]=Global` In[14]:=$ContextPath Out[14]=Global`,System` In[15]:=Print[xx] From In[15]:=xx In[16]:=Print[yy] From In[16]:=3

Επιστροφή στη θυγατρική διεύθυνση µας δίνει τη δυνατότητα πρόσβασης στη µεταβλητή xx, που είχε νωρίτερα ορισθεί στη διεύθυνση αυτή, µε την εντολή In[8],

In[17]:=Begin["Topiko1`"] Out[17]=Topiko1` In[18]:=xx Out[18]=3 In[19]:=End[] Out[19]=Topiko1`

12.2.2 ∆ιεύθυνση από εντολή BeginPackage

Ένας δεύτερος τρόπος δηµιουργίας µιας διεύθυνσης είναι µε τις εντολές BeginPackage["name`"] (άνοιγµα της διεύθυνσης) και EndPackage[] (κλείσιµο της διεύθυνσης). Η διεύθυνση που δηµιουργείται µε το τρόπο αυτό έχει την ιδιότητα να µην «βλέπει» το περιεχόµενο της µητρικής διεύθυνσης, αλλά το δικό της περιεχόµενο να είναι ορατό από αυτήν, έχει δηλαδή τις αντίθετες ιδιότητες από αυτές της διεύθυνσης που δηµιουργείται από την εντολή Begin. ∆ηλαδή, µια παράµετρος που υπάρχει στη Global δεν είναι ορατή και δεν µπορεί να χρησιµοποιηθεί στη καινούργια διεύθυνση, αλλά µια παράµετρος που δηµιουργείται

Page 208: Theodorou Math Practikos Odigos

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

208

στη θυγατρική διεύθυνση είναι ορατή και µπορεί να χρησιµοποιηθεί στη µητρική διεύθυνση. Πρέπει όµως να σηµειωθεί ότι στη περίπτωση που η ίδια παράµετρος υπάρχει και στις δύο διευθύνσεις, και η τιµή που της έχει αποδοθεί στη θυγατρική διεύθυνση είναι διαφορετική από την τιµή της στη µητρική διεύθυνση, τότε η τιµή της παραµέτρου που χρησιµοποιείται όταν οι πράξεις εκτελούνται µέσα στη µητρική διεύθυνση είναι αυτή που είχε ορισθεί στη διεύθυνση αυτή. Αυτό οφείλεται στο γεγονός ότι µέσα στη µητρική διεύθυνση οι παράµετροι που βρίσκονται σ’ αυτή έχουν προτεραιότητα σε σχέση µε αυτές της θυγατρικής. Ένα τέτοιο παράδειγµα δίνεται παρακάτω,

In[20]:=ClearAll["Global`*"] In[21]:=yy=4 Out[21]=4 In[22]:=BeginPackage["Topiko2`"] Out[22]=Topiko2` In[23]:=$Context Out[23]=Topiko2` In[24]:=$ContextPath Out[24]=Topiko2`,System` In[25]:=Print[yy] From In[25]:=yy In[26]:=yy=5 Out[26]=5 In[27]:=yz=6 Out[27]=6

Επιστρέφοντας τώρα στη µητρική διεύθυνση, έχουµε πρόσβαση στη νέα παράµετρο yz, αλλά δεν «βλέπουµε» τη νέα τιµή της παραµέτρου yy. Η τιµή yy=5 που υπάρχει στη θυγατρική διεύθυνση επικαλύπτεται από τη τιµή yy=4 της Global.

In[28]:=EndPackage[] In[29]:=$Context Out[29]=Global` In[30]:=$ContextPath Out[30]=Topiko2`,Global`,System`

Page 209: Theodorou Math Practikos Odigos

12.2 Ιδιότητες διευθύνσεων*

209

In[31]:=Print[yy] From In[31]:=4 In[32]:=Print[yz] From In[32]:=6

12.2.3 Φωλιασµένες διευθύνσεις

Εκτός από µεµονωµένες διευθύνσεις, µπορούµε να δηµιουργήσουµε φωλιασµένες διευθύνσεις µε συνδυασµό των εντολών Begin και BeginPackage. Ειδικότερα θα εξετάσουµε τη περίπτωση που αξιοποιείται στη δηµιουργία των εξωτερικών πακέτων, και περιλαµβάνει τον παρακάτω συνδυασµό

BeginPackage[“SupportDir`”] x1::usage=”Comments for variable x1” . . Begin[“`Private`”]

x1=…. . .

End[] EndPackage[]

Στη παραπάνω δοµή, οι παράµετροι που υπάρχουν στη διεύθυνση SupportDir είναι ορατές και από τη Global, π.χ. η µεταβλητή x1 µπορεί να χρησιµοποιηθεί σε πράξεις µέσα στη διεύθυνση Global. Το σηµαντικότερο όµως σηµείο του παραπάνω φωλιασµένου συνδυασµού διευθύνσεων είναι ότι οι αριθµητικές τιµές των παραµέτρων που µπορούν να µεταφερθούν από τη διεύθυνση Private στη Global είναι εκείνες για τις οποίες οι παράµετροι, ως αφηρηµένες µεταβλητές, υπάρχουν και στη διεύθυνση SupportDir. Άρα όλες οι παράµετροι και συναρτήσεις που πρέπει να µεταφερθούν από τη διεύθυνση Private στη Global, πρέπει να δηλωθούν ως αφηρηµένες µεταβλητές στη διεύθυνση SupportDir. Τέλος, µπορούµε να εισάγουµε σχόλια για τις µεταβλητές της διεύθυνσης SupportDir, και αυτό γίνεται µε την εντολή variablename::usage=”Comments for the variablename”

Page 210: Theodorou Math Practikos Odigos

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

210

όπου variablename το όνοµα της παραµέτρου που σχολιάζουµε. Τα σχόλια αυτά µπορούν να αναζητηθούν από τη διεύθυνση Global µε την εντολή ?variablename.

12.3 ∆ηµιουργία εξωτερικών πακέτων Ένα εξωτερικό πακέτο συντάσσεται µέσα από ένα κειµενογράφο ASCII

χαρακτήρων, π.χ. του Notepad των Windows. Το πακέτο αυτό αποθηκεύεται σ’ ένα αρχείο µε όνοµα που έχει τη κατάληξη .m, π.χ. PackageStructure.m. Μια τυπική δοµή ενός τέτοιου πακέτου, µαζί µε σχόλια, είναι η παρακάτω: (* Όνοµα του φακέλου: PackageStructure.m *) (* Συγγραφέας του πακέτου: G. Theodorou *) (* Σχόλια σχετικά µε το πακέτο *) (* ∆ηµιουργήστε τη θυγατρική διεύθυνση, χρησιµοποιώντας την εντολή

BeginPackage. Το όνοµα της διεύθυνσης µπορεί να είναι διαφορετικό από το όνοµα του φακέλου *)

BeginPackage["PackageDir`"] (*∆ώστε τα ονόµατα των παραµέτρων και συναρτήσεων που θέλετε να µεταφερθούν στη διεύθυνση Global. ∆ώστε επίσης µια περιγραφή για τη

χρήση των συναρτήσεων που θα ορίσετε µέσα στο πακέτο. *) userFunction::usage="userFunction[x] is accessible by user" (* ∆ηµιουργήστε τη θυγατρική υποδιεύθυνση, `Private`,

χρησιµοποιώντας την εντολή Begin *) Begin["`Private`"] (* Ορίστε τις συναρτήσεις και εκτελέστε τους υπολογισµούς που θέλετε *) userFunction[x_]:=Sin[x]+Cos[x] (* Κλείστε τη υποδιεύθυνση `Private` *) End[] (* Προασπίστε τα ονόµατα των συναρτήσεων *) Protect[userFunction] (* Κλείστε τη θυγατρική διεύθυνση PackageStuctureDir` *)

Page 211: Theodorou Math Practikos Odigos

12.3 ∆ηµιουργία εξωτερικών πακέτων

211

EndPackage[] (* Τέλος του φακέλου *) Όπως παρουσιάστηκε στη παράγραφο 12.2.3, για την επικοινωνία του πακέτου µε τη διεύθυνση Global χρησιµοποιείται ο συνδυασµός των φωλιασµένων διευθύνσεων. Μετά τη δήλωση της εντολής BeginPackage, και πριν την εντολή Begin, τοποθετούνται τα ονόµατα των παραµέτρων και συναρτήσεων, και των σχολίων, που πρέπει να µεταφερθούν στη διεύθυνση Global. ∆ηλαδή η περιοχή αυτή διαδραµατίζει του ρόλου της εντολής COMMON της γλώσσας προγραµµατισµού FORTRAN.

Για να µπορέσει να χρησιµοποιηθεί ένα εξωτερικό πακέτο πρέπει πρώτα να ενεργοποιηθεί. Αυτό γίνεται µε την εντολή

<<Direction\filename` Όταν τα εξωτερικά πακέτα τοποθετούνται µέσα σε µία διεύθυνση, στο δίσκο του υπολογιστή, στην οποία να έχει αυτόµατα πρόσβαση η Mathematica, τότε η εντολή ενεργοποίησης του πακέτου γίνεται

<< filename` π.χ.

<<PackageStructure`

Οι διευθύνσεις που είναι προσιτές από τη Mathematica εµφανίζονται στη οθόνη µε την εκτέλεση της εντολής $Path, σε µια από τις οποίες µπορεί να τοποθετηθεί το πακέτο που φτιάξαµε. Συνιστάται στο χρήστη να µην χρησιµοποιεί για το σκοπό αυτό τις υποδιευθύνσεις που βρίσκονται κάτω από τη γενική διεύθυνση Program Files, όπου είναι εγκαταστηµένο το πρόγραµµα της Mathematica και υπάρχει ο κίνδυνος να καταστραφεί, αλλά τις υποδιευθύνσεις κάτω από τη γενική διεύθυνση Documents and Settings.

Page 212: Theodorou Math Practikos Odigos

∆ΗΜΙΟΥΡΓΙΑ ΕΞΩΤΕΡΙΚΩΝ ΠΑΚΕΤΩΝ

212

12.4 Παράδειγµα Το παρακάτω παράδειγµα πακέτου υπολογίζει το παραγοντικό ενός

ακεραίου αριθµού. Είναι το ίδιο παράδειγµα µε αυτό που δόθηκε στη παράγραφο 6.5, αλλά γραµµένο σε µορφή εξωτερικού πακέτου. (* Όνοµα φακέλου: Paragontiko.m *) (* Συγγραφέας του πακέτου: G. Theodorou *) (* Υπολογίζει το παραγοντικό ακεραίου αριθµού *) BeginPackage["paragontiko`"] paragontiko::usage="paragontiko[n] calculates factorial of an integer" Begin["`Private`"] x=0 z=1 paragontiko[y_]:=If[y==0, 1, While[!(x==y), x=x+1; z=z*x]; z] End[] EndPackage[] Άσκηση 12.1 Γράψτε ένα εξωτερικό πακέτο που να υπολογίζει τη µέση τιµή και τη διασπορά δεδοµένων που είναι αποθηκευµένα σε µια µονοδιάστατη λίστα.

Page 213: Theodorou Math Practikos Odigos

12.4 Παράδειγµα

213

ΠΑΡΑΡΤΗΜΑ

Στο παράρτηµα αυτό αναφέρονται µερικές χρήσιµες εντολές, που δεν έχουν παρουσιαστεί στα προηγούµενα κεφάλαια. Assumptions: Η εντολή αυτή χρησιµοποιείται, π.χ. στην εντολή Integrate, για να καθορίσει τυχόν συνθήκες που υπακούουν αλγεβρικές παράµετροι που υπάρχουν στην υπό ολοκλήρωση συνάρτηση. Παράδειγµα Integrate[Sin[x] BesselJ[0, a x]/x, x, 0, Infinity, Assumptions Im[a] == 0, a^2<1] Οι περιορισµοί, µέσα στην εντολή Assumption, δίνονται µε τη χρήση τελεστών σύγκρισης. DiracDelta[x]: δίνει τη συνάρτηση δέλτα του Dirac, δ(x). Dt[f[x, y, …, t], t]: Η εντολή αυτή υπολογίζει την ολική παράγωγο της συνάρτησης f(x, y, …, t) ως προς t. Evaluate: Η εντολή αυτή επιβάλει την άµεση εκτέλεση εκκρεµών πράξεων. Για παράδειγµα, για να µπορέσει να εκτελεστεί η εντολή Plot[D[x^2,x], x, 0, 10] πρέπει πρώτα να εκτελεστεί η παραγώγιση και µετά να γίνει η γραφική παράσταση. Παρόµοια προβλήµατα µπορούν να προκύψουν και µε την εντολή Table. Η συνάρτηση Evaluate καθορίζει ποιο κοµµάτι της εντολής θα εκτελεστεί πρώτο. Παραδείγµατα:

Plot[Evaluate[D[x^2, x], x, 0, 5] Table[Evaluate[D[x^2 Sin[x], x], x, 0, 5]

Page 214: Theodorou Math Practikos Odigos

ΠΑΡΑΡΤΗΜΑ

214

FixedPoint: Η εντολή FixedPoint[f, x] εφαρµόζει διαδοχικά τη συνάρτηση f στο προηγούµενο αποτέλεσµα f[x], µέχρι το αποτέλεσµα της εξόδου να µην διαφέρει

από αυτό της εισόδου, π.χ. ο αριθµητικός υπολογισµός του 2 , µε ακρίβεια σαράντα δεκαδικών ψηφίων, επιτυγχάνεται µε την εντολή

FixedPoint[(#+2/#)/2&, N[1, 40]] KroneckerDelta[n1, n2, …]: δίνει τη συνάρτηση Kroneker, που ισούται µε µονάδα όταν όλα τα ni είναι ίσα µεταξύ τους και µηδέν διαφορετικά. IdentityMatrix[n]: ∆ηµιουργεί το µοναδιαίο πίνακα διαστάσεων nn × . Nest: Η εντολή Nest[f, x, n] εφαρµόζει διαδοχικά, και για n φορές, τη συνάρτηση f στο προηγούµενο αποτέλεσµα f[x], και δίνει το τελικό αποτέλεσµα, π.χ. η

προσεγγιστική τιµή του 2 , που επιτυγχάνεται µετά από επτά διαδοχικές επιδράσεις, δίνεται µε την εντολή

Nest [ (# + 2/#)/2&, N[1,40], 7] NestList: Εντολή όµοια µε την List, µόνο που τώρα δηµιουργείται λίστα µε τα ενδιάµεσα αποτελέσµατα, π.χ.

NestList [ (# + 2/#)/2&, N[1,40], 7] Options: Η εντολή Options[Expression] δίνει τις επιλογές που υπάρχουν για το καθορισµό του τρόπου εκτέλεσης της εντολής Expression, π.χ.

Options[NDSolve] Random[ ]: ∆ηµιουργεί τυχαίους πραγµατικούς αριθµούς οµοιόµορφα κατανεµηµένους στο διάστηµα (0,1). Σε γενικευµένη µορφή, η εντολή Random[type, range] επιστρέφει ψευδοτυχαίους αριθµούς του καθορισµένου είδους, κατανεµηµένους στο προκαθορισµένο διάστηµα. Roots: Η εντολή Roots[f[x]==0, x] υπολογίζει τις ρίζες του πολυωνύµου f[x], µιας µεταβλητής.

Page 215: Theodorou Math Practikos Odigos

12.4 Παράδειγµα

215

Sign[x]: δίνει το πρόσηµο του x, ίσο µε +1 όταν x>0, 0 όταν x=0, και –1 όταν x<0. UnitStep[x]: δίνει τη συνάρτηση µοναδιαίου βήµατος, ίση µε 0 για x<0 και 1 για x≥0.

Page 216: Theodorou Math Practikos Odigos

216

Page 217: Theodorou Math Practikos Odigos

12.4 Παράδειγµα

217

ΒΙΒΛΙΟΓΡΑΦΙΑ 1. N. Blachman and C. Williams, Mathematica® a Practical Approach, Prentice

Hall (1999). 2. J. Clynn and T. Gray, The Beginner’s Guide to Mathematica®, Cambridge

University Press (1997). 3. E. Don, Schaum’s Outline: Mathematica®, McGraw-Hill (2001). 4. R. Gass, Mathematica® for Scientists and Engineers: Using Mathematica® to do

Science, Prentice Hall (1998). 5. J. W. Gray, Mastering Mathematica®: Programming Methods and Applications,

Second Edition. Academic Press (1998). 6. R. Meader, Programming in Mathematica®, Addison-Wesley (1997). 7. Κ. Παπαδάκη, Οδηγός για το Mathematica®, Εκδόσεις Τζιόλα, Θεσσαλονίκη

(2000). 8. P.T. Tam, A Physicist’s Guide to Mathematica®, Academic Press. 9. Στ. Τραχανά, Mathematica® και Εφαρµογές, Πανεπιστηµιακές Εκδόσεις

Κρήτης (2001). 10. S. Wolfram, The MATHEMATICA® book, fourth edition, Cambridge University

Press (1999). 11. M. L. Abbel and J. P. Braselton, Differential Equations with Mathematica®,

Academic Press, New York (1993). 12. G. Baumann, Mathematica® in Theoretical Physics, TELOS / Springer-Verlag,

New York (1996). 13. K.R. Coombes, R.L. Lipsman, and J.M. Rosenberg, Multivariable Calculus and

Mathematica®, Springer-Verlag, New York, (1998). 14. H. Varian, Economic and Financial Modeling with Mathematica®, TELOS /

Springer-Verlag, Berlin, (1993). 15. I. Vardi, Computational Recreations in Mathematica®, Addison-Wesley, New

York (1991).

Page 218: Theodorou Math Practikos Odigos

ΒΙΒΛΙΟΓΡΑΦΙΑ

218

16. Στ. Ι. Αυγολούπη, ∆ιαφορικός λογισµός συναρτήσεων µιας µεταβλητής, Θεσσαλονίκη (1999).

17. R.H. Enns and G.C, McGuire, Nonlinear Physics with Mathematica® for Scientists and Engineers, Birkhäuser, Berlin (2001).

18. Χ. Κ. Τερζίδη, Ολοκληρωτικός λογισµός συναρτήσεων µιας µεταβλητής, Θεσσαλονίκη (1988).