Tmhma Mhqanikwn Mousikhc Teqnologiac kai Akoustikhc T.E ...

80

Transcript of Tmhma Mhqanikwn Mousikhc Teqnologiac kai Akoustikhc T.E ...

ii

Τμημα Μηχανικων Μουσικης Τεχνολογιας και Ακουστικης ΤΕ ΣχοληΕφαρμοσμενων Επιστημων Τεχνολογικο Εκπαιδευτικο Ιδρυμα Κρητης

Σημειώσεις στα πλαίσια του μαθήματος

ΤΑ-Π001ndashΕφαρμοσμένα Μαθηματικά

Στοιχεία από τα εφαρμοσμένα μαθηματικά

αξιοποιώντας την Climax στο περιβάλλοντου SDE

Χ Παναγιωτόπουλος

Χειμερινό εξάμηνο ακαδημαϊκού έτους 2018-2019

Περιεχόμενα

Πρόλογος 1

1 Μαθηματική μοντελοποίηση 1

11 Σφάλματα 2

2 Αριθμητική αναζήτηση ριζών και επίλυση εξισώσεων 3

21 Εισαγωγή 3

211 Κριτήρια διακοπής επαναλήψεων 4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης) 5

23 Μέθοδος Newton 6

24 Μέθοδος της τέμνουσας 8

25 Μέθοδος Muller 9

251 Εφαρμογές 11

3 Αριθμητική επίλυση συστημάτων εξισώσεων 15

31 Γραμμικό σύστημα 15

311 Μέθοδοι επίλυσης 16

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων 16

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων 19

32 Μη γραμμικό σύστημα 20

4 Ελαχιστοποίηση και μεγιστοποίηση συνάρτησης 25

41 Μέθοδος διχοτόμησης του διαστήματος 27

42 Μέθοδος της χρυσής τομής 28

43 Μέθοδος Newton 30

5 Παρεμβολή 31

51 Πολυώνυμα Lagrange 32

52 Τύπος του Newton 33

53 Υπολογισμός συντελεστών πολυώνυμων προσέγγισης 34

i

ii ΠΕΡΙΕΧΟΜΕΝΑ

6 Αριθμητική ολοκλήρωση 37

61 Απλοί κανόνες ολοκλήρωσης 37

611 Κανόνας του ορθογωνίου 37

612 Κανόνας του τραπεζίου 38

613 Κανόνας του Simpson 39

614 Κανόνας του Simpson 38 39

62 Σύνθετοι κανόνες ολοκλήρωσης 40

63 Κανόνας ολοκλήρωσης Gauss 41

7 Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώσεων 43

71 Επίλυση προβλήματος αρχικών τιμών με την μέθοδο του Euler 43

711 Παράδειγμα πρώτο 44

712 Σφάλμα μεθόδου και τάξη ακρίβειας 45

72 47

73 Μέθοδοι Runge-Kutta 47

731 Παράδειγμα δεύτερο 48

74 Συστήματα διαφορικών εξισώσεων 1ης τάξης 49

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύστημα πρώτου βαθ-

μού (εξίσωση για το απλό εκκρεμές) 49

76 Υλοποίηση της μεθόδου Euler για συστήματα 50

77 Διάγραμμα φάσης 52

8 Αριθμητική Επίλυση Μερικών Διαφορικών Εξισώσεων 57

81 Πεπερασμένες διαφορές 57

811 Υλοποίηση σε Climax 58

82 Μη-ομοιόμορφος διαμερισμός 58

83 Μέθοδοι πεπερασμένων διαφορών για παραβολικά προβλήματα 58

84 Μέθοδοι πεπερασμένων διαφορών για υπερβολικά προβλήματα 58

9 Η Groovy και το SDE 59

91 Μεταβλητές 60

92 Διατάξεις και πινάκες 60

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

94 Δομές ελέγχου 61

941 Δομή ελέγχου ifelse 62

942 Δομή ελέγχου switch 62

95 Δομές επανάληψης 63

951 Δομή επανάληψης for 63

952 Δομή επανάληψης while 63

953 Δομή επανάληψης σε πεδίο τιμών range 64

ΠΕΡΙΕΧΟΜΕΝΑ iii

96 Συναρτήσεις 64

97 Συναρτησιακά αντικείμενα (closures) 65

98 Είσοδος και έξοδος δεδομένων σε και από αρχεία 65

981 Αποθήκευση δεδομένων 66

982 Ανάκτηση δεδομένων 66

99 Αρχεία δέσμης εντολών (scripts) lowast 67

910 Μητρώα και διανύσματαlowast 67

911 Μιγαδικοί αριθμοίlowast

68

912 Διαγράμματα (plotting)lowast 69

913 Αναπαραγωγή ήχουlowast

71

Βιβλιογραφία 73

Πρόλογος

Το παρόν τεύχος γράφτηκε κατά το χειμερινό εξάμηνο του ακαδημαϊκού έτους

2018ndash2019 οπότε και μου είχε ανατεθεί η αυτόνομη διδασκαλία και γενικό-

τερη διεξαγωγή του μαθήματος laquoΤΠΑ-Π001ndashΕφαρμοσμένα Μαθηματικάraquo του

τμήματος Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής της Σχολής Ε-

φαρμοσμένων Επιστημών του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης

Η ευκαιρία αυτή μου δόθηκε στα πλαίσια της δράσης laquoΑπόκτηση Ακαδημαϊκής

Διδακτικής Εμπειρίας σε Νέους Επιστήμονες Κατόχους Διδακτορικούraquo

Σε καμία περίπτωση δεν αποτελεί εκτενές οδηγό ούτε πλήρες εγχειρίδιο

για το ευρύ πεδίο των Εφαρμοσμένων Μαθηματικών Από το πεδίο αυτό έχουν

επιλεχθεί θέματα που κυρίως άπτονται της ενότητας της Αριθμητικής Ανάλυσης

[4] τα οποία και παρουσιάζονται συνοπτικά

Τα υπολογιστικά εργαλεία που χρησιμοποιήθηκαν είναι το περιβάλλον εργα-

σίας SDE και η βιβλιοθήκη Climax αμφότερα ανεπτυγμένα σε γλώσσα Javaμε ταυτόχρονη αξιοποίηση της γλώσσας Groovy Σκοπός μας είναι πέρα από

το να προτείνουμε την χρήση των συγκεκριμένων εργαλείων (Java GroovyClimax SDE) ως μια εναλλακτική για την διδακτική διαδικασία ταυτόχρονα

να πειραματιστούμε και να ελέγξουμε για την καταλληλότητα και προσαρμοστι-

κότητα τους

Η παρούσα μορφή δεν μπορεί να θεωρηθεί ολοκληρωμένη αποτελεί όμως

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

διαμορφώθηκαν ύστερα από σχετικά προβλήματα (κατάληψη συμβάσεις κα)

και καθυστερήσεις κατά την έναρξη του χειμερινού εξαμήνου του 2018ndash2019

στο τμήμα Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής ειδικά αλλά

και του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης γενικότερα

Χ Παναγιωτόπουλος

Ιανουάριος 2019

1

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

Περιεχόμενα

Πρόλογος 1

1 Μαθηματική μοντελοποίηση 1

11 Σφάλματα 2

2 Αριθμητική αναζήτηση ριζών και επίλυση εξισώσεων 3

21 Εισαγωγή 3

211 Κριτήρια διακοπής επαναλήψεων 4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης) 5

23 Μέθοδος Newton 6

24 Μέθοδος της τέμνουσας 8

25 Μέθοδος Muller 9

251 Εφαρμογές 11

3 Αριθμητική επίλυση συστημάτων εξισώσεων 15

31 Γραμμικό σύστημα 15

311 Μέθοδοι επίλυσης 16

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων 16

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων 19

32 Μη γραμμικό σύστημα 20

4 Ελαχιστοποίηση και μεγιστοποίηση συνάρτησης 25

41 Μέθοδος διχοτόμησης του διαστήματος 27

42 Μέθοδος της χρυσής τομής 28

43 Μέθοδος Newton 30

5 Παρεμβολή 31

51 Πολυώνυμα Lagrange 32

52 Τύπος του Newton 33

53 Υπολογισμός συντελεστών πολυώνυμων προσέγγισης 34

i

ii ΠΕΡΙΕΧΟΜΕΝΑ

6 Αριθμητική ολοκλήρωση 37

61 Απλοί κανόνες ολοκλήρωσης 37

611 Κανόνας του ορθογωνίου 37

612 Κανόνας του τραπεζίου 38

613 Κανόνας του Simpson 39

614 Κανόνας του Simpson 38 39

62 Σύνθετοι κανόνες ολοκλήρωσης 40

63 Κανόνας ολοκλήρωσης Gauss 41

7 Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώσεων 43

71 Επίλυση προβλήματος αρχικών τιμών με την μέθοδο του Euler 43

711 Παράδειγμα πρώτο 44

712 Σφάλμα μεθόδου και τάξη ακρίβειας 45

72 47

73 Μέθοδοι Runge-Kutta 47

731 Παράδειγμα δεύτερο 48

74 Συστήματα διαφορικών εξισώσεων 1ης τάξης 49

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύστημα πρώτου βαθ-

μού (εξίσωση για το απλό εκκρεμές) 49

76 Υλοποίηση της μεθόδου Euler για συστήματα 50

77 Διάγραμμα φάσης 52

8 Αριθμητική Επίλυση Μερικών Διαφορικών Εξισώσεων 57

81 Πεπερασμένες διαφορές 57

811 Υλοποίηση σε Climax 58

82 Μη-ομοιόμορφος διαμερισμός 58

83 Μέθοδοι πεπερασμένων διαφορών για παραβολικά προβλήματα 58

84 Μέθοδοι πεπερασμένων διαφορών για υπερβολικά προβλήματα 58

9 Η Groovy και το SDE 59

91 Μεταβλητές 60

92 Διατάξεις και πινάκες 60

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

94 Δομές ελέγχου 61

941 Δομή ελέγχου ifelse 62

942 Δομή ελέγχου switch 62

95 Δομές επανάληψης 63

951 Δομή επανάληψης for 63

952 Δομή επανάληψης while 63

953 Δομή επανάληψης σε πεδίο τιμών range 64

ΠΕΡΙΕΧΟΜΕΝΑ iii

96 Συναρτήσεις 64

97 Συναρτησιακά αντικείμενα (closures) 65

98 Είσοδος και έξοδος δεδομένων σε και από αρχεία 65

981 Αποθήκευση δεδομένων 66

982 Ανάκτηση δεδομένων 66

99 Αρχεία δέσμης εντολών (scripts) lowast 67

910 Μητρώα και διανύσματαlowast 67

911 Μιγαδικοί αριθμοίlowast

68

912 Διαγράμματα (plotting)lowast 69

913 Αναπαραγωγή ήχουlowast

71

Βιβλιογραφία 73

Πρόλογος

Το παρόν τεύχος γράφτηκε κατά το χειμερινό εξάμηνο του ακαδημαϊκού έτους

2018ndash2019 οπότε και μου είχε ανατεθεί η αυτόνομη διδασκαλία και γενικό-

τερη διεξαγωγή του μαθήματος laquoΤΠΑ-Π001ndashΕφαρμοσμένα Μαθηματικάraquo του

τμήματος Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής της Σχολής Ε-

φαρμοσμένων Επιστημών του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης

Η ευκαιρία αυτή μου δόθηκε στα πλαίσια της δράσης laquoΑπόκτηση Ακαδημαϊκής

Διδακτικής Εμπειρίας σε Νέους Επιστήμονες Κατόχους Διδακτορικούraquo

Σε καμία περίπτωση δεν αποτελεί εκτενές οδηγό ούτε πλήρες εγχειρίδιο

για το ευρύ πεδίο των Εφαρμοσμένων Μαθηματικών Από το πεδίο αυτό έχουν

επιλεχθεί θέματα που κυρίως άπτονται της ενότητας της Αριθμητικής Ανάλυσης

[4] τα οποία και παρουσιάζονται συνοπτικά

Τα υπολογιστικά εργαλεία που χρησιμοποιήθηκαν είναι το περιβάλλον εργα-

σίας SDE και η βιβλιοθήκη Climax αμφότερα ανεπτυγμένα σε γλώσσα Javaμε ταυτόχρονη αξιοποίηση της γλώσσας Groovy Σκοπός μας είναι πέρα από

το να προτείνουμε την χρήση των συγκεκριμένων εργαλείων (Java GroovyClimax SDE) ως μια εναλλακτική για την διδακτική διαδικασία ταυτόχρονα

να πειραματιστούμε και να ελέγξουμε για την καταλληλότητα και προσαρμοστι-

κότητα τους

Η παρούσα μορφή δεν μπορεί να θεωρηθεί ολοκληρωμένη αποτελεί όμως

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

διαμορφώθηκαν ύστερα από σχετικά προβλήματα (κατάληψη συμβάσεις κα)

και καθυστερήσεις κατά την έναρξη του χειμερινού εξαμήνου του 2018ndash2019

στο τμήμα Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής ειδικά αλλά

και του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης γενικότερα

Χ Παναγιωτόπουλος

Ιανουάριος 2019

1

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

ii ΠΕΡΙΕΧΟΜΕΝΑ

6 Αριθμητική ολοκλήρωση 37

61 Απλοί κανόνες ολοκλήρωσης 37

611 Κανόνας του ορθογωνίου 37

612 Κανόνας του τραπεζίου 38

613 Κανόνας του Simpson 39

614 Κανόνας του Simpson 38 39

62 Σύνθετοι κανόνες ολοκλήρωσης 40

63 Κανόνας ολοκλήρωσης Gauss 41

7 Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώσεων 43

71 Επίλυση προβλήματος αρχικών τιμών με την μέθοδο του Euler 43

711 Παράδειγμα πρώτο 44

712 Σφάλμα μεθόδου και τάξη ακρίβειας 45

72 47

73 Μέθοδοι Runge-Kutta 47

731 Παράδειγμα δεύτερο 48

74 Συστήματα διαφορικών εξισώσεων 1ης τάξης 49

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύστημα πρώτου βαθ-

μού (εξίσωση για το απλό εκκρεμές) 49

76 Υλοποίηση της μεθόδου Euler για συστήματα 50

77 Διάγραμμα φάσης 52

8 Αριθμητική Επίλυση Μερικών Διαφορικών Εξισώσεων 57

81 Πεπερασμένες διαφορές 57

811 Υλοποίηση σε Climax 58

82 Μη-ομοιόμορφος διαμερισμός 58

83 Μέθοδοι πεπερασμένων διαφορών για παραβολικά προβλήματα 58

84 Μέθοδοι πεπερασμένων διαφορών για υπερβολικά προβλήματα 58

9 Η Groovy και το SDE 59

91 Μεταβλητές 60

92 Διατάξεις και πινάκες 60

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

94 Δομές ελέγχου 61

941 Δομή ελέγχου ifelse 62

942 Δομή ελέγχου switch 62

95 Δομές επανάληψης 63

951 Δομή επανάληψης for 63

952 Δομή επανάληψης while 63

953 Δομή επανάληψης σε πεδίο τιμών range 64

ΠΕΡΙΕΧΟΜΕΝΑ iii

96 Συναρτήσεις 64

97 Συναρτησιακά αντικείμενα (closures) 65

98 Είσοδος και έξοδος δεδομένων σε και από αρχεία 65

981 Αποθήκευση δεδομένων 66

982 Ανάκτηση δεδομένων 66

99 Αρχεία δέσμης εντολών (scripts) lowast 67

910 Μητρώα και διανύσματαlowast 67

911 Μιγαδικοί αριθμοίlowast

68

912 Διαγράμματα (plotting)lowast 69

913 Αναπαραγωγή ήχουlowast

71

Βιβλιογραφία 73

Πρόλογος

Το παρόν τεύχος γράφτηκε κατά το χειμερινό εξάμηνο του ακαδημαϊκού έτους

2018ndash2019 οπότε και μου είχε ανατεθεί η αυτόνομη διδασκαλία και γενικό-

τερη διεξαγωγή του μαθήματος laquoΤΠΑ-Π001ndashΕφαρμοσμένα Μαθηματικάraquo του

τμήματος Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής της Σχολής Ε-

φαρμοσμένων Επιστημών του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης

Η ευκαιρία αυτή μου δόθηκε στα πλαίσια της δράσης laquoΑπόκτηση Ακαδημαϊκής

Διδακτικής Εμπειρίας σε Νέους Επιστήμονες Κατόχους Διδακτορικούraquo

Σε καμία περίπτωση δεν αποτελεί εκτενές οδηγό ούτε πλήρες εγχειρίδιο

για το ευρύ πεδίο των Εφαρμοσμένων Μαθηματικών Από το πεδίο αυτό έχουν

επιλεχθεί θέματα που κυρίως άπτονται της ενότητας της Αριθμητικής Ανάλυσης

[4] τα οποία και παρουσιάζονται συνοπτικά

Τα υπολογιστικά εργαλεία που χρησιμοποιήθηκαν είναι το περιβάλλον εργα-

σίας SDE και η βιβλιοθήκη Climax αμφότερα ανεπτυγμένα σε γλώσσα Javaμε ταυτόχρονη αξιοποίηση της γλώσσας Groovy Σκοπός μας είναι πέρα από

το να προτείνουμε την χρήση των συγκεκριμένων εργαλείων (Java GroovyClimax SDE) ως μια εναλλακτική για την διδακτική διαδικασία ταυτόχρονα

να πειραματιστούμε και να ελέγξουμε για την καταλληλότητα και προσαρμοστι-

κότητα τους

Η παρούσα μορφή δεν μπορεί να θεωρηθεί ολοκληρωμένη αποτελεί όμως

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

διαμορφώθηκαν ύστερα από σχετικά προβλήματα (κατάληψη συμβάσεις κα)

και καθυστερήσεις κατά την έναρξη του χειμερινού εξαμήνου του 2018ndash2019

στο τμήμα Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής ειδικά αλλά

και του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης γενικότερα

Χ Παναγιωτόπουλος

Ιανουάριος 2019

1

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

ΠΕΡΙΕΧΟΜΕΝΑ iii

96 Συναρτήσεις 64

97 Συναρτησιακά αντικείμενα (closures) 65

98 Είσοδος και έξοδος δεδομένων σε και από αρχεία 65

981 Αποθήκευση δεδομένων 66

982 Ανάκτηση δεδομένων 66

99 Αρχεία δέσμης εντολών (scripts) lowast 67

910 Μητρώα και διανύσματαlowast 67

911 Μιγαδικοί αριθμοίlowast

68

912 Διαγράμματα (plotting)lowast 69

913 Αναπαραγωγή ήχουlowast

71

Βιβλιογραφία 73

Πρόλογος

Το παρόν τεύχος γράφτηκε κατά το χειμερινό εξάμηνο του ακαδημαϊκού έτους

2018ndash2019 οπότε και μου είχε ανατεθεί η αυτόνομη διδασκαλία και γενικό-

τερη διεξαγωγή του μαθήματος laquoΤΠΑ-Π001ndashΕφαρμοσμένα Μαθηματικάraquo του

τμήματος Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής της Σχολής Ε-

φαρμοσμένων Επιστημών του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης

Η ευκαιρία αυτή μου δόθηκε στα πλαίσια της δράσης laquoΑπόκτηση Ακαδημαϊκής

Διδακτικής Εμπειρίας σε Νέους Επιστήμονες Κατόχους Διδακτορικούraquo

Σε καμία περίπτωση δεν αποτελεί εκτενές οδηγό ούτε πλήρες εγχειρίδιο

για το ευρύ πεδίο των Εφαρμοσμένων Μαθηματικών Από το πεδίο αυτό έχουν

επιλεχθεί θέματα που κυρίως άπτονται της ενότητας της Αριθμητικής Ανάλυσης

[4] τα οποία και παρουσιάζονται συνοπτικά

Τα υπολογιστικά εργαλεία που χρησιμοποιήθηκαν είναι το περιβάλλον εργα-

σίας SDE και η βιβλιοθήκη Climax αμφότερα ανεπτυγμένα σε γλώσσα Javaμε ταυτόχρονη αξιοποίηση της γλώσσας Groovy Σκοπός μας είναι πέρα από

το να προτείνουμε την χρήση των συγκεκριμένων εργαλείων (Java GroovyClimax SDE) ως μια εναλλακτική για την διδακτική διαδικασία ταυτόχρονα

να πειραματιστούμε και να ελέγξουμε για την καταλληλότητα και προσαρμοστι-

κότητα τους

Η παρούσα μορφή δεν μπορεί να θεωρηθεί ολοκληρωμένη αποτελεί όμως

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

διαμορφώθηκαν ύστερα από σχετικά προβλήματα (κατάληψη συμβάσεις κα)

και καθυστερήσεις κατά την έναρξη του χειμερινού εξαμήνου του 2018ndash2019

στο τμήμα Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής ειδικά αλλά

και του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης γενικότερα

Χ Παναγιωτόπουλος

Ιανουάριος 2019

1

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

Πρόλογος

Το παρόν τεύχος γράφτηκε κατά το χειμερινό εξάμηνο του ακαδημαϊκού έτους

2018ndash2019 οπότε και μου είχε ανατεθεί η αυτόνομη διδασκαλία και γενικό-

τερη διεξαγωγή του μαθήματος laquoΤΠΑ-Π001ndashΕφαρμοσμένα Μαθηματικάraquo του

τμήματος Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής της Σχολής Ε-

φαρμοσμένων Επιστημών του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης

Η ευκαιρία αυτή μου δόθηκε στα πλαίσια της δράσης laquoΑπόκτηση Ακαδημαϊκής

Διδακτικής Εμπειρίας σε Νέους Επιστήμονες Κατόχους Διδακτορικούraquo

Σε καμία περίπτωση δεν αποτελεί εκτενές οδηγό ούτε πλήρες εγχειρίδιο

για το ευρύ πεδίο των Εφαρμοσμένων Μαθηματικών Από το πεδίο αυτό έχουν

επιλεχθεί θέματα που κυρίως άπτονται της ενότητας της Αριθμητικής Ανάλυσης

[4] τα οποία και παρουσιάζονται συνοπτικά

Τα υπολογιστικά εργαλεία που χρησιμοποιήθηκαν είναι το περιβάλλον εργα-

σίας SDE και η βιβλιοθήκη Climax αμφότερα ανεπτυγμένα σε γλώσσα Javaμε ταυτόχρονη αξιοποίηση της γλώσσας Groovy Σκοπός μας είναι πέρα από

το να προτείνουμε την χρήση των συγκεκριμένων εργαλείων (Java GroovyClimax SDE) ως μια εναλλακτική για την διδακτική διαδικασία ταυτόχρονα

να πειραματιστούμε και να ελέγξουμε για την καταλληλότητα και προσαρμοστι-

κότητα τους

Η παρούσα μορφή δεν μπορεί να θεωρηθεί ολοκληρωμένη αποτελεί όμως

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

διαμορφώθηκαν ύστερα από σχετικά προβλήματα (κατάληψη συμβάσεις κα)

και καθυστερήσεις κατά την έναρξη του χειμερινού εξαμήνου του 2018ndash2019

στο τμήμα Μηχανικών Μουσικής Τεχνολογίας και Ακουστικής ειδικά αλλά

και του Τεχνολογικού Εκπαιδευτικού Ιδρύματος Κρήτης γενικότερα

Χ Παναγιωτόπουλος

Ιανουάριος 2019

1

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

2

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

Κεφάλαιο 1

Μαθηματική μοντελοποίηση

Τις τελευταίες δεκαετίες με τη ραγδαία ανάπτυξη των ηλεκτρονικών υπολο-

γιστών η συστηματική αξιοποίηση των εφαρμοσμένων μαθηματικών και των

αριθμητικών μεθόδων έχει λάβει εξέχουσα θέση στην διαδικασία επίλυσης προ-

βλημάτων επιστημονικών εφαρμογών[1]

Για να περιγράψει κανείς κάποιο φυσικό φαινόμενο υιοθετεί ή και ορίζει κά-

ποιο κατάλληλο μαθηματικό μοντέλο Το μαθηματικό αυτό μοντέλο συνήθως

αποτελείται από τις γνωστές και άγνωστες μεταβλητές τις σταθερές παραμέ-

τρους και τις μαθηματικές σχέσεις που τις συνδέουν Τις περισσότερες φορές

οι εξισώσεις που περιγράφουν το μαθηματικό μοντέλο είναι τέτοιας πολυπλοκό-

τητας που είναι πολύ δύσκολο ή και ακατόρθωτο να βρεθεί μια αναλυτική λύση

για αυτές

Το πιο πάνω μαθηματικό μοντέλο τις περισσότερες φορές προσεγγίζεται

από ένα αριθμητικό μοντέλο η αριθμητική λύση του οποίου επιτυγχάνεται α-

πό διαδικασίες που αποτελούνται από πεπερασμένη σειρά ενεργειών αυστηρά

καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο που στοχεύουν στην

επίλυση ενός προβλήματος γνωστές ως αλγόριθμοι1

Είναι φανερό ότι η πιο πάνω διαδικασία αντικαταστάσεων από το φυσικό

μοντέλο στο μαθηματικό από το μαθηματικό στο αριθμητικό και τέλος η επί-

λυση του αριθμητικού αυτού μοντέλου εισάγει κάποια σφάλματα στα οποία θα

αναφερθούμε συνοπτικά σε αυτό το κεφάλαιο

1Βλέπε και στην httpselwikipediaorgwiki στο αντίστοιχο λήμμα (Αλγό-

ριθμος)

1

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

11 Σφάλματα

Η έννοια του σφάλματος στο πεδίο των επιστημονικών υπολογισμών κατέχει

μια σημαντική θέση στην θεωρία και την ανάλυση των αριθμητικών μεθόδων

Το σφάλμα της αντικατάστασης του φυσικού μοντέλου από το μαθηματικό

μοντέλο δεν είναι εύκολο να ποσοτικοποιηθεί αν και θα το καλούμε εδώ lsquoσφάλμα

μοντελοποίησηςrsquo Η αντικατάσταση του μαθηματικού μοντέλου από το αριθ-

μητικό μοντέλο εισάγει το lsquoσφάλμα αποκοπήςrsquo Ως παράδειγμα μπορεί κανείς

να σκεφτεί την αναλυτική μορφή του αναπτύγματος μια συνάρτησης σε σειρά

άπειρου πλήθους για τον αριθμητικό υπολογισμό της οποίας χρησιμοποιούνται

πεπερασμένου αριθμού όροι

Είναι επίσης σύνηθες στους υπολογισμούς μας να αντικαθιστούμε έναν α-

ριθμό με μεγάλο πλήθος δεκαδικών ψηφίων από έναν άλλο με πεπερασμένο

πλήθος δεκαδικών ψηφίων Το σφάλμα που υπεισέρχεται από την προσέγγιση

αυτή ονομάζεται lsquoσφάλμα στρογγυλοποίησης rsquo ΄Οσο αφορά την στρογγυλο-

ποίηση ενός αριθμού με χρήση m δεκαδικών ψηφίων το ψηφίο της m-στης

δεκαδικής θέσης του προσεγγιστικού αριθμού μένει ως έχει ή αυξάνεται κατά

μία μονάδα ανάλογα με το αν το παραλειπόμενο μέρος είναι μικρότερο ή μεγα-

λύτερο από μισή μονάδα της m-οστής δεκαδικής τάξης που διατηρείται ΄Οταν

το παραλειπόμενο μέρος είναι ίσο με τη μισή μονάδα τότε αφήνουμε το ψηφίο

της m-οστής δεκαδικής θέσης όπως είναι αν αυτό είναι άρτιο ή το αυξάνουμε

κατά μια μονάδα αν αυτό είναι περιττό

Η απολυτή διαφορά του αριθμού xlowast που είναι μια προσέγγιση του αριθμού

x θα είναι

|e| = |xlowast minus x|

και καλείται lsquoαπόλυτο σφάλμαrsquo Ο αριθμός αυτός δεν μπορεί να αποδώσει ικα-

νοποιητικά την ποιότητα της προσέγγισης του αριθμού x από τον αριθμό xlowast

καθώς αυτή θα εξαρτάται από το μέγεθος του αριθμού x Για το λόγο αυτό

χρησιμοποιούμε το lsquoαπόλυτο σχετικό σφάλμαrsquo που είναι

|e||x|

η προσεγγιστικά

|e||xlowast|

Τέλος στην πράξη πολλές φορές χρησιμοποιούμε το lsquoποσοστιαίο σφάλμαrsquo το

οποίο θα συναντάμε καμιά φορά και σαν lsquoεπί της εκατό σφάλμαrsquo ως

100|e||x|

2

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

Κεφάλαιο 2

Αριθμητική αναζήτηση

ριζών και επίλυση

εξισώσεων

21 Εισαγωγή

΄Ενα απο τα σημαντικότερα προβλήματα που συναντά κανείς είναι αυτό της

επίλυσης κάποιας εξίσωσης της μορφής

f(x) = 0 (21)

με άλλα λόγια τον υπολογισμό των τιμών της μεταβλητής x για τις οποίες μη-

δενίζεται η συνάρτηση f Οι τιμές αυτές της μεταβλητής x ονομάζονται και

ρίζες της εξίσωσης (21) ΄Οταν η μοναδική ανεξάρτητη μεταβλητή είναι η x α-

ναφερόμαστε σε ένα μονοδιάστατο πρόβλημα ΄Εχοντας περισσότερες της μιας

ανεξάρτητες μεταβλητές x τότε παραπάνω της μιας εξίσωσης μπορούν να ικα-

νοποιούνται ταυτόχρονα και θα έχουμε ένα πολυδιάστατο πρόβλημα Αν οι ανε-

ξάρτητες μεταβλητές είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn)θα μπορεί να ικανοποιεί έως και n εξισώσεις f = (f1 f2 fn) του ορίζοντας

ένα n-διαστατο πρόβλημα το οποίο και θα γράφεται ως

f(x) = 0 (22)

Η εξ (22) ουσιαστικά αφορά ένα σύστημα n εξισώσεων με n άγνωστους τις

συντεταγμένες του διανύσματος x Στο παρόν κεφάλαιο θα μας απασχολήσει

η επίλυση της εξίσωσης (21) Οι εξισώσεις f που μελετάμε μπορεί να είναι

πολυωνυμικές (αλγεβρικές) της μορφής

f(x) = aνxν + aνminus1x

νminus1 + + a1x+ +a0 (23)

3

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

ή υπερβατικές όταν δηλαδή η άγνωστη μεταβλητή x θα βρισκεται μέσα σε

τριγωνομετρική λογαριθμική εκθετική κτλ συνάρτηση οπότε και θα έχει

μια μορφή όπως

f(x) = xminus ex2minusx3 + x cos(x) sinhx2 (24)

ή παρόμοια

Στην πλειονότητα των περιπτώσεων που συναντάμε σε πρακτικά προβλή-

ματα η εξ (21) είναι αδύνατο ή πολύ δύσκολο να λυθεί αναλυτικά Για το

λόγο αυτό έχουν αναπτυχθεί οι προσεγγιστικές μέθοδοι εύρεσης της λύσης Η

προσεγγιστική λύση xlowast είναι ένας αριθμός που μόνο προσεγγιστικά ικανοποιεί

την εξ (21) δηλαδή ισχύει

|f(xlowast)| = ε

με το ε ένα πολύ μικρό αριθμό κοντά στο μηδέν

΄Ενα πολύ βασικό στοιχείο όλων των προσεγγιστικών μεθόδων είναι η α-

παίτηση να γνωρίζουμε ένα διάστημα στο οποίο θα βρίσκεται τουλάχιστον μια

ρίζα της εξίσωσης ή ένα σημείο έναρξης xinit το οποίο υποτίθεται να είναι lsquoκο-

ντάrsquo σε σημείο που είναι ρίζα της εξίσωσης Για να βρούμε τέτοια διαστήματα

σημείων ή κάποια σημεία εκκίνησης βοηθάει συχνά το διάγραμμα της γνωστής

και δεδομένης συνάρτησης στη μεταβλητή x Η επιλογή του διαστήματος ή

του σημείου εκκίνησης παίζει σημαντικό ρόλο για τη σύγκλιση των μεθόδων

στη σωστή ακριβή τιμή της ρίζας της εξίσωσης

211 Κριτήρια διακοπής επαναλήψεων

Οι προσεγγιστικές μέθοδοι που περιγράφουμε εδώ για την εύρεση των ριζών

μιας εξίσωσης αποτελούν μια επαναληπτική διαδικασία η οποία και θα πρέπει

να εκτελεί πεπερασμένο αριθμό κύκλων επανάληψης Για τη περίπτωση του

μονοδιάστατου προβλήματος της ελ (21) τα κυριότερα κριτήρια παύσης της

διαδικασίας επαναλήψεων δίνονται πιο κάτω Σε όλα τα κριτήρια θα πρέπει να

ορίσουμε ένα μικρό αριθμό ε που θα είναι η ανοχή σφάλματος (tolerance) Ο

δείκτης i δείχνει το τρέχον βήμα επανάληψης

bull |xi minus ximinus1| lt ε

bull |f(xi)| lt ε

bull |ximinusximinus1|xi

lt ε με xi 6= 0

4

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

22 Μέθοδος μέσου σημείου (ή διχοτόμησης)

Η μέθοδος του μέσου σημείου η μέθοδος διχοτόμησης (bisection) βασίζεται

στο θεώρημα Bolzano της μέσης τιμής που λέει ότι αν μια συνάρτηση f μεπεδίο ορισμού το [a b] είναι συνεχής σε αυτό και ισχύει f(a)f(b) lt 0 τότευπάρχει ένα τουλάχιστον σημείο μηδενισμού της f σε αυτό το διάστημα Αν

η ρίζα αυτή είναι απλή τότε ο προσδιορισμός της ρίζας μπορεί να γίνει με τον

αλγόριθμο της μεθόδου διχοτόμησης (Αλγόριθμος 121-1 στην αναφορά [5])

Αλγόριθμος Μέθοδος μέσου σημείου (διχοτόμησης)

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε

bull Αρχικοποίηση

΄Ορισε [a1 b1] sub [a b] με f(a1)f(b1) lt 0 θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f(ai)f(xi) lt 0 θέσε bi+1 = pi ai+1 = aiαλλιώς θέσε ai+1 = xi bi+1 = bi

3 Αν (bi minus ai)2 gt ε θέσε i = i+ 1 μετάβαση στο βήμα 1

4 Παύση με xlowast = xi = (bi+1 + ai+1)2

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 4x2 minus 10 = 0 (25)

στο διάστημα [1 2] (βλέπε Παράδειγμα 121-1 και Πρόγραμμα 121-1 στην [5])

1 a=1 b=22 a1=a b1=b3 Nmax=200 eps=10eminus64 f=xlowastlowast3+4lowastxlowastlowast2minus105 s o l =[ ]6 converge=fa l se7 i t e r=18 while ( i t e rlt=Nmax ampamp converge )

5

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

9 x=(a1+b1 ) 2 010 fx=f (x )11 s o l add (x )12 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )13 i f ( abs ( fx )lteps ) 14 converge=true15 else 16 i f ( fx lowast f ( a )gt0)a1=x else b1=x17 18 i t e r++19 20

21 thePlot c l e a r ( )22 pf=new p l o t f un c t i on ( s o l )23 thePlot addFunction ( pf )24 thePlot setMarker ( true )25 thePlot show ( )

23 Μέθοδος Newton

Η μέθοδος Newton είναι γνωστή και ως μέθοδος Newton-Raphson Η μέθοδος

θα μπορούσε να παρουσιαστεί με χρήση του αναπτύγματος Taylor ΄Εστω η fστο διάστημα [a b] με παραγώγους μέχρι και δεύτερης τάξης συνεχείς σε αυτό

το διάστημα τότε έχουμε

f(x) asymp f(ξ) + (xminus ξ)f prime(ξ) +(xminus ξ)2

2f primeprime(ξ)

Υποθέτοντας ότι η τιμή xlowast είναι ρίζα της f τότε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ) +(xlowast minus ξ)2

2f primeprime(ξ)

Θεωρώντας ότι ο αριθμός |xlowastminusξ| είναι πολύ μικρός τότε ο όρος (xminusξ)2 μπορεί

να παραληφθεί και να έχουμε

0 asymp f(ξ) + (xlowast minus ξ)f prime(ξ)

οπότε και λύνοντας ως προς xlowast

xlowast asymp ξ minus f(ξ)

f prime(ξ)(26)

Από την σχέση της εξ (26) μπορεί να προκύψει ο αλγόριθμος της μεθόδου

Newton

6

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

Αλγόριθμος Μέθοδος Newton

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέσουμε i = 1 και x0 = xinit

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = ximinus1 minus f(ximinus1)f prime(ximinus1)

2 Αν |f(xi)| gt ε θέσε i = i+ 1 και ximinus1 = xiμετάβαση στο βήμα 1

3 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 2x2 + 10xminus 20 = 0 (27)

(βλέπε Παράδειγμα 141-1 στην [5])

1 x0=21d2 t o l =10eminus63 Nmax=1004 f= i t lowastlowast3+2lowast i t lowastlowast2+10lowast i t minus205 df=3lowast i t lowastlowast2+4lowast i t +106 s o l =[ ]7 converge=fa l se8 i t e r=09 s o l add ( x0 )

10 fx=f ( x0 ) dfx=df ( x0 )11 p r i n t f (d x= 86f and f(x)= 64e n i t e r x0 fx )12 while ( i t e rlt=Nmax ampamp converge ) 13 i t e r++14 fx=f ( x0 ) dfx=df ( x0 )15 x=x0minusfx dfx16 fx=f (x ) 17 s o l add (x )18 p r i n t f (d x= 86f and f(x)= 64e n i t e r x fx )19 i f ( abs ( fx )ltt o l ) converge=true20 x0=x21 22

23 thePlot c l e a r ( )24 pf=new p l o t f un c t i on ( s o l )

7

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

25 thePlot addFunction ( pf )26 thePlot setMarker ( true )27 thePlot show ( )

24 Μέθοδος της τέμνουσας

΄Ενα μειονέκτημα της μεθόδου Newton είναι η απαίτηση της ύπαρξης της α-

ναλυτικής μορφής της πρώτης παραγώγου της συνάρτησης f(x) δηλαδή την

f prime(x) Η μέθοδος της τέμνουσας ή αλλιώς της χορδής (secant method) μπορεί

να ιδωθεί ως εναλλακτική της μεθόδου Newton όπου η τιμή της παραγώγου

της συνάρτησης στο σημείο ξ προσεγγίζεται από ένα σχήμα πεπερασμένων διά-

φορων

Η βασική επαναληπτική σχέση της μεθόδου μπορεί να γραφτεί ως

xi = ximinus1 minus f(ximinus1)ximinus1 minus ximinus2

f(ximinus1)minus f(ximinus2)(28)

και όπως είναι εμφανές η μέθοδος απαιτεί δυο αρχικά σημεία x0 και x1 τα οποία

πρέπει να είναι κοντά στη ριζά της εξίσωσης

Αλγόριθμος Μέθοδος τέμνουσας

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 και xinit2 επίπεδο

ακρίβειας ε

bull Αρχικοποίηση

Θεσουμε i = 1 και xa = xinit1 και xb = xinit2

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb)

2 Θέσε xi = xb minus fb xbminusxafbminusfa

3 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xiμετάβαση στο βήμα 1

4 Παύση με xlowast = xi

Εδώ δίνεται σε απλό κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = cosxminus x = 0 (29)

(βλέπε Παράδειγμα 142-1 στην [5])

8

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

1 x0=05d2 x1=PI 4 0d3 t o l =10eminus44 Nmax=1005 f=cos ( i t )minus i t 6 converge=fa l se7 i t e r=08 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1 ) )9 while ( i t e rlt=Nmax ampamp converge )

10 i t e r++11 fx=f ( x0 ) fx1=f ( x1 )12 x=x1minusfx1 lowast( x1minusx0 ) ( fx1minusfx )13 fx=f (x ) 14 p r i n t f (d x= 1210f and |x0-x1|= 64e n i t e r x abs ( x0minusx1

) )15 i f ( abs ( x0minusx1 )ltt o l ) converge=true16 x0=x1 x1=x17

25 Μέθοδος Muller

Στις μέχρι τώρα μεθόδους υποθέταμε πως η ανεξάρτητη μεταβλητή x θα εί-

ναι ένας πραγματικός αριθμός όπως άλλωστε και η τιμή της συνάρτησης f(x)Με αυτόν τον τρόπο θα ήταν αδύνατο να λάβουμε τις μιγαδικές ρίζες της ε-

ξίσωσης f(x) ΄Ενα απλό παράδειγμα θα ήταν να προσπαθήσουμε να λύσουμε

με τη μέθοδο της τέμνουσας (όπως παρατίθεται πιο πάνω) για τη συνάρτηση

f(x) = x2 + 1 Θεωρώντας όμως αρχικές τιμές μιγαδικούς αριθμούς η εύρεση

αμφότερων πραγματικών και μιγαδικών ριζών είναι δυνατή Σε αυτή την παρά-

γραφο παρουσιάζουμε μια γενίκευση της μεθόδου της τέμνουσας η οποία είναι

δυνατό να εντοπίσει τις μιγαδικές ρίζες της εξίσωσης ακόμα και αν ξεκινήσουμε

από πραγματικές αρχικές τιμές Η μέθοδος είναι γνωστή ως μέθοδος Mul-ler και διαφοροποιείται από την προηγούμενη καθώς αντί της κατασκευής μιας

γραμμής που περνάει από δύο σημεία κάνει χρήση μιας παράβολης που περνάει

από τρία σημεία Ως επακόλουθο η μέθοδος απαιτεί τρία αρχικά σημεία Η

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

xi = ximinus1 minus2f(ximinus1)

w plusmnradicw2 minus 4f(ximinus1)f [ximinus1 ximinus2 ximinus3]

(210)

στην πιο πάνω σχέση το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομα-

στής να έχει το μεγαλύτερο μέτρο Για τον όρο f [ximinus1 ximinus2 ximinus3] γνωστό ως

9

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73

διαιρεμένη διαφορά (divided differences1) βλέπε στη βιβλιογραφία [5] Στην αλ-

γοριθμική μορφή της μεθόδου θα δώσουμε μια ίσως πιο κατάλληλη μορφή για

εφαρμογή σε υπολογιστή που μπορεί να συναντήσει κάνεις στη βιβλιογραφία

[6]

Αλγόριθμος Μέθοδος Muller

bull Είσοδος Συνάρτηση f(x) αρχική τιμή xinit1 xinit2 και xinit3 επίπεδο ακρίβειας ε

bull Αρχικοποίηση

Θέτουμε i = 1 και xa = xinit1 xb = xinit2 και xc = xinit3

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε fa = f(xa) fb = f(xb) fc = f(xc)

2 Θέσε q = xcminusxbxbminusxa

3 Θέσε A = qfc minus q(q + 1)fb + q2fa

4 Θέσε B = (2q + 1)fc minus (1 + q)2fb + q2fa

5 Θέσε C = (1 + q)fc

6 Θέσε xi = xc minus (xc minus xb)[

2CBplusmnradicB2minus4AC

]

7 Αν |f(xi)| gt εθέσε i = i+ 1 και xa = xb xb = xc και xc = xiμετάβαση στο βήμα 1

8 Παύση με xlowast = xi

Ξανά εδώ το πρόσημο από το plusmn επιλέγεται έτσι ώστε ο παρανομαστής να

έχει το μεγαλύτερο μέτρο

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση της εξίσωσης

f(x) = x3 + 5x2 + 9x+ 45 = 0 (211)

Το οποίο παράδειγμα έχουμε πάρει από τον επίσημο ιστότοπο2της IMSL For-

tran Numerical Math Library για να γίνει έλεγχος του αλγόριθμου

1httpsenwikipediaorgwikiDivided_differences2httpsdocsroguewavecomimslfortran60mathdefaulthtm

turl=zanlyhtm

10

1 x0=new Complex (10 1 d 0 0 d) x1=new Complex (11 1 d 0 0 d)2 x2=new Complex (12 1 d 0 0 d) t o l =10eminus16 Nmax=1003

4 c2=new Complex ( 2 0 d 0 0 d) c4=new Complex ( 4 0 d 0 0 d)5 c5=new Complex ( 5 0 d 0 0 d) c9=new Complex ( 9 0 d 0 0 d)6 c45=new Complex (45 0 d 0 0 d)7

8 r r =[ ]9 f=

10 fun=( i t pow(3)+c5lowast i t pow(2)+c9lowast i t+c45 )11 for ( i in 0lt r r s i z e ( ) ) fun=( i tminusr r [ i ] )12 return fun13 14

15 converge=fa l se i t e r =0 fx=f ( x2 )16 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )17 while ( i t e rlt=Nmax ampamp converge ) 18 i t e r++fx0=f ( x0 ) fx1=f ( x1 ) fx2=f ( x2 )19

20 q=(x2minusx1 ) ( x1minusx0 )21 A=qlowast fx2minusqlowast( c1+q) lowast fx1+qlowastqlowast fx022 B=(c2lowastq+c1 ) lowast fx2minus(c1+q) lowast( c1+q) lowast fx1+qlowastqlowast fx023 C=(c1+q) lowast fx224 denom=Bminus(BlowastBminusc4lowastAlowastC) sq r t ( )25 i f ( denom abs ( )lt (B+(BlowastBminusc4lowastAlowastC) sq r t ( ) ) abs ( ) )denom=B+(BlowastBminus

c4lowastAlowastC) sq r t ( )26 x=x2minus(x2minusx1 ) lowast c2lowastCdenom27

28 fx=f (x ) acr=fx abs ( )29 p r i n t f (d x= (86f86f) and f(x)= (64e64e) accuracy

=64en i t e r x0 re ( ) x0 im ( ) fx re ( ) fx im ( ) fx abs ( ) )30 i f ( fx abs ( )ltt o l ) converge=true31 x0=x1 x1=x2 x2=x32

251 Εφαρμογές

Εύρεση ριζών χαρακτηριστικής εξίσωσης καμπτικών ταλαντώ-

σεων δοκού παραδοχών Euler-Bernoulli

Η διαφορική εξίσωση που διέπει το πρόβλημα των καμπτικών ταλαντώσεων

είναι

EIpart4u(x t)

partx4+m

part2u(x t)

partt2= 0 (212)

11

Πίνακας 21 Ρίζες r της χαρακτηριστικής εξ (213) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 00471238898 004730041 004730041

2 00785398163 007853205 007853205

3 01099557429 010995608 010995608

4 01413716694 014137165 014137165

Η χαρακτηριστική εξίσωση καμπτικών ταλαντώσεων συνεχούς αμφίπακτης δο-

κού συνολικού μήκους L προκύπτει να είναι η υπερβατική εξίσωση

cos(rL) cosh(rL)minus 1 = 0

Η αναλυτικά προσεγγιστική λύση3της πιο πάνω εξίσωσης δίνει τις ρίζες

rj =

(j +

1

2

L για j = 1 2 infin

Για μήκος δοκού L = 100m να επαληθευθεί το αποτέλεσμα με χρήση κατάλ-

ληλης αριθμητικής μεθόδου

Οι λύσεις των υπολογιστικών μεθόδων που να σημειώσουμε εδώ εξαρτώ-

νται πολύ από την αρχική τιμή εκτίμησης της ρίζας βρίσκονται σε συμφωνία

μεταξύ τους και είναι ίδιες με την ακριβή αναλυτική λύση που δίνεται στη βι-

βλιογραφία (πχ [2] και [3])

Αξίζει εδώ να σημειωθεί ότι οι αντίστοιχες (κυκλικές) ιδιοσυχνότητες [2]

προκύπτουν από τη σχέση

ωj = r2j

radicEI

AL(213)

Σημειώνεται εδώ πως θα μπορούσαμε να γράψουμε τη πιο πάνω σχέση ως

rj =

radicωj

(EI

AL

)minus 12

(214)

οπότε και η χαρακτηριστική εξίσωση (213) να γραφεί σαν σε συνάρτηση της

άγνωστης κυκλικής ιδιοσυχνότητας ω

f(ω) = cos(r(ω)L) cosh(r(ω)L)minus 1 (215)

12

Πίνακας 22 Ρίζες ω της χαρακτηριστικής εξ (215) για L=100m

j αναλυτική προσέγγιση μέθοδος τέμνουσας μέθοδος Muller

1 4822002783 48581956825 48581956825

2 133944521636 133918033112 133918033112

3 262531262788 262532872516 262532872516

4 433980250469 433980131361 433980131361

Οι ρίζες της οποίας δινονται στον πιν 22

Στην γενικότερη θεώρηση σύμφωνα με την οποία η δοκός εδράζεται πάνω

σε σύστημα συνεχών ελατηρίων (Winkler) ελατηριακής σταθεράς k και λαμβά-

νοντας υπόψη την επιρροή στην κάμψη κάποιας αξονικής εσωτερικής δύναμης

N η διαφορική εξίσωση θα έχει την πιο σύνθετη μορφή

EIpart4u(x t)

partx4+m

part2u(x t)

partt2+N

part2u(x t)

part2x+ ku(x t) = 0 (216)

ενώ η χαρακτηριστική εξίσωση θα δίνεται από τη σχέση

f(ω) =

(s1 minus s4)((

exp(s2L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

)minus(

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

))+

(s2 minus s4)((

exp(s3L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s1L)minus exp(s4L))(s3 exp(s3L)minus s4 exp(s4L)

))+

(s3 minus s4)((

exp(s1L)minus exp(s4L))(s2 exp(s2L)minus s4 exp(s4L)

)minus(

exp(s2L)minus exp(s4L))(s1 exp(s1L)minus s4 exp(s4L)

))(217)

3Η λύση αυτή θεωρείται ακριβής για j gt 5 βλ [3]

13

Πίνακας 23 Ρίζες ω της χαρακτηριστικής εξ (217) για συνδυασμούς (N k)

j (0 0) (N 0) (0 k) (N k)

1 485819516 680749014 2171861214 2127962966

2 1339180203 1629553232 2225534033 2276049286

3 2625328648 2958892641 2551545561 2715220961

4 4339801615 4697780319 3407246930 3670425969

5 6482914901 6856222904 4852922747 5175530993

όπου si = si(ω) για i από 1 έως 4 Πιο συγκεκριμένα

s1 =

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(218)

s2 =minus

radicN +

radicN2 + 4EI(ω2mminus k)

2EI(219)

s3 =

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(220)

s4 =minus

radicN minus

radicN2 + 4EI(ω2mminus k)

2EI(221)

Η αριθμητική επίλυση της εξίσωσης (217) για την εύρεση των ριζών της για

L=100m και m=053tnm καθώς και για συνδυασμούς των N=10000kN και

k=250kNm2δίνει τα αποτελέσματα του αντίστοιχου πίνακα

14

Κεφάλαιο 3

Αριθμητική επίλυση

συστημάτων εξισώσεων

΄Οπως είδαμε και στο κεφ 2 ένα πρόβλημα μπορεί να περιγράφεται από Nανεξάρτητες μεταβλητές x = (x1 x2 xn) ΄Εστω ότι στο ίδιο πρόβλημα

υπάρχουν M γραμμικές εξισώσεις επί των μεταβλητών x ορίζεται τότε ένα

σύστημα γραμμικών εξισώσεων ή αλλιώς ένα γραμμικό σύστημα

31 Γραμμικό σύστημα

Η γενική μορφή ενός γραμμικού συστήματος m-εξισώσεων με n-αγνώστους

x1 x2 xn είναι

a11x1 + a12x2 + middot middot middot+ a1jxj + middot middot middot+ a1nxn = b1

ai1x1 + ai2x2 + middot middot middot+ aijxj + middot middot middot+ ainxn = bi (31)

am1x1 + am2x2 + middot middot middot+ amjxj + middot middot middot+ amnxn = bm

Αν bi = 0 για καθε i = 1 2 m τότε το σύστημα λέγεται ομογενές με

προφανή (τετριμμένη) λύση την

x1 = x2 = = xN = 0

ενώ όταν τουλάχιστον ένα bi διάφορο του μηδέν τότε το σύστημα λέγεται μη

ομογενές

15

Με τη βοήθεια των πινάκων το σύστημα μπορεί να γραφτεί ωςa11 a21 a1j a1n

ai1 ai1 aij ain

am1 am1 amj amn

︸ ︷︷ ︸

A

x1

xi

xm

︸ ︷︷ ︸

x

=

b1

bi

bm

︸ ︷︷ ︸

b

ή αλλιώς

Ax = b (32)

όπου A ο πίνακας των συντελεστών των αγνώστων τάξης (mn) και b διάνυσμα

τάξης (m) με A isin Rmtimesn αντίστοιχα A isin Cmtimesn και b isin Rm αντίστοιχα

b isin Cm

311 Μέθοδοι επίλυσης

Εδώ θα περιοριστούμε στην περίπτωση κατά την οποία έχουμε τόσες εξισώσεις

όσος και ο αριθμός των αγνώστων μεταβλητών xi Θα θεωρήσουμε δηλαδή ότι

ο πινάκας A είναι τετραγωνικός m = n Κατά τα γνωστά ένα τέτοιο γραμμικό

μη ομογενές σύστημα της μορφής της εξ (32) θα έχει μια και μόνο λύση

για κάθε b αν ο πίνακας A είναι αντιστρέψιμος δηλαδή αν ισχύει det(A) 6= 0όπου det(A) η ορίζουσα του A που διαφορετικά θα συμβολίζουμε και ως |A|Η επίλυση του προβλήματος με τον κανόνα Cramer1 είναι υπολογιστικά μη

αποδοτικές και για το λόγο αυτό έχουν αναπτυχθεί μέθοδοι υπολογισμού με

λιγότερο απαιτούμενο υπολογιστικό κόστος

Βασικός διαχωρισμός των υπολογιστικών μεθόδων επίλυσης είναι αυτός

που τις κατατάσσει στις

bull άμεσες (direct)

bull έμμεσες ή επαναληπτικές (iterative)

312 ΄Αμεσοι μέθοδοι επίλυσης γραμμικών συστημάτων

Οι άμεσες μέθοδοι οδηγούν στη λύση ύστερα από πεπερασμένο αριθμό βημά-

των Ενώ θεωρητικά δίνουν την ακριβή λύση του προβλήματος δεν αγνοούμε

ότι λόγω σφαλμάτων στρογγυλοποίησης ενδέχεται και είναι αναμενόμενο να

1httpsenwikipediaorgwikiCramerrsquos_rule

16

υπάρχουν διαφορές Επιπλέον ένα γραμμικό σύστημα μπορεί να περιεχέι συ-

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

μητρώο (ill-conditioned matrix) σε αυτή την περίπτωση μπορεί να οδηγηθούμε

σε αστάθεια της λύσης

Μέθοδος απαλοιφής Gauss

Η μέθοδος απαλοιφής του Gauss χωρίς διάταξη (pivoting) παρουσιάζεται εδώ

επιλύοντας το πιο κάτω πρόβλημα (βλέπε Παράδειγμα 222-1 στην [5])

΄Εστω το σύστημα

2x1 + 2x2 + 4x3 = 6

minusx1 + 2x2 minus 3x3 = 3

x1 + 2x2 minus x3 = 5

να λυθεί με τη μέθοδο GaussΣτην αναφορά [5] μπορεί να αναζητηθεί και η αντίστοιχη θεωρία καθώς

και μια πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί

μπορεί κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimesn

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5

6 A[ 0 0 ]=2 0 A[ 0 1 ]=2 0 A[ 0 2 ]=4 0 b [ 0 0 ]=6 07 A[1 0 ]= minus1 0 A[ 1 1 ]=2 0 A[1 2 ]= minus3 0 b [ 1 0 ]=3 08 A[ 2 0 ]=1 0 A[ 2 1 ]=2 0 A[2 2 ]= minus1 0 b [ 2 0 ]=5 09

10 p r i n t l n (matrix A) A p r i n t ( ) 11 p r i n t l n (vector b) b p r i n t ( )12

13

14 p r i n t l n (Gauss elimination)15 p r i n t l n (----------------------------)16 (0 ltnminus1) each17 s tep=i t18 p r i n t l n (Step +step )19 ( s tep+1ltn) each20 i=i t21 m=A[ i s t ep ] A[ step s tep ]22 p r i n t l n (m+i+_+step+=+m)23 (0 ltn) each24 j=i t

17

25 A[ i j ]=A[ i j ]minusA[ step j ]lowastm26 27 b [ i 0 ]=b [ i 0]minusb [ step 0 ] lowastm28 29 A pr i n t ( ) b p r i n t ( )30 31

32 p r i n t l n (Back substitution)33 p r i n t l n (----------------------------)34 (nminus1 0 ) each35 i=i t36 c=b [ i 0 ]37 ( i ltn) each38 cminus=A[ i i t ]lowast x [ i t 0 ]39 40 x [ i 0 ]= cA[ i i ]41 p r i n t l n (x+( i )+=+x [ i 0 ] )42

43 44 p r i n t l n (n Solution vector x)45 p r i n t l n (----------------------------)46 x p r i n t ( )

Αξίζει να σημειωθεί ότι στον πιο πάνω αλγόριθμο δεν είναι απαραίτητο να

είναι μητρώα οι μεταβλητές A καθώς και b x Θα μπορούσαν να είναι απλές

διατάξεις του τύπου double[n][n] και double[n] αντίστοιχα

Μέθοδος της LU διαμέρισης (decompositionraquo

Με χρήση των πολλαπλασιαστώνσυντελεστών της μεθόδου Gauss μπορούν

να διαμορφωθούν κατάλληλοι πινάκες ένας άνω τριγωνικός L και ένας κάτω

τριγωνικός U τέτοιοι ώστε

A = LU (33)

δηλαδή ο αρχικός πινάκας A να διαμεριστεί σε τριγωνικούς επιμέρους πίνακες

Με τον τρόπο αυτό ορίζεται και η μέθοδος LU διαμέρισης κατάλληλη όταν

έχουμε να λύσουμε συστήματα που έχουν ως πινάκα συντελεστών το ίδιο Aαλλά διαφορετικά δεξιά μέλη b

Μέθοδος Cholesky

Η μέθοδος Cholesky αναφέρεται σε συμμετρικούς πίνακες οι οποίοι μπορούν

να διαμεριστούν με χρήση ενός και μόνο τριγωνικού πίνακα L ως

A = LLT (34)

18

όπου LT ο ανάστροφος πίνακας του L

313 ΄Εμμεσοι μέθοδοι επίλυσης γραμμικών συστημά-

των

Μέθοδος Jacobi

Η μέθοδος απαλοιφής του Jacobi παρουσιάζεται εδώ επιλύοντας το πιο κάτω

πρόβλημα (βλέπε Παράδειγμα 232-1 στην [5])

΄Εστω το σύστημα

x1 minus 2x2 + 3x3 = minus1

minus3x1 + 9x2 + 1x3 = minus5

x1 minus x2 minus 7x3 = 15

να λυθεί με τη μέθοδο Jacobi

Στην αναφορά [5] μπορεί να αναζητηθεί η αντίστοιχη θεωρία καθώς και μια

πλήρης περιγραφή Με χρήση του εκπαιδευτικού κώδικα που ακολουθεί μπορεί

κανείς να λύσει οποιοδήποτε κατάλληλο σύστημα εξισώσεων τάξης ntimes n

1 n=32 A=new Matrix (n n)3 b=new Matrix (n 1 )4 x=new Matrix (n 1 )5 xp=new Matrix (n 1 )6

7 A s e t ( 0 0 5 0 ) A s e t (0 1 minus20) A s e t ( 0 2 3 0 ) b s e t (0 0 minus10) x s e t ( 0 0 0 0 )

8 A s e t (1 0 minus30) A s e t ( 1 1 9 0 ) A s e t ( 1 2 1 0 ) b s e t (1 0 minus50) x s e t ( 1 0 0 0 )

9 A s e t ( 2 0 1 0 ) A s e t (2 1 minus10) A s e t (2 2 minus70) b s e t( 2 0 1 5 0 ) x s e t ( 2 0 0 0 )

10

11 p r i n t l n (matrix A) A p r i n t ( ) 12 p r i n t l n (vector b) b p r i n t ( )13 p r i n t l n (initial vector x) x p r i n t ( )14

15 Nmax=5016 t o l =100eminus617 converge=fa l se18 i t e r=019 while ( i t e rlt=Nmax ampamp converge ) 20 i t e r++21 (0 ltn) each

19

22 i=i t23 c=0024 (0 lt i ) eachc+=A[ i i t ]lowast xp [ i t 0 ] 25 ( i +1ltn) eachc+=A[ i i t ]lowast xp [ i t 0 ] 26 x [ i 0 ]=(b [ i 0]minus c ) A[ i i ]27 28 norm=0029 (0 ltn) eachnorm+=sqr t ( ( xp [ i t 0]minusx [ i t 0 ] ) lowastlowast2) xp [ i t 0 ]=x [ i t

0 ] 30 p r i n t l n ( i t e r+ +x [0 0 ]+ +x [1 0 ]+ +x [ 2 0 ] )31 i f (normlt=to l ) converge=true32 33

34 p r i n t l n (n Solution vector x after +i t e r+ iterations )35 p r i n t l n (-------------------------------------------------)36 x p r i n t ( )

Μέθοδος Gauss-Seidel

Ο αλγόριθμος Gauss-Seidel προκύπτει αν στον προηγούμενο κώδικα αλλάξουμε

τη γραμμή 24 σε

24 (0 lt i ) eachc+=A[ i i t ]lowast x [ i t 0 ]

ο υπόλοιπος κώδικας παραμένει όπως έχει

32 Μη γραμμικό σύστημα

΄Εστω σύστημα μη γραμμικών εξισώσεων του οποίου οι ανεξάρτητες μεταβλητές

είναι n στον αριθμό τότε το διάνυσμα x = (x1 x2 xn) και το οποίο θα

ικανοποιεί n εξισώσεις f = (f1 f2 fn)

f1(x1 x2 xn) = 0

f2(x1 x2 xn) = 0

fn(x1 x2 xn) = 0

ενώ σε συμπτυγμένη μορφή γραφουμε

f(x) = 0 (35)

20

Αναζητούμε λοιπόν μια τιμή για το διάνυσμα x έστω η xlowast = [xlowast1 xlowast2 x

lowastn]T

για την οποία θα ισχύει

f(xlowast) asymp 0 (36)

Μέθοδος Newton

Σε αναλογία με την ενότητα 23 εδώ θα είναι

xlowast = ξ minus Jminus1(ξ)f(ξ) (37)

με Jminus1 το αντίστροφο του Ιακωβιανού μητρώου (Jacobian)

J(x) =

partf1(x)partx1

partf1(x)partx2

partf1(x)partxn

partf2(x)partx1

partf2(x)partx2

partf2(x)partxn

partfn(x)partx1

partfn(x)partx2

partfn(x)partxn

καθώς η εύρεση ενός αντίστροφου μητρώου ιδιαιτέρα όταν η τάξη n είναι με-

γάλη είναι μια ασύμφορη υπολογιστικά ενέργεια είναι προτιμητέο να γράψουμε

ένα πρόβλημα επίλυσης γραμμικού συστήματος (βλ ενότητα 311) Πιο α-

ναλυτικά γράφουμε τη σχέση της εξ (37) σε μορφή επαναλήψεων με δεικτη

k

xk+1 = xk minus Jminus1(xk)f(xk) (38)

θέτουμε

s(xk) = minusJminus1(xk)f(xk) (39)

το οποίο ισοδύναμα αντί με χρήση του αντίστροφου του Ιακωβιανού Jminus1(xk)προκύπτει από την επίλυση του συστήματος

J(xk)s(xk) = minusf(xk) (310)

οπότε και δημιουργούμε το απαραίτητο διάνυσμα s(xk) και μπορούμε να γρά-

ψουμε την εκτίμηση της λύση στο επόμενο βήμα ως

xk+1 = xk + s(xk) (311)

Εδώ δίνεται σε κώδικα GroovyClimax η επίλυση του συστήματος εξισώ-

σεων

f1(x1 x2) = exp(x1) + x2 minus 1 = 0f2(x1 x2) = x21 + x22 minus 4 = 0 (312)

το οποίο μπορεί κανείς να βρει ως Παράδειγμα 244-1 στην [5]

21

1 n=22 x0=new Matrix (n 1 )3 t o l =10eminus124 Nmax=1005

6 f= x minusgt7 fmat=new Matrix (n 1 )8 code to d e f i n e fmat9 x1=x [ 0 0 ] x2=x [ 1 0 ]

10 fmat [0 0 ]= exp ( x1 )+x2minus1011 fmat [1 0 ]= x1lowastx1+x2lowastx2minus4012 return fmat13 14

15 df= x minusgt16 dfmat=new Matrix (n n)17 code to d e f i n e dfmat ( Jacobian )18 x1=x [ 0 0 ] x2=x [ 1 0 ]19 dfmat [0 0 ]= exp ( x1 ) dfmat [ 0 1 ]=1 020 dfmat [ 1 0 ]=2 0lowast x1 dfmat [ 1 1 ]=2 0lowast x221 return dfmat22 23

24 x0 [ 0 0 ]=1 0 x0 [1 0]=minus1725

26 converge=fa l se27 i t e r=028

29 fx=f ( x0 ) dfx=df ( x0 )30 p r i n t f (d x= 86f and f(x)= 64e64e n i t e r x0 [ 0 0 ] x0

[ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )31

32 while ( i t e rlt=Nmax ampamp converge ) 33 i t e r++34 fx=f ( x0 ) dfx=df ( x0 )35 s=dfx i nv e r s e ( ) lowast fx36 x=x0minuss37 fx=f (x ) 38 p r i n t f (d x= 86f 86f and f(x)= 64e 64e n i t e r x0

[ 0 0 ] x0 [ 1 0 ] fx [ 0 0 ] fx [ 1 0 ] )39 i f ( fx norm1 ( )ltt o l ) converge=true40 x0=x41

Ο πιο πάνω κώδικας μπορεί εύκολα να τροποποιηθεί για διαφορετικό αριθμό

εξισώσεων αρα και ανεξάρτητων μεταβλητών καθώς και να χρησιμοποιηθεί

για άλλες συναρτήσεις αρκεί να γωνιάζουμε τις παραγώγους τους ως προς τις

22

ανεξάρτητες μεταβλητές

Μέθοδος Broyden

Η μέθοδος Broyden2για τα προβλήματα συστημάτων μη γραμμικών εξισώσεων

είναι το ανάλογο της μεθόδου της τέμνουσας (βλ ενότητα 24) που είδαμε στα

μονοδιάστατα προβλήματα εύρεσης της ρίζας μιας μη γραμμικής εξίσωσης

2httpsenwikipediaorgwikiBroydenrsquos_method

23

24

Κεφάλαιο 4

Ελαχιστοποίηση και

μεγιστοποίηση συνάρτησης

Η ενότητα αυτή θα μπορούσε να έχει τον πιο περιεκτικό τίτλο της βελτιστοποί-

ησης

Τα προβλήματα ελαχιστοποίησης μπορούν να τεθούν ως [7] lsquoζητούνται οι

τιμές των μεταβλητών απόφασης x που ελαχιστοποιούν την αντικειμενική συ-νάρτηση f(x) κάτω από ένα σύνολο περιορισμών οι οποίοι εκφράζονται ως σχέ-σεις ισότητας ή ανισότηταςrsquo

ελαχιστοποίηση τηςx

f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

ενώ για η μεγιστοποίηση ακολουθεί ακριβώς τον ίδιο ορισμό αν κανείς αλλάξει

τη συνάρτηση f(x) με την αντίθετη της δηλαδή την minusf(x) οπότε και θα

καταλήξει στο ταυτόσημο πρόβλημα

μεγιστοποίηση τηςx

minus f(x)

κάτω από τις συνθήκες

gi(x) le 0 i = 1 m

hj(x) = 0 j = 1 p

Η σχέση των προβλημάτων βελτιστοποίησης με τα αντίστοιχα προβλήματα

εύρεσης ριζών είναι μεγάλη και σε πολλές περιπτώσεις το ένα πρόβλημα μπορεί

να τεθεί στη μορφή του άλλου

25

Σχήμα 41 Ακρότατα συνάρτησης σε ένα πεδίο [X1 X2] Τα σημεία AC και

E αποτελούν τοπικά μέγιστα Τα σημεία B και F είναι τοπικά ελάχιστα Το

καθολικό μέγιστο βρίσκεται στο σημείο G το οποίο και όντας στο σύνορο του

χωρίου δεν απαιτείται μηδενισμός της παράγωγου της συνάρτησης Το καθο-

λικό ελάχιστο είναι στο σημείο D Στο σημείο E οι παράγωγοι μεγαλύτερης

της πρώτης τάξης θα είναι μηδενικές μια συνθήκη στην οποία πολλοί αλγόριθ-

μοι θα εύρισκαν δυσκολίες Τα σημεία XY και Z εσωκλείουν (bracket) το

ελάχιστο F καθώς Y είναι μικρότερο από αμφότερα τα X και Z

Μια πρώτη κατηγοριοποίηση των προβλημάτων ελαχιστοποίησης (μεγιστο-

ποίησης) είναι αυτή του διαχωρισμού σε αναζήτηση τοπικών ακρότατων και σε

εκείνη της αναζήτησης καθολικών ακρότατων

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

γραμματισμού όταν αμφότερες οι σχέσεις της αντικειμενικής συνάρτησης και

των περιορισμών είναι γραμμικές και σε αυτά του μη γραμμικού προγραμματι-

σμού όταν κάποια από τις σχέσεις είναι μη γραμμική

Σε αυτό το εισαγωγικό κεφάλαιο θα παρουσιάσουμε κάποιες βασικές διαδι-

κασίες και αλγορίθμους βελτιστοποίησης για μονοδιάστατα προβλήματα συναρ-

τήσεων από τον IR στον IR απουσία περιορισμών Τα προβλήματα βελτιστο-

ποίησης με ισοτικούς ή ανισοτικούς περιορισμούς συνήθως αντιμετωπίζονται με

χρήση των πολλαπλασιαστών Lagrange

26

41 Μέθοδος διχοτόμησης του διαστήματος

Αλγόριθμος Μέθοδος διχοτόμησης

bull Είσοδος Συνάρτηση f(x) και [a b] επίπεδο ακρίβειας ε Χρήση

πρώτης παραγώγου f prime(x)

bull Αρχικοποίηση Θέσε i = 1

bull Επαναλήψεις με αυξανόμενο i

1 Θέσε xi = (ai + bi)2

2 Αν f prime(xi) = 0 ή αν |ai minus bi| lt ε πήγαινε στο βήμα 5

3 Αν f prime(xi) gt 0 θέσε bi+1 = xi ai+1 = ai και πήγαινε στο

βήμα 1

4 Αν f prime(xi) lt 0 θέσε ai+1 = xi bi+1 = bi και πήγαινε στο

βήμα 1

5 Παύση με xlowast = xi

Σημειώσεις

΄Αλλα κριτήρια παύσης (σύγκλισης) είναι δυνατό να επιλεχθούν

πχ |f(xi)| lt ε

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της

συνάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (41)

στο διάστημα [0 2]

1 a=0 b=22 a1=a b1=b3 Nmax=304 t o l =10eminus65 f=x minusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 df=x minusgt 4lowastxlowastlowast3minus3lowast14lowastxlowastlowast2+2lowast60lowastxminus707 s o l =[ ]8 converge=fa l se9 i t e r=1

10 while ( i t e rlt=Nmax ampamp converge ) 11 x=(a1+b1 ) 2 012 fx=f (x )

27

13 dfx=df ( x )14 s o l add (x )15 p r i n t f (d x= 128f and f(x)= 128e n i t e r x fx )16 i f ( abs ( dfx )ltt o l | | abs ( a1minusb1 )ltt o l ) 17 converge=true18 19 i f ( dfx lt00)20 a1=x21 else 22 b1=x23 24 i t e r++25 26

27 convergePlot = new PlotFrame ( )28 pf=new p l o t f un c t i on ( s o l )29 convergePlot addFunction ( pf )30 convergePlot setMarker ( true )31 convergePlot show ( )

42 Μέθοδος της χρυσής τομής

Η μέθοδος της χρυσής τομή1αφορά την εύρεση ακρότατων μιας συνάρτησης η

οποία έχει ένα μοναδικό ακρότατο σε κάποιο πεδίο ορισμού Σε αντίθεση από

την περίπτωση εύρεση μιας ρίζας όπου δυο τιμές της συνάρτησης με αντίθετο

πρόσημο ήταν αρκετές για να αναγνωρίσουμε την ύπαρξη ρίζας στο πεδίο αυτό

σε αυτή τη περίπτωση χρειαζόμαστε τρεις τιμές

Το σχηματικό διάγραμμα της μεθόδου στην εικ 42 απεικονίζει ένα βήμα

της μεθόδου Οι τιμές της συνάρτησης f(x) βρίσκονται στον κατακόρυφο

άξονα και στον οριζόντιο έχουμε την ανεξάρτητη μεταβλητή x Η συνάρτηση

έχει υπολογιστεί στα σημεία f1 = f(x1) f2 = f(x2) και f3 = f(x3) Εφόσον

το f2 είναι μικρότερο από τα f1 και f3 είναι φανερό ότι το ελάχιστο υπάρχει

στην περιοχή από x1 στο x3Η επόμενη τιμή της f θα υπολογιστεί σε ένα σημείο στην περιοχή με μεγα-

λύτερο εύρος από τις [x1 x2] και [x2 x3] που είναι η δεύτερη Από το διάγραμμα

φαίνεται ότι αν η τιμής της f στο σημείο είναι η f4a τότε το ελάχιστο θα βρί-

σκεται στην περιοχή [x1 x4] και η νέα τριάδα σημείων θα είναι η (x1 x2 x4)Ωστόσο αν η τιμή της f στο σημείο είναι η f4b τότε το ελάχιστο θα είναι στην

περιοχή [x2 x3] και η νέα τριάδα σημείων θα είναι η (x2 x4 x3)Για τον καθορισμό της θέσης x4 η μέθοδος επιβάλλει το μήκος της περιοχής

[x1 x4] που είναι a+ c και αυτό της περιοχής [x2 x3] μήκους b να είναι ίσα Για

1httpsenwikipediaorgwikiGolden-section_search

28

Σχήμα 42 Διάγραμμα της αναζήτησης με την χρυσή τομή

να ισχύει αυτό θα πρέπει x4 = x1 + (x3 minus x2) Συνεχίζει βέβαια να παραμένει

το ερώτημα για το που θα τοποθετηθεί το σημείο x2 σε σχέση με τα x1 και x3Η απάντηση είναι ότι το x2 θα εντοπίζεται έτσι ώστε αν f(x4) = f4a να ισχύει

η αναλογία

c

a=a

b

ενώ αν f(x4) = f4b να ισχύει η αναλογία

c

bminus c=a

b

απαλείφοντας το c από τις δυο προηγούμενες εξισώσεις θα έχουμε(b

a

)2

minus b

a= 1

φ= baminusminusminusrarr φ2 minus φ = 1

με λύση την

φ =1 +radic

5

2

που είναι ο αριθμός της χρυσής αναλογίας Οπότε η θέση του σημείου x2υπολογίζεται από τη σχέση

x2 =x3 + φx1

1 + φ

29

Ως συνθήκη τερματισμού προτείνεται η εξής παρακάτω

|x3 minus x1| lt ε(|x2|+ |x4|)

Εδώ δίνεται σε απλό κώδικα GroovyClimax η εύρεση του ελάχιστου της συ-

νάρτησης

f(x) = x4 minus 14x3 + 60x2 minus 70x (42)

στο διάστημα [0 2]

1 x1=0 x3=22 phi=(10+ sq r t ( 5 0 ) ) 2 03 Nmax=304 t o l =10eminus125 f=xminusgt xlowastlowast4minus14lowastxlowastlowast3+60lowastxlowastlowast2minus70lowastx6 s o l =[ ]7 converge=fa l se x=(x1+x3 ) 2 08 i t e r=19 while ( i t e rlt=Nmax ampamp converge )

10 x2=(x3+phi lowastx1 ) (1+phi )11 x4=x1+(x3minusx2 )12 f 2=f ( x2 ) f 4=f ( x4 )13 i f ( f2ltf 4 ) x=x2 fx=f2 x3=x4 else x=x4 fx=f4 x1=x2 14 s o l add (x )15 i f ( abs ( x3minusx1 )ltt o l lowast( abs ( x2 )+abs ( x4 ) ) ) 16 converge=true17 18 i t e r++19 20 p r i n t l n (minimum= +fx+ at x= +x)21 convergePlot = new PlotFrame ( )22 pf=new p l o t f un c t i on ( s o l )23 convergePlot addFunction ( pf )24 convergePlot setMarker ( true )25 convergePlot show ( )

43 Μέθοδος Newton

Η μέθοδος Newton που είδαμε και στην ενότητα εύρεσης ριζών εδώ για τον

εντοπισμό ακρότατων βασίζεται στην επαναληπτική σχέση

xi = ximinus1 minusf prime(ximinus1)

f primeprime(ximinus1)

με άλλα λόγια στο παρόν πλαίσιο αναζητά τις ρίζες της πρώτης παραγώγου

f prime(x) της συνάρτησης f(x)

30

Κεφάλαιο 5

Παρεμβολή

Το πρόβλημα της παρεμβολής συνίσταται στην εύρεση της f(x) όταν γνω-

ρίζουμε τιμές της συνάρτησης για κάποιες δεδομένες τιμές του ορίσματος xΤα ζεύγη αυτά των δεδομένων τιμών θα συμβολίζονται ως

(xi f(xi)

)για

i = 1 2 n Τα σημεία xi δεν είναι σε καμιά περίπτωση απαραιτήτως ι-

σαπέχοντα Στο παρόν κεφάλαιο θα θεωρούμε ότι η f(x) είναι μια πολυωνυ-

μική συνάρτηση και η αντίστοιχη παρεμβολή θα αποκαλείται και πολυωνυμική

παρεμβολή

Σύμφωνα με το θεώρημα Weierstrass μια συνεχής συνάρτηση f(x) στο

πεδίο [a b] μπορεί να προσεγγιστεί από ένα πολυώνυμο P (x) με οποιαδήποτε

επιθυμητή ακρίβεια ε Δηλαδή υπάρχει P (x) τέτοιο ώστε

|f(x)minus P (x)| lt εforallx isin [a b] (51)

το παραπάνω θεώρημα βέβαια αν και αναφέρεται στην ύπαρξη του πολυωνύμου

P (x) δεν μας προσδιορίζει τις σχέσεις κατασκευής και υπολογισμού του

Μια τέτοια πρώτη απάντηση μπορούμε να λάβουμε από το πολυώνυμο του

Taylor και αντίστοιχα του Maclaurin (βλ πχ στη Wikipedia1)

f(x) asymp Pn(x) = f(ξ) +f prime(ξ)

1(xminus ξ) +

f primeprime(ξ)

2(xminus ξ)2 + +

f (n)(ξ)

n(xminus ξ)n

όταν το σημείο ξ ανήκει στο πεδίο ορισμού της f Αντίστοιχα όταν ξ = 0

f(x) asymp Pn(x) = f(0) +f prime(0)

1x+

f primeprime(0)

2x2 + +

f (n)(0)

nxn

Είναι σημαντικό να επισημανθεί εδώ ότι η προσέγγιση είναι ακριβής μόνο για

τιμές του x πλησίον του ξ

1httpsenwikipediaorgwikiTaylor_series

31

51 Πολυώνυμα Lagrange

Εστω x0 x1 xn ειναι n+ 1 διαφορετικα σημεια ενος διαστηματος [a b] καιf(x) μια πραγματικη συναρτηση της οποιας ειναι γνωστε οι τιμες f(xi) για καθε

i = 0 1 n Η πολυωνυμικη παερμβολη οριζεται απο ενα πολυωνυμο εστω

Pn βαθμου le n το οποιο διερχεται απο τα σημεια απο τα σημεια (xi f(xi))δηλαδη Pn(xi) = f(xi) Το πολυωνυμο θα δινεται απο τη σχεση

Pn(x) = l0(x)f(x0) + l1(x)f(x1) + + ln(x)f(xn)

=

nsumi=0

li(x)f(xi) (52)

οπου

li(x) =(xminus x0)(xminus x1 (xminus ximinus1)(xminus xi+1) (xminus xn)

(xi minus x0)(xi minus x1 (xi minus ximinus1)(xi minus xi+1) (xi minus xn)

=prod

0lejlenj 6=i

xminus xjxi minus xj

(53)

Για τα πολυώνυμα li(x) ισχύει η σχέση

li(xj) = δij =

1 αν i = j

0 αν i 6= j(54)

΄Εστω τα ζεύγη2δεδομένων που δίνονται στον πίνακα 51 να γίνει η προσέγ-

Πίνακας 51 Δεδομένα για τα ζεύγη σημείων (xf(xi))

x 0 20 40 60 80 100

f(x) 260 486 616 712 748 752

γιση της τιμής της συνάρτησης f(x) στο σημείο xp=55 με χρήση πολυωνύμων

Lagrange3

2Για το αντίστοιχο παράδειγμα σε MatlabOctave httpswwwyoutubecom

watchv=NZfd-EuBYyo3Script at httpseclassteicretegrmodulesdocumentfilephp

TA221climax_fileslagrangepolclimax

32

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus1 should be nlt=x s i z e ( )minus14 xp=555 sm=06 ( 0 n ) each7 i=i t8 pr=19 ( 0 n ) each

10 j=i t11 i f ( j = i ) prlowast=(xpminusx [ j ] ) (x [ i ]minusx [ j ] )12 13 sm+=fx [ i ]lowast pr14 15 fxp=sm16 p r i n t l n (value of f(+xp+) is +fxp )

52 Τύπος του Newton

Το πολυώνυμο προσέγγισης Pn(x) μπορεί να γραφτεί με χρήση των διαιρεμένων

διαφορών [5] ως εξής

Pn(x) = f [x0] + f [x1 x0](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) +

+ f [x0 x1 xn](xminus x0) (xminus xnminus1) (55)

Η σχέση της εξ (55) είναι γνωστή και ως τύπος παρεμβολής του Newton

Εδώ θα γίνει η προσέγγιση για τα ζεύγη του πίνακα 51 με χρήση των

διαιρεμένων διαφορών και του τύπου παρεμβολής του Newton4

1 x=[0 20 40 60 80 100 ]2 fx = [ 2 6 0 4 8 6 6 1 6 7 1 2 7 4 8 7 5 2 ]3 n=x s i z e ( )minus14 xtab =[ ]5 x eachxtab add ( i t ) xtab add ( 0 0 ) 6 d i v d i f = new double [ 2lowastn+1] [n+1]7

8 j=09 for ( i =0 ilt2lowastn+1 i+=2)

10 d i v d i f [ i ] [ 0 ]= fx [ j++]

4Script at httpseclassteicretegrmodulesdocumentfilephpTA221climax_filesdivdifclimax

33

11 12

13 ( 1 n ) each14 k=i t15 ( 0 ( n minus k ) ) each16 i=k+i t lowast217 d i v d i f [ i ] [ k ]=( d i v d i f [ i minus1] [ kminus1]minus d i v d i f [ i +1] [ kminus1]) ( xtab [ iminusk]minus

xtab [ i+k ] )18 19 20 lowast21 lowast p r in t d iv ided d i f f e r e n c e s t ab l e22 (0 lt2lowastn+1) each23 i=i t24 (0 ltn+1) each25 j=i t26 p r i n t f (rdquo86 f rdquo d i v d i f [ i ] [ j ] )27 28 p r i n t l n (rdquo rdquo)29 lowast30

31 xp=5532 pr=1033 sm=d i vd i f [ 0 ] [ 0 ]34 ( 1 n ) each35 prlowast=(xpminusx [ i t minus1])36 sm+=d i v d i f [ i t ] [ i t ]lowast pr37 38 fxp=sm39 p r i n t l n (value of f(+xp+) is +fxp )40

53 Υπολογισμός συντελεστών πολυώνυμων προ-

σέγγισης

Ο πιο άμεσος και εύκολος σχετικά τρόπος ώστε να υπολογίσουμε τους συντε-

λεστές του πολυωνύμου προσέγγισης είναι από την επίλυση ενός αντίστοιχου

γραμμικού συστήματος Αν γράψουμε το πολυώνυμο Pn(x) ως

Pn(x) = a0 + a1x+ a2x2 + anx

n(56)

34

τότε με χρήση των δεδομένων για τα ζεύγη σημείων (xi f(xi)) = (xi Pn(xi))μπορούμε να καταστρώσουμε τις πιο κάτω εξισώσεις

a0 + x0a1 + x20a2 + middot middot middot+ xn0an = f(x0)

a0 + x1a1 + x21a2 + middot middot middot+ xn1an = f(x1)

a0 + xna1 + x2na2 + middot middot middot+ xnnan = f(xn)

Το οποίο σύστημα με τη βοήθεια των πινάκων μπορεί να γραφτεί ως1 x0 x20 xn01 x1 x21 xn1

1 xn x2n xnn

︸ ︷︷ ︸

A

a0a1

an

︸ ︷︷ ︸

x

=

f(x0)f(x1)

f(xn)

︸ ︷︷ ︸

b

από την επίλυση του οποίου μπορούμε να υπολογίσουμε το διάνυσμα x που

θα εμπεριέχει τους συντελεστές a0 a1 an και συνεπώς να καθορίσουμε το

πολυώνυμο Pn της εξ (56)

35

36

Κεφάλαιο 6

Αριθμητική ολοκλήρωση

Η προσεγγιστική αριθμητική τιμή[5] του ορισμένου ολοκληρώματος

I(f) =

int b

af(x) dx (61)

χρησιμοποιείται κυρίως όταν

1 λόγω της πολύπλοκης μορφής του τύπου μιας συνάρτησης είναι δύσκολος

ή ακόμα και αδύνατος ο θεωρητικός υπολογισμός του και

2 δεν είναι γνωστός ο τύπος της συνάρτησης αλλά μόνο οι τιμές της σε

ορισμένα σημεία

61 Απλοί κανόνες ολοκλήρωσης

Οι κανόνες αυτοί αριθμητικής ολοκλήρωσης ονομάζονται και NewtonndashCotesΑνάλογα με τον θεωρούμενο αριθμό σημείων παρεμβολής έχουμε τους παρακά-

τω κανόνες

611 Κανόνας του ορθογωνίου

΄Εστω το ορισμένο ολοκλήρωμα

I(f) =

int b

af(x) dx (62)

όπου η f(x) μια συνεχής συνάρτηση στο [a b] Στη γενικότερη περίπτωση όπου

δεν δίνεται ρητά η αναλυτική μορφή της f(x) θεωρείται ότι θα είναι γνωστές οι

37

τιμές της σε n + 1 διαφορετικά σημεία x0 x1 xn στο [a b] Η παρεμβολή

του Newton θα είναι

f(x) asympPn(x) = f [x0] + f [x0 x1](xminus x0) +

+ f [x0 x1 xn](xminus x0) middot middot middot (xminus xnminus1) (63)

Χρησιμοποιώντας ένα σημείο παρεμβολής έστω το x0 τότε προκύπτει

f(x) asympP0(x) = f [x0] = f(x0) (64)

οπότε

I(f) =

int b

af(x) dx asymp f(x0)

int b

adx = (bminus a)f(x0) (65)

που είναι γνωστό ως ο κανόνας του ορθογωνίου

Ανάλογα με τη θέση x0 διακρίνονται οι εξής περιπτώσεις

bull για x0 = a τότε I(f) =int ba f(x) dx asymp (bminus a)f(a)

bull για x0 = b τότε I(f) =int ba f(x) dx asymp (bminus a)f(b)

bull για x0 = (b+ a)2 τότε I(f) =int ba f(x) dx asymp (bminus a)f

(a+b2

) που είναι

γνωστός ως ο κανόνας του μέσου σημείου

1 Midpoint=f a bminusgt2 h=(bminusa )3 x0=(a+b) 24 return hlowast f ( x0 )5

612 Κανόνας του τραπεζίου

Αν έχουμε δύο σημεία για την παρεμβολή (n = 1) οπότε

f(x) asympP1(x) = f(x0) + f [x0 x1](xminus x0) (66)

θέτοντας x0 = a x1 = b και h = bminus a

I(f) asympint b

aP1(x) dx = =

h

2

(f(a) + f(b)

) (67)

που είναι γνωστό ως ο κανόνας του τραπεζίου

38

1 Trapezo ida l=f a bminusgt2 h=(bminusa )3 x0=a x1=b4 return hlowast( f ( x0 )+f ( x1 ) ) 2 05

613 Κανόνας του Simpson

Αν έχουμε τρία σημεία για την παρεμβολή (n = 2) οπότε

f(x) asymp P2(x) = f(x0) + f [x0 x1](xminus x0)+ f [x0 x1 x2](xminus x0)(xminus x1) (68)

θέτοντας x0 = a x1 = a+b2 x2 = b και h = bminusa

2

I(f) asympint b

aP2(x) dx = =

h

3(f(x0) + 4f(x1) + f(x2)) (69)

που είναι γνωστό ως ο κανόνας του Simpson

1 Simpson=f a bminusgt2 h=(bminusa ) 23 x0=a x1=(a+b) 2 x2=b4 return hlowast( f ( x0 )+4lowast f ( x1 )+f ( x2 ) ) 3 05

614 Κανόνας του Simpson 38

Για τέσσερα σημεία παρεμβολής (n = 3) θέτοντας x0 = a x1 = 2a+b3 x2 =

(a+2b)3 x3 = b και h = bminusa

8

I(f) asympint b

aP3(x) dx = = h (f(x0) + 3f(x1) + 3f(x2) + f(x3)) (610)

που είναι γνωστό ως ο κανόνας των 38 του Simpson

1 Simpson3 8=f a bminusgt2 h=(bminusa ) 83 x0=a x1=(2lowasta+b) 3 x2=(a+2lowastb) 3 x3=b4 return hlowast( f ( x0 )+3lowast f ( x1 )+3lowast f ( x2 )+f ( x3 ) )5

39

Αριθμητικό παράδειγμα

Να υπολογιστεί με τους πιο πάνω κανόνες το ολοκλήρωμαint 12

0

1radic(1 + x2)

dx (611)

και αν δοθεί το απόλυτο λάθος για κάθε ένα από αυτούς

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 p r i n t l n (---------------------------------------)5 p r i n t l n (Rule Integral Approximation Error)6 p r i n t l n (---------------------------------------)7 p r i n t l n Midpoint +Midpoint ( f a b )+ +abs (Midpoint ( f a b )minusIan )8 p r i n t l n Trapezoidal +Trapezo ida l ( f a b )+ +abs ( Trapezo ida l (

f a b )minusIan )9 p r i n t l n Simpson +Simpson ( f a b )+ +abs ( Simpson ( f a b )minusIan )

10 p r i n t l n Simpson 38 +Simpson3 8 ( f a b )+ +abs ( Simpson3 8 ( f a b )minusIan )

11 p r i n t l n (---------------------------------------)

Αν εκτελέσουμε το πιο πάνω σκριπτ στο SDE θα λάβουμε ως έξοδο παρό-

μοια με

---------------------------------------Rule Integral Approximation Error---------------------------------------Midpoint 1028991510855 00130185108550Trapezoidal 09841106397986 003186236020131Simpson 10140312205029 00019417794970688Simpson 38 10152331350974 7398649025975E-4---------------------------------------

62 Σύνθετοι κανόνες ολοκλήρωσης

Για να αυξηθεί η ακρίβεια της αριθμητικής ολοκλήρωσης των απλών κανόνων

θα πρέπει κανείς να Θεωρήσει μεγαλύτερη τάξη παρεμβολής μια κατεύθυνση

η οποία δυσχεραίνει πολύ τη διαδικασία ΄Ενας πολύ πιο απλός και άμεσος

τρόπος είναι ο διαμερισμός του διαστήματος ολοκλήρωσης [a b] σε επιμέρους

υποδιαστήματα ο υπολογισμός του ολοκληρώματος σε κάθε ένα από αυτά τα

40

υποδιαστήματα και η πρόσθεση των τιμών σε κάθε ένα από τα διαστήματα αυτά

μεταξύ τους

Αυτη τη διαδικασία έχουμε γράψει στο παρακάτω σκριπτ

1 f =1 sq r t (1+ i t lowastlowast2) 2 a=00 b=123 Ian=10159734 num=105 s t epwi s e=I fminusgt6 va l =007 ( 1 num) each8 xs=a+( i t minus1)lowast(bminusa ) num xe=xs+(bminusa ) num9 va l+=I f ( f xs xe )

10 11 return va l12 13

14 p r i n t l n (---------------------------------------)15 p r i n t l n (Rule Integral Approximation Error)16 p r i n t l n (---------------------------------------)17 p r i n t l n Midpoint +stepwi s e (Midpoint )+ +abs ( s t epwi s e (

Midpoint )minusIan )18 p r i n t l n Trapezoidal +stepwi s e ( Trapezo ida l )+ +abs ( s t epwi s e (

Trapezo ida l )minusIan )19 p r i n t l n Simpson +stepwi s e ( Simpson )+ +abs ( s t epwi s e ( Simpson )minus

Ian )20 p r i n t l n Simpson 38 +stepwi s e ( Simpson3 8 )+ +abs ( s t epwi s e (

Simpson3 8 )minusIan )21 p r i n t l n (---------------------------------------)

63 Κανόνας ολοκλήρωσης Gauss

Υπό κατασκευή

41

42

Κεφάλαιο 7

Αριθμητική Επίλυση

Συνήθων Διαφορικών

Εξισώσεων

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΕΜ 291Μ236 ndash Αριθμητική Επίλυση Συνήθων Διαφορικών Εξισώ-

σεωνraquo του Εαρινού Εξαμήνου 2014-2015 στο τμήμα Μαθηματικών και Εφαρ-

μοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

71 Επίλυση προβλήματος αρχικών τιμών με την

μέθοδο του Euler

Σκοπός αυτού του εργαστηρίου είναι η παρουσίαση αριθμητικής επίλυσης για

Προβλήματα Αρχικών Τιμών (ΠΑΤ) με την μέθοδο του Euler Το πρόβλημα

των αρχικών τιμών yprime(t) = f(t y) t isin [a b]

y(a) = ya(71)

Το επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler η οποία δίνεται από τον τύπο

yn+1 = yn + hf(tn yn) n = 1 2 N (72)

1httpuserstemuocgr˜tsogkaCoursesAESDE-spring2015indexhtml

43

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Για να υλοποιήσουμε την μέθοδο του Euler στην Climax θα δημιουργή-

σουμε ένα συναρτησιακό αντικείμενο (closure) που θα ονομάσουμε myeulerκαι προαιρετικά θα μπορούσαμε να το αποθηκεύσουμε σε ένα ξεχωριστό αρχεί-

ο πχ το myeulerclimax2 ο κώδικας του οποίου θα είναι όπως παρακάτω3

1 myeuler=a b y0 N fminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N)y [ n]=y [ nminus1]+hlowast f ( a+hlowast(nminus1) y [ nminus1]) as double6 return y7

΄Οπως βλέπουμε τα ορίσματα του συναρτησιακού αντικειμένου είναι το διά-

στημα ορισμού [a b] στο οποίο θα υπολογίσουμε τη λύση η αρχική συνθήκη

y0 ο αριθμός των βημάτων N και τέλος η συνάρτηση (ή και συναρτησιακό α-

ντικείμενο) f Στην γραμμή 2 του κώδικα καθορίζεται το βήμα h στην γραμμή

3 εκχωρούμε μια λίστα (διάταξη) στην μεταβλητή y και ορίζουμε την πρώτη

τιμή ίση με την αρχική τιμή (γραμμή 4) y[0] = y0 στην επαναληπτική δομή

της γραμμής 5 υλοποιείται η σχέση (72) Το συναρτησιακό αντικείμενο τέλος

επιστρέφει στη γραμμή 6 την διάταξη (ArrayList) y που περιέχει τις διακριτές

τιμές της προσεγγιστικής λύσης

711 Παράδειγμα πρώτο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(t) = minusy t isin [0 T ]

y(0) = 10(73)

το οποίο έχει αναλυτική λύση την y(t) = eminust Για να υπολογίσουμε τις

προσεγγίσεις της σχέσης (72) εκτελούμε την πιο κάτω δέσμη εντολών

2Το όνομα του αρχείου καθώς και η κατάληξη καθορίζονται αυθαίρετα3Αξίζει να σημειωθεί εδώ ότι στον παραπάνω κώδικα θα μπορούσε να είχε παραληφθεί η

οδηγία as double σε αυτή όμως την περίπτωση ο προκαθορισμένος τύπος μεταβλητήςθα ήταν ο BigDecimal αντί του πιο αποδοτικού αριθμητικού τύπου double και ως συνέπειαθα ήταν πιθανό να εμφανιστούν αριθμητικά προβλήματα κατά την εκτέλεση

44

1 t0=00 de f i n e i n i t i a l time2 T=20 de f i n e f i n a l time3 y0=10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=tminusgtexp(minust ) exact s o l u t i o n6 f=t yminusgtminusy rhs7 approx=myeuler ( t0 T y0 N f ) approximate s o l u t i o n returned by

myeuler8 h=(Tminust0 ) N as double9 ( 0 N) each p r i n t l n exact ( t0+i t lowasth)+ +approx [ i t ] p r in t

approximation r e s u l t s toge the r with exact s o l u t i o n

Εναλλακτικάθα μπορούσαμε να τρέξουμε την συνάρτηση μας χωρίς να α-

ναθέσουμε τα ορίσματα της σε κάποια μεταβλητή και θα την καλούσαμε όπως

παρακάτω

approx=myeuler(00201016ty-gt-y)

712 Σφάλμα μεθόδου και τάξη ακρίβειας

Υπάρχουν δύο τρόποι για να εξετάσουμε το πόσο καλή είναι η προσεγγιστική

μας λύση Ο πρώτος τρόπος είναι η ποιοτική εξέταση όπου κανείς μπορεί να

παραθέσει τα αποτελέσματα της αναλυτικής λύσης με αυτά της προσεγγιστικής

και να τα συγκρίνει Σε αυτό θα βοηθούσε πολύ η δημιουργία ενός κοινού

διαγράμματος στο πεδίο ορισμούυ Στην περίπτωση της Climax αυτό είναι

εφικτό με το αντικείμενο thePlot που είναι ένα προκαθορισμένο στιγμιότυπο

της κλάσης PlotFrame Οι συναρτήσεις που σχεδιάζονται σε ένα PlotFrameείναι στιγμιότυπα της κλάσης plotfunction

11 thePlot c l e a r ( )12

13 fp=new p l o t f un c t i on (h approx )14 fp setMarker ( true )15 fp setName (Euler 1st order)16 thePlot addFunction ( fp )17

18 fp=new p l o t f un c t i on ( l i n s p a c e (0 Nlowasth N+1) exact as DoubleFunction )19 fp setMarker ( true )20 fp se tMarkerSty le (1 )21 fp setName (Exact solution)22 thePlot addFunction ( fp )23

24 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus

45

Σχήμα 71 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (73) για N = 16

25 thePlot setAutoColor ( true )26 thePlot makeLegend ( )27 thePlot xLabel (t)28 thePlot yLabel (y(t))29 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus30 thePlot show ( )

Το αποτέλεσμα της ομάδας των παραπάνω εντολών είναι το διάγραμμα που

φαίνεται στο Σχήμα 71

Ο δεύτερος τρόπος είναι να ποσοτικοποιήσουμε την ποιότητα της προσέγ-

γισης υπολογίζοντας το σφάλμα της μεθόδου Συνήθως αυτό γίνεται στον

τελικό χρόνο όπου υπολογίζουμε το σφάλμα E ως

E = |yN minus y(tN )|

Αυτό που πρέπει να προσέξουμε είναι ότι η γραφική παράσταση και το σφάλμα

που υπολογίσαμε έγιναν για ένα συγκεκριμένο αριθμό σημείων

46

72 Μέθοδος του Euler δεύτερης τάξης

Στο επόμενο βήμα μας είναι να προσπαθήσουμε να λύσουμε αριθμητικά το

ΠΑΤ (71) με την μέθοδοEuler δεύτερης τάξης η οποία δίνεται από τον

τύπο

yn+1 = yn + h

(f(tn yn) +

h

2f prime(tn yn)

) n = 1 2 N (74)

όπου h = (bminus a)N το βήμα μας και yn η προσέγγιση της λύσης στη χρονική

στιγμή tn όπου tn = t0 + nh

Παρόμοια του myeuler θα δημιουργήσουμε το συναρτησιακό αντικείμενο

myeuler2nd

1 myeuler2nd=a b y0 N f dfminusgt2 h=(bminusa ) N as double3 y= [ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 y [ n]=y [ nminus1]+hlowast( f (xp y [ nminus1])+hlowastdf (xp y [ nminus1]) 2 0 ) as double8 9 return y

10

73 Μέθοδοι Runge-Kutta

Στη μέθοδο Runge-Kutta δεύτερης τάξης (ή αλλιώς βελτιωμένη Euler μέθοδο)

σε κάθε βήμα υπολογίζεται πρώτα μια βοηθητική τιμή

1 myrungekutta2nd=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xp=a+hlowast(nminus1)7 ya=y [ nminus1]+hlowast f ( xp y [ nminus1]) as double8 y [ n]=y [ nminus1]+h2lowast( f ( xp y [ nminus1])+f (xp ya ) ) as double9

10 return y11

47

Τελος στη μεθοδο Runge-Kutta τέταρτης τάξης σε κάθε βήμα

1 myrungekutta4th=a b y0 N fminusgt2 h=(bminusa ) N as double3 y=[ ] ( 0 N) eachy add ( 0 0 ) 4 y [0 ]= y0 as double5 for (n in 1 N) 6 xn=a+hlowastn7 xp=a+hlowast(nminus1)8 k1=hlowast f ( xp y [ nminus1]) as double9 k2=hlowast f ( xp+h2 y [ nminus1]+k1 2) as double

10 k3=hlowast f ( xp+h2 y [ nminus1]+k2 2) as double11 k4=hlowast f ( xn y [ nminus1]+k3 ) as double12 y [ n]=y [ nminus1]+16lowast(k1+2lowastk2+2lowastk3+k4 ) as double13 14 return y15

731 Παράδειγμα δεύτερο

Θα προσπαθήσουμε τώρα να λύσουμε το παράδειγμα της παρακάτω εξίσωσης

συνοδεία της αντίστοιχης αρχικής τιμήςyprime(x) = 1x2 minus yxminus y2 x isin [1 2]

y(1) = minus10(75)

το οποίο έχει αναλυτική λύση την y(x) = minus1x

1 a=10 d e f i n e i n i t i a l time2 b=20 de f i n e f i n a l time3 y0=minus10 i n i t i a l va lue4 N=16 number o f s t ep s5 exact=xminusgtminus1x exact s o l u t i o n6 f=x yminusgt1xlowastlowast2minusyxminusylowastlowast2 rhs7 df=x yminusgtminus2xlowastlowast3+yxminus(1x+2lowasty ) lowast(1xlowastlowast2minusyxminusylowastlowast2) 8 approx=myeuler ( a b y0 N f ) approximate s o l u t i o n returned by

myeuler9 approx2nd=myeuler2nd (a b y0 N f d f ) approximate s o l u t i o n

returned by myeuler2nd10 ( 0 N) each p r i n t l n exact ( a+i t lowast(bminusa ) N)+ +approx [ i t ]+ +

approx2nd [ i t ] p r in t approximation r e s u l t s toge the r withexact s o l u t i o n

48

74 Συστήματα διαφορικών εξισώσεων 1ης τά-

ξης

Σκοπός αυτής της ενότητας είναι η παρουσίαση αριθμητικής επίλυσης συστη-

μάτων διαφορικών εξισώσεων (ΣΔΕ) με χρήση της Climax στο περιβάλλον

SDE αξιοποιώντας τον μεταγλωττιστή της Groovy

΄Ενα ΣΔΕ γράφεται ως εξής ΄Εστω m isin N F [a b] times Rm rarr Rm και

y0 isin Rm Ζητείται συνάρτηση y [a b]times Rm που να ικανοποιείyprime(t) = f(t y(t)) t isin [a b]

y(a) = y0(76)

ένα τέτοιο σύστημα λύνεται με αντίστοιχο τρόπο όπως στην περίπτωση των

βαθμωτών συναρτήσεων οπότε η μέθοδος Euler σε αυτή τη περίπτωση γράφε-

ται

yn+1(k) = yn(k) + hf(tn yn(k)) n = 0 2 N k = 0 2 m (77)

όπου h = (bminusa)N το βήμα μας και yn(k) η προσέγγιση της λύσης της k-ιοστής

συνιστώσας στη χρονική στιγμή tn όπου tn = t0 + nh

Τέτοια συστήματα προκύπτουν πολλές φορές όταν προσπαθούμε να λύσου-

με ΣΔΕ υψηλότερης τάξης την οποία γράφουμε ισοδύναμα ως ένα σύστημα

1ης τάξης ΄Ενα χαρακτηριστικό παράδειγμα είναι το απλό εκκρεμές που θα

παρουσιάσουμε παρακάτω

75 Μετατροπή δευτεροβάθμιας εξίσωσης σε σύ-

στημα πρώτου βαθμού (εξίσωση για το α-

πλό εκκρεμές)

΄Ενα απλό εκκρεμές αποτελείται από σημειακή μάζα στο άκρο μιας ράβδου μή-

κους L που στηρίζεται σε κάποιο καρφί (χωρίς τριβή) Αν η βαρύτητα είναι η

μόνη δύναμη που ενεργεί τότε η ταλάντωση του εκκρεμούς διαμορφώνεται από

την εξίσωση

d2θ

dt2= minus g

Lsin(θ) (78)

όπου θ είναι η γωνιακή θέση της ράβδου με θ = 0 αν η ράβδος κρέμεται κάτω

από το καρφί και θ = π αν η ράβδος βρίσκεται ακριβώς πάνω από το καρφί

49

΄Εστω επιπλέον ότι L = 50cm και g = 981ms2 Οι αρχικές συνθήκες είναι

θ(0) = θ0 καιdθ

dt(0) = 0 (79)

Εάν η αρχική γωνία δεν είναι πολύ μεγάλη τότε η προσέγγιση sin(θ) = θμπορεί να χρησιμοποιηθεί και οδηγεί στο γραμμικό μοντέλο του ταλαντωτή

d2θ

dt2= minus g

Lθ (710)

το οποίο και λύνεται εύκολα αναλυτικά για να προκύψει

θ(t) = θ0 cos(tradicgL) (711)

Η εξίσωση (710) μπορεί να γραφτεί ως σύστημα 1ης τάξης κάνοντας την έξης

αλλαγή μεταβλητών y1 = θ και y2 = dθdt οπότε και προκύπτει το σύστημα

dy1dt

= y2

dy2dt

= minus gLy1

(712)

ή αλλιώς

dy

dt= Ay με y =

(y1y2

)και A =

(0 1minus gL 0

) (713)

76 Υλοποίηση της μεθόδου Euler για συστή-ματα

Παίρνοντας αφορμή από το παραπάνω παράδειγμα θα προσπαθήσουμε να υλο-

ποιήσουμε με τη βοήθεια της Climax τη μέθοδο Euler στο σύστημα (713)

Ξεκινάμε φτιάχνοντας ένα συναρτησιακό αντικείμενο το οποίο θα μπορούσε να

είναι μέσα σε ένα ξεχωριστό αρχείο που θα περιέχει τον παρακάτω κώδικα

1 myeuler=a b y0 N f1 f2minusgt2 h=(bminusa ) N as double3 y = new double [ 2 ] [N+1]4 y [ 0 ] [ 0 ]= y0 [ 0 ]5 y [ 1 ] [ 0 ]= y0 [ 1 ]6 for (n in 1 N) 7 tp=a+hlowast(nminus1)

50

8 y [ 0 ] [ n]=y [ 0 ] [ nminus1]+hlowast f 1 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])9 y [ 1 ] [ n]=y [ 1 ] [ nminus1]+hlowast f 2 ( tp y [ 0 ] [ nminus1] y [ 1 ] [ nminus1])

10 11 return y12

Με χρήση του πιο πάνω κώδικα για την μέθοδο Euler και το σύνολο της δέ-

σμης εντολών που ακολουθεί μπορούμε να επιλύσουμε αριθμητικά το πρόβλημα

του εκκρεμούς

1 exac t th=t th0minusgt L=05 g=981 return th0lowast cos ( sq r t ( gL) lowast t ) 2 e x a c t t h t=t th0minusgt L=05 g=981 return minusth0lowast s q r t ( gL) lowast s i n (

sq r t ( gL) lowast t ) 3

4 f 1=t y1 y2minusgt5 L=05 g=9816 return y27 8

9 f 2=t y1 y2minusgt10 L=05 g=98111 return minusglowasty1L12 13

14 th0=PI 6 015 y0= new double [ 2 ]16 y0 [0 ]= th017 y0 [ 1 ]=0 018

19 T=5lowast1418520 t0=0021 N=51222

23 approx=myeuler ( t0 T y0 N f1 f 2 ) approximate s o l u t i o n returnedby myeuler

24 h=(Tminust0 ) N as double25 ( 0 N) each p r i n t l n exac t th ( t0+i t lowasth th0 )+ +approx [ 0 ] [ i t ]26

Να σημειώσουμε εδώ πως παρόλο που υποβαθμίσαμε την δεύτερης τάξης

εξίσωση σε ένα σύστημα δύο εξισώσεων πρώτης τάξης η λύση που ζητάμε

είναι αυτό που αντιστοιχεί στην πρώτη στήλη του διανύσματος y ή αντίστοιχα

το y1 όπως έχει δηλωθεί στο σύστημα (713)

Για τη δημιουργία του διαγράμματος του που φαίνεται στο Σχήμα 72 χρη-

σιμοποιούμε τον πιο κάτω κώδικα

51

1 thePlot c l e a r ( )2 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 0 ] [ i t ] ) 3 fp=new p l o t f un c t i on (h approx1 )4 fp setMarker ( true )5 fp setName (Euler 1st order)6 thePlot addFunction ( fp )7

8 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

9 fp=new p l o t f un c t i on (h exact thp )10 fp setMarker ( true )11 fp se tMarkerSty le (1 )12 fp setName (Exact solution)13 thePlot addFunction ( fp )14

15 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus16 thePlot setAutoColor ( true )17 thePlot makeLegend ( )18 thePlot xLabel (t)19 thePlot yLabel (y(t))20 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus21 thePlot show ( )

77 Διάγραμμα φάσης

Για τη δημιουργία του διαγράμματος (φάσης) που φαίνεται στο Σχήμα 73

χρησιμοποιούμε τον πιο κάτω κώδικα

1 thePlot c l e a r ( )2 approx0 = [ ] ( 0 (Nminus1) ) eachapprox0 add ( approx [ 0 ] [ i t ] ) 3 approx1 = [ ] ( 0 (Nminus1) ) eachapprox1 add ( approx [ 1 ] [ i t ] ) 4 fp=new p l o t f un c t i on ( approx0 approx1 )5 fp setMarker ( true )6 fp setName (Euler 1st order)7 thePlot addFunction ( fp )8

9 exact thp = [ ] ( 0 (Nminus1) ) each exact thp add ( exac t th ( t0+i t lowasth th0) )

10 exac t th tp = [ ] ( 0 (Nminus1) ) each exac t th tp add ( e x a c t t h t ( t0+i tlowasth th0 ) )

11 fp=new p l o t f un c t i on ( exact thp exa c t th tp )12 fp setMarker ( true )13 fp se tMarkerSty le (1 )14 fp setName (Exact solution)

52

Σχήμα 72 Προσεγγιστική λύση με τη μέθοδο Euler (κόκκινη γραμμή) μαζί

με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N = 512

53

Σχήμα 73 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =512

15 thePlot addFunction ( fp )16

17 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus18 thePlot setAutoColor ( true )19 thePlot makeLegend ( )20 thePlot xLabel (y1(t))21 thePlot yLabel (y2(t))22 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus23 thePlot show ( )

Το επόμενο βήμα μας είναι να χρησιμοποιήσουμε περισσότερα σημεία για

την προσέγγιση της λύσης μας και συγκεκριμένα χρησιμοποιούμε N = 4096σημεία Τότε παρατηρούμε όπως φαίνεται και στο Σχήμα 74 πως η σπείρα που

περιγράφει το διάγραμμα φάσης της προσέγγισής μας είναι πιο συγκεντρωμένο

54

Σχήμα 74 Διάγραμμα φάσης της λύσης με τη μέθοδο Euler (κόκκινη γραμμή)

μαζί με την αναλυτική λύση (μπλε γραμμή) για την εξίσωση (713) για N =4096

55

56

Κεφάλαιο 8

Αριθμητική Επίλυση

Μερικών Διαφορικών

Εξισώσεων

Υπό κατασκευή

Προσαρμογή από αντίστοιχες σημειώσεις1της καθ Χρυσούλας Τσόγκα για το

μάθημα laquoΜΕΜ253ΕΜ292Μ2513 ndash Αριθμητική Επίλυση Μερικών Διαφορι-

κών Εξισώσεωνraquo του Χειμερινού Εξαμήνου 2015-2016 στο τμήμα Μαθηματικών

και Εφαρμοσμένων Μαθηματικών του Πανεπιστήμιου Κρήτης

81 Πεπερασμένες διαφορές

΄Εστω το πρόβλημα συνοριακών τιμώνminus uprimeprime(x) + q(x)u(x) = f(x) x isin [a b]

u(a) = u(b) = 0(81)

όπου q(x) ge 0 για κάθε x isin [a b] Θεωρούμε ομοιόμορφο διαμερισμό του

διαστήματος [a b] με βήμα h = (b minus a)N τα σημεία xi του οποίου δίνονται

από τη σχέση

xi = a+ ih i = 0 1 N

Σκοπός μας είναι να υλοποιήσουμε μια αριθμητική μέθοδο η οποία να υπολογίζει

μια προσεγγιστική λύση της (81) στα σημεία xi της διαμέρισης τις οποίες θα

συμβολίζουμε με Ui όπου Ui asymp u(xi) i = 0 1 N

1httpuserstemuocgr˜tsogkaCoursesAEMDE-fall2015

57

Η μέθοδος που θα χρησιμοποιήσουμε εδώ για τον υπολογισμό της προ-

σεγγιστικής λύσης ονομάζεται μέθοδος πεπερασμένων διαφορών και βασίζεται

στην προσέγγιση της παραγώγου από πηλίκα διαφορών τα οποία προέρχονται

από τα αναπτύγματα Taylor

811 Υλοποίηση σε Climax

Θα θεωρήσουμε το πρόβλημα

82 Μη-ομοιόμορφος διαμερισμός

83 Μέθοδοι πεπερασμένων διαφορών για πα-

ραβολικά προβλήματα

Σκοπός αυτού του εργαστηρίου είναι η υλοποίηση μιας αριθμητικής μεθόδου

για την επίλυση μιας παραβολικής εξίσωσης όπως είναι η εξίσωση της θερμότη-

ταςΘα ξεκινήσουμε θεωρώντας το πρόβλημα αρχικώνσυνοριακών τιμών για

την εξίσωση της θερμότητας με ομογενείς συνοριακές συνθήκες τύπου Diri-chlet

ut(t x) = uxx(t x) x isin [a b] isin [t0 Tf ]

u(0 x) = u0(x) x isin [a b]

u(t a) = u(t b) = 0 t isin [t0 Tf ]

(82)

84 Μέθοδοι πεπερασμένων διαφορών για υπερ-

βολικά προβλήματα

58

Κεφάλαιο 9

Η Groovy και το SDE

Η γλώσσα την οποία χρησιμοποιούμε ώστε να εφοδιάσουμε το περιβάλλον SDEμε κατάλληλα εργαλεία για αξιοποίηση των βιβλιοθηκών που συμπεριλαμβάνο-

νται στην Climax είναι η Groovy Ο πιο απλός τρόπος για να δοκιμάσουμε

την Groovy είναι διαδικτυακά με το Groovy web console1 Επιπλέον για να

χρησιμοποιήσει κανείς είτε την Groovy είτε τις δυνατότητες του συνόλου της

βιβλιοθήκης Climax μπορεί να τρέξει laquoδιαδικτυακάraquo το περιβάλλον SDE2 μέσωτης τεχνολογίας του Java web start

Για να διαχωρίσουμε τις ενδογενείς μεθόδους της Groovy3 από δυνατότητες

με τις οποίες έχουμε εφοδιάσει τον συνδυασμό των πακέτων που απαρτίζεται

από την Climax καιή το SDE θα δηλώνουμε στο τίτλο των ενοτήτων αυτού του

κεφαλαίου με ένα αστερίσκο (lowast) για την δεύτερη περίπτωση Σημειώνεται πως

σε αυτή την ενότητα δεν θα αναφερθούμε σχεδόν καθόλου στις δυνατότητες

αξιοποίησης των υπολογιστικών μεθόδων που περιλαμβάνονται στην βιβλιοθήκη

Climax ενώ περισσότερο θα επικεντρώσουμε στην χρήση της Groovy σαν μια

εναλλακτική γλώσσα και για υπολογισμούς και επιστημονικέςεκπαιδευτικές

εφαρμογές

Μια πληρέστερη και ταυτόχρονα συνοπτική περιγραφή μπορεί κανείς να

βρεις στην επίσημη ιστοσελίδα της γλώσσας Groovy4

1httpsgroovyconsoleappspotcom2httpsymplegmaorg3Σημειώνουμε εδώ ότι η γλώσσα προγραμματισμού Groovy πολλές φορές αναφέρεται και

ως ένα υπερσύνολο ή αλλιώς μια επέκταση της γλώσσας Java Κάτω από αυτό το πρίσμα οιφοιτητές του ΤΕΙ Κρήτης του τμήματος Μουσικής Τεχνολογίας amp Ακουστικής μπορούννα ανατρέξουν στην ύλη και τις αντίστοιχες σημειώσεις της καθ Χρ Αλεξανδράκης για

το μάθημα laquoΕιδικά Θέματα Μουσικού Προγραμματισμούraquo4httpgroovy-langorgdocumentationhtml

59

91 Μεταβλητές

Μεταβλητές (Variables) μπορούν να ονοματοδοτηθούν χρησιμοποιώντας κε-

φαλαίους ή πεζούς χαρακτήρες σε συνδυασμό με αριθμούς Αποδεκτά ονόματα

μπορεί να έχουν τη μορφή

NetCost Left2Pay x3 X3 z25c5

Δεν επιτρέπεται να δίνουμε ονόματα τα οποία περιέχουν ειδικούς χαρακτήρες

ή μεταβλητές που ξεκινάνε με αριθμό Για παράδειγμα μη αποδεκτά ονόματα

μεταβλητών είναι

Net-Cost 2pay x sign

Επιπλέον δεν πρέπει να χρησιμοποιηθούν ονόματα τα οποία χρησιμοποιούνται

από την ίδια τη Groovy (ή και από το περιβάλλον SDE) όπως για παράδειγμα

το PI=314159 π

1 x=13 y=5lowastx2 z=xlowastlowast2+y3 p r i n t l n x4 p r i n t l n y= +y

΄Οπως φαίνεται πιο πάνω για να εμφανιστεί μια η τιμή κάποιας μεταβλητής

θα πρέπει να χρησιμοποιήσουμε την εντολή print ή την println Το ελλη-

νικό ερωτηματικό () χρησιμοποιείται για να χωρίσουμε επιμέρους εντολές που

δίνονται στην ίδια γραμμή

92 Διατάξεις και πινάκες

Μια πολυ χρήσιμη οντότητα αποτελεί το αντικείμενο της διάταξης που θα χρη-

σιμοποιούμε εδώ πολύ συχνά σε μια από τις δύο συνήθεις μορφές αυτή του

array καθώς και της ArrayList

1 x=[ ]2 x add ( 1 0 ) x add ( 4 5 )3 p r i n t l n x ge tC la s s ( )+ +x [ 0 ]

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

να ανακτήσουμε το είδος κάποιας μεταβλητής είναι η getClass()

60

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

Στις εσωτερικές συναρτήσεις της Groovy συμπεριλαμβάνονται οι τριγωνομετρι-

κές συναρτήσεις σιν ςος κα καθώς και άλλες συναρτήσεις που χρησιμοποιού-

νται ευρέως όπως για παράδειγμα οι sqrt log exp κα Για να ακριβολογούμε

οι συναρτήσεις αυτές για να είναι διαθέσιμες στην Groovy όπως και στη Javaθα πρέπει να εισάγουμε (import static javalangMath) την προκαθορισμενη

βιβλιοθήκη Math της Java Στα πλαίσια της Climax αυτό έχει γίνει εκ των

πρότερων ώστε οι συναρτήσεις και οι σταθερές (όπως για παράδειγμα οι PI E

για τα π asymp 314 και e asymp 2718 αντίστοιχα) να είναι άμεσα διαθέσιμες Μερικά

παραδείγματα χρήσης είναι

1 x=PIlowastlowast22 p r i n t l n sq r t ( x )

Σε αντίθεση με την MatlabOctave οι εσωτερικές συναρτήσεις δεν μπορούν

να εφαρμοστούν σε διατάξεις ή διανύσματαπίνακες

94 Δομές ελέγχου

Οι δομές ελέγχου είναι κομμάτια κώδικα τα οποία αφορούν εντολές και διαδικα-

σίες που θα εκτελεστούν ή όχι ανάλογα με το αν ισχύει κάποια συγκεκριμένη

συνθήκη ή μια ομάδα συνθηκών Χρήσιμη ενδογενής μεταβλητή των γλωσσών

JavaGroovy είναι η λογική boolean μεταβλητή που παίρνει τις αυτονόητες

τιμές true ή falseΑν σε κάποιο σημείο έχουμε αναθέσει κάποια τιμή στην μεταβλητή x τότε

μπορούμε να κάνουμε ελέγχους σε αυτό όπως

bull x == 2 είναι το x ίσο με 2

bull x =2 δεν είναι το x ίσο με 2

bull x gt 2 είναι το x μεγαλύτερο από 2

bull x lt 2 είναι το x μικρότερο από 2

bull x gt=2 είναι το x μεγαλύτερο από ή ίσο με 2

bull x lt= 2 είναι το x μικρότερο από ή ίσο με 2

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι ο έλεγχος για την ισότη-

τα απαιτεί δύο σύμβολα ισότητας == Σε αντίθεση με την MatlabOctave οι

61

εσωτερικές συναρτήσεις δεν μπορούν να εφαρμοστούν σε διατάξεις ή διανύσμα-

ταπίνακες

941 Δομή ελέγχου ifelse

Η δομή ελέγχου if εξετάζει την αλήθεια μιας συνθήκηςπρότασης και προχωρά

ή όχι σε κάποια ενέργεια Η δομή αυτή μπορεί να συνοδεύεται και από ένα

ακόλουθο else που δίνει την οδηγία του θα συμβεί αν δεν ισχύει η πρόταση

ελέγχου Αν δεν υπάρχει η επέκταση του else και δεν είναι αληθής η πρότα-

ση τότε δεν θα γίνει καμιά περαιτέρω ενέργεια ΄Ενα παράδειγμα είναι και το

παρακάτω

1 I n i t i a l i z i n g a l o c a l v a r i ab l e2 int a = 23

4 Check f o r the boolean cond i t i on5 i f ( alt100) 6 I f the cond i t i on i s t rue p r i n t the f o l l ow i ng statement7 p r i n t l n (The value is less than 100) 8 else 9 I f the cond i t i on i s f a l s e p r i n t the f o l l ow i n g statement

10 p r i n t l n (The value is greater than 100) 11

942 Δομή ελέγχου switch

Μια άλλη δομή ελέγχου και απόφασης των JavaGroovy είναι η switch μέ-

σω της οποίας για να συμβεί κάτι εξετάζονται επιμέρους περιπτώσεις για μια

πρόταση ΄Ενα παράδειγμα δίνεται πιο κάτω

1 i n i t i a l i z i n g a l o c a l v a r i ab l e2 a = 23

4 Evaluat ing the exp r e s s i on value5 switch ( a ) 6 There i s case statement de f ined f o r 4 ca s e s7 Each case statement s e c t i o n has a break cond i t i on to e x i t

the loop8 case 1 9 p r i n t l n (The value of a is One)

10 break 11 case 2

62

12 p r i n t l n (The value of a is Two) 13 break 14 default 15 p r i n t l n (The value is neither One or Two) 16 break 17

95 Δομές επανάληψης

Μια δομή επανάληψης επαναλαμβάνει μια διαδικασία ο αριθμός των επαναλήψε-

ων εξαρτάται από την αλήθειαισχύ μιας συνθήκηςπρότασης Η γλώσσα Gro-ovy διαθέτει πλούσιο εύρος σε δομές επανάληψης ενώ εδώ θα παρουσιάσουμε

αυτές που συνηθέστερα θα χρησιμοποιούμε στις εφαρμογές των σημειώσεων

αυτών

951 Δομή επανάληψης for

Η δομή επανάληψης θα εκτελέσει την εντολή που είναι στο block της 5 φορές

για τιμές του i από 0 έως και 4

1 for ( int i = 0 i lt5 i++) 2 p r i n t l n ( i ) 3

952 Δομή επανάληψης while

΄Οσο η συνθήκη ελέγχου είναι αληθής εκτελούνται οι εντολές μέσα στο blockτης δομής while Το αποτέλεσμα στο παράδειγμα που ακολουθεί θα είναι ίδιο

με αυτό του παραδείγματος της δομής for που δόθηκε παραπάνω

1 int i = 0 2 while ( i lt5) 3 p r i n t l n ( i ) 4 count++5

63

953 Δομή επανάληψης σε πεδίο τιμών range

Μια πολυ χρήσιμη οντότητα της Groovy είναι και η αριθμοσειρά (range) ακεραί-ων η οποία μπορεί να οριστεί ως (startend) και περιλαμβάνει τους αριθμούς

από τον start έως και τον end Σε συνδυασμό με την συνάρτηση each (και

με όρισμα ένα συναρτησιακό αντικείμενο (closure) το οποίο παρουσιάζεται σε

επόμενη παράγραφο) μπορούμε να ορίσουμε μια δομή επανάληψης όπως στο

παράδειγμα που ακολουθεί με αποτέλεσμα ίδιο με τα πιο πάνω παραδείγματα

1 ( 0 4 ) each p r i n t l n ( i t )

96 Συναρτήσεις

Μια μέθοδος ή αλλιώς συνάρτηση στη Groovy ορίζεται έτσι ώστε να παίρνει έ-

να ή κάποια ορίσματα και να επιστρέφει κάτι Το αντικείμενο που θα επιστρέφει

μπορεί να είναι και ένα κενό αντικείμενο (void) ή ακόμα και κάποιο απροσδιό-

ριστο αντικείμενο (def) Η συνάρτηση αφού ολοκληρώσει τις διαδικασίες που

δίνονται στο σώμα της επιστρέφει την έξοδο της με την εντολή return Στη

περίπτωση που η συνάρτηση έχει οριστεί ως (void) ή (def) η τελευταία returnδήλωση μπορεί να παραληφθεί

Στο παράδειγμα που ακολουθεί θα ορίσουμε και θα χρησιμοποιήσουμε τη

συνάρτηση

f(x y) = sin (2πx) sin (2πy)

1 double f (double x double y ) 2 return Math s i n ( 2 0lowastMath PIlowastx ) lowastMath s i n ( 2 0lowastMath PIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Ο ορισμός για τους τύπους των παραμέτρων στο όρισμα της συνάρτησης

είναι προαιρετικός Στα πλαίσια του περιβάλλοντος SDE το όνομα της κλάσης

Math μπορεί να παραληφθεί Λαμβάνοντας αυτά υπόψη θα μπορούσαμε να

γράψουμε σε πιο συμπτυγμένη μορφή όπως παρακάτω

1 double f (x y ) 2 return s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

64

97 Συναρτησιακά αντικείμενα (closures)

Για πολλούς λόγους η εξήγηση των οποίων ξεπερνά την εμβέλεια και το δι-

δακτικό σκοπό του παρόντος τεύχους εδώ προτιμάμε τη χρήση του συναρτη-

σιακού αντικείμενου (closure) αντί της συνάρτησης (method) αν και κάποιοι

από τους λόγους αυτούς πιθανώς να φανούν αυτονόητοι από το περιεχόμενο

αυτών των σημειώσεων ΄Ενας ίσως απλοϊκός τρόπος να αντιληφθεί κανείς

το αντικείμενο closure είναι να το θεωρήσει ως μια συνάρτηση που μπορεί να

περάσει ως όρισμα μέσα σε μια άλλη συνάρτηση Από τον προηγούμενο ορισμό

προκύπτει και η ονομασία που εδώ έχουμε επιλέξει στα ελληνικά ως συναρτη-

σιακό αντικείμενο Τα αντικείμενα αυτά είναι και μια από τις βασικές οντότητες

μαζί με τις δυνατότητες δυναμικού προγραμματισμού και του υψηλού βαθμού

συμβατότητας με την Java που καθιστούν την Groovy εξαιρετικά χρήσιμη

΄Ενα συναρτησιακό αντικείμενο ορίζεται μέσα σε αγκύλες με τις παραμέτρους

εισόδου (ορίσματα) να χωρίζονται από το σώμα με το σύμβολο (minusgt) Τέλος

το συναρτησιακό αντικείμενο μπορεί να καταλήγει με μια δήλωση επιστροφής

(return) ή και απουσία αυτής Στην δεύτερη περίπτωση ως επιστροφή ορίζεται

το υπολογισμένο μέγεθος από τη τελευταία διαδικασία που έχει γίνει μέσα στο

σώμα του αντικειμένου

Εδώ ως απλό παράδειγμα θα δώσουμε τον ορισμό της προηγούμενης τριγω-

νομετρικής συνάρτησης ως συναρτησιακό αντικείμενο

1 f=x yminusgt2 s i n ( 2 0lowastPIlowastx ) lowast s i n ( 2 0lowastPIlowasty )3 4 p r i n t l n f ( 0 8 5 0 2 )

Τέλος αξίζει να σημειωθεί ότι ακόμα και όταν λείπουν οι μεταβλητές εισόδου

το συναρτησιακό αντικείμενο της Groovy εχει μια προκαθορισμένη μεταβλητή

με την ονομασία it Αυτό μπορεί να φανεί στο παράδειγμα που ακολουθεί

1 f=s i n ( 2 0lowastPIlowast i t [ 0 ] ) lowast s i n ( 2 0lowastPIlowast i t [ 1 ] ) 2 p r i n t l n f ( [ 0 8 5 0 2 ] )

98 Είσοδος και έξοδος δεδομένων σε και από

αρχεία

Η Groovy παρέχει με μια ομάδα βοηθητικών μεθόδων για την επικοινωνία με και

διαχείριση δεδομένων προς και από αρχεία Μια βασική ενέργεια είναι αρχικά

65

να οριστεί ή να δημιουργηθεί αυτό το αρχείο

1 SomeFile = new F i l e (somedirectoryExampletxt)

981 Αποθήκευση δεδομένων

Για να γράψει κανείς σε ένα αρχείο για παράδειγμα στο SomeFile που δη-

μιουργήσαμε προηγούμενα μπορεί να χρησιμοποιήσει μεθόδους όπως αυτές

στο παράδειγμα που ακολουθεί

1 SomeFile wr i t e This is the first linen2 SomeFile ltlt This is the second linen3 SomeFile l e f t S h i f t This is the third linen4 SomeFile append This is the fourth linen5 p r i n t l n SomeFile t ex t

Η μέθοδος write ουσιαστικά σβήνει ότι έχει γραφτεί στο αρχείο και γράφει

από πάνω το αλφαριθμητικό περιεχόμενο του ορίσματος Η μέθοδος leftShift ή

append για την οποία η Groovy υιοθετεί τον συμβολικό τελεστή ltlt γράφει

το περιεχόμενο του ορίσματος στο τέλος του αρχείου χωρίς να σβήνει το

προηγούμενο περιεχόμενο

982 Ανάκτηση δεδομένων

Για να διαβάσουμε δεδομένα από ένα αρχείο ο πιο απλός τρόπος είναι να χρη-

σιμοποιήσουμε την μέθοδο text που επιστρέφει το περιεχόμενο του αρχείου σε

μια αλφαριθμητική String μεταβλητή

1 f i l e t e x t=SomeFile t ex t2 p r i n t l n f i l e t e x t

ενώ αν θέλουμε μπορούμε να διαβάσουμε το αρχείο γραμμή προς γραμμή τοπο-

θετώντας το σε μια λίστα με χρήση της μεθόδου readLines

1 l i n e s = SomeFile readLines ( )2 l i n e s each p r i n t l n i t

66

99 Αρχεία δέσμης εντολών (scripts) lowast

Η γλώσσα προγραμματισμού Groovy διαθέτει δυνατότητες μιας scripting pro-gramming language Με το όρο script (αρχείο δέσμης εντολών) εννοούμε

ένα αρχείο το οποίο περιέχει μια ομάδα εντολών ή οδηγιών σε γραφή που α-

κολουθεί τις συμβάσεις κάποιας συγκεκριμένης γλώσσας προγραμματισμού με

σκοπό τη διενέργεια συγκεκριμένων διαδικασιών από κάποιο ηλεκτρονικό υπο-

λογιστικό σύστημα Η Groovy μπορεί να διαβάσει και να διαχειριστεί τέτοια

αρχεία που μπορεί να έχουν οποιαδήποτε κατάληξη Στα πλαίσια του περιβάλ-

λοντος SDE έχει επιλεγεί η σύμβαση τα αντίστοιχα αρχεία να έχουν κατάληξη

climax καθώς βασική βιβλιοθήκη και ταυτόχρονα και κύριος λόγος ανάπτυξης

του περιβάλλοντος ήταν η διαχείριση και αξιοποίηση της Java βιβλιοθήκης υ-

πολογιστικών μεθόδων υπό τον τίτλο Climax Ουσιαστικά ο μηχανισμός που

αναλαμβάνει να εκτελέσει τις εντολές που περιέχονται στα script αυτά αρχεία

είναι το αντικείμενο GroovyShell

Στο παράρτημα παραθέτονται ολοκληρωμένα script αρχεία climax τα οποία

περιέχουν τα σενάρια (εντολών) για την αντιμετώπιση προβλημάτων που πα-

ρουσιάζονται σε αυτές τις σημειώσεις

910 Μητρώα και διανύσματαlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους πίνακες (αλγεβρικά μητρώα) είναι αυτός που μας προσφέρεται από τη βι-

βλιοθήκη της JAMA A Java Matrix Package5 ΄Οσο αφορά τα διανύσματα

εδώ νοούνται ως πίνακες με κατάλληλες διαστάσεις Ταυτόχρονα υπάρχουν

και ενσωματωμένες δυνατότητες επίλυσης γραμμικών συστημάτων και ανάλυ-

σης του ιδιοσυστήματος Παράδειγμα ορισμού και χρήσης δίνεται στην ομάδα

εντολών που ακολουθεί

1 order = 32 de f i n e an array double [ ] [ ]3 da=new double [ o rder ] [ order ]4

5 for ( i in 0lt order ) 6 for ( j in 0lt order ) 7 da [ i ] [ j ]=random ( )8 9

10

5httpmathnistgovjavanumericsjama

67

11 use the above de f ined double array to equip a matrix M12 M=Matrix ( da )13

14 update array da f o r another use15 for ( i in 0lt order ) 16 for ( j in 0lt order ) 17 da [ i ] [ j ]=random ( )18 19 20

21 use the above de f ined double array to equip a matrix K22 K=Matrix ( da )23

24 M pr in t ( )25 K pr in t ( )26

27 (K+M) p r i n t ( )28 (KminusM) p r i n t ( )29 (KlowastM) p r i n t ( )30 M inv e r s e ( ) p r i n t ( )31 M transpose ( ) p r i n t ( )

Ακολουθεί παράδειγμα με τον κώδικα που απαιτείται για να λύσουμε το

γενικευμένο ιδιοπρόβλημα

(K minus λM)x = 0

1 Eigen= EigenDescomposit ion (M i nv e r s e ( ) lowastK)2 EigenValues=Eigen getRea lE igenva lues ( )3 EigenVectors=Eigen getV ( )4

5 ( 1 order ) each p r i n t l n EigenValues [ i t minus1]6 EigenVectors p r i n t ( )

Σημειώνεται εδώ πως η μέθοδος getRealEigenvalues() επιστρέφει μια διά-

ταξη (double array) με όρους τις ιδιοτιμές λi ενώ η getV() επιστρέφει ένα

πίνακα του οποίου κάθε στήλη περιέχει και ένα ιδιοδιάνυσμα xi

911 Μιγαδικοί αριθμοίlowast

Στο περιβάλλον του SDE ο προκαθορισμένος τύπος που χρησιμοποιείται για

τους μιγαδικούς αριθμούς είναι αυτός που μας προσφέρεται από την βιβλιοθήκη

68

της Apache Commons Math6 Παράδειγμα ορισμού και χρήσης δίνεται στην

ομάδα εντολών που ακολουθεί

1 c1= new Complex ( 1 0 2 0 )2 c2= new Complex ( 3 0 2 4 )3 p r i n t l n c1+c24 p r i n t l n c1minusc25 p r i n t l n c1lowast c26 p r i n t l n c1c27 p r i n t l n c1 conj ( ) c1 conjugate ( )8 p r i n t l n c1 re ( ) c1 getReal ( )9 p r i n t l n c1 im ( ) c1 getImaginary ( )

10 p r i n t l n c1 abs ( ) abso lu t e va lue o f c1

912 Διαγράμματα (plotting)lowast

Τα προς σχεδίαση σε δομή διαγράμματος αντικείμενα είναι τα plotfunctionΟ καθορισμός (κατασκευή) ενός τέτοιου αντικείμενου απαιτεί την δήλωση των

διακριτών τιμών της συνάρτησης (τεταγμένες) μέσω μιας διάταξης αριθμών και

προαιρετικά τις τιμές του οριζόντιου άξονα (τετμημένες) οι οποίες αν δεν δη-

λωθούν θεωρείται ότι αυξάνονται με μοναδιαίο βήμα Εναλλακτικά για τον

οριζόντιο άξονα μπορεί να δοθεί ένας μόνο αριθμός που θα είναι το επαυξη-

τικό βήμα ξεκινώντας από το μηδέν Η δομή διαγράμματος7που σχεδιάζει τα

πιο πάνω αντικείμενα ονομάζεται PlotFrame και μπορεί να φιλοξενεί αυθαίρετο

πλήθος plotfunction Στο παράδειγμα που ακολουθεί σχεδιάζουμε σε ένα κοινό

διάγραμμα τις τριγωνομετρικές συναρτήσεις του ημίτονου και συνημίτονου

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 t=new double [ n+1]4 s=new double [ n+1]5 c=new double [ n+1]6 ( 0 n ) each7 td=dtlowast i t8 t [ i t ]=td9 s [ i t ]= s i n ( td )

10 c [ i t ]= cos ( td )11

6httpcommonsapacheorgpropercommons-math7Στο περιβάλλον του SDE υπάρχει ένα προκαθορισμένο αντικείμενο δομής διαγράμματος

με όνομα μεταβλητής thePlot

69

12 t r i gP l o t addFunction (new p l o t f un c t i on ( dt s ) )13 t r i gP l o t addFunction (new p l o t f un c t i on ( t c ) )14 t r i gP l o t show ( )

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

περίπου φαίνεται στην πρώτη εικόνα 91 που ακολουθεί Εμπλουτίζοντας (και

Σχήμα 91 Τριγωνομετρικές συναρτήσεις

σε κάποια σημεία τροποποιώντας) τον κωδικά όπως πιο κάτω θα μπορούσα-

με να εφοδιάσουμε περαιτέρω το διάγραμμα με πληροφορίες αλλά και κάποιες

δυνατότητες μορφοποίησης

1 t r i gP l o t = new PlotFrame ( )2 n=100 dt=20lowastPIn3 s = [ ] c =[ ]4 ( 0 n ) each s [ i t ]= s i n ( dtlowast i t ) c [ i t ]= cos ( dtlowast i t ) 5 fp=new p l o t f un c t i on ( dt s ) fp setMarker ( true )6 fp s e tMarke rF i l l ( true ) fp setName (sine)7 t r i gP l o t addFunction ( fp )8 fp=new p l o t f un c t i on ( dt c ) fp setMarker ( true )9 fp se tMarkerSty le (1 ) fp setName (cosine)

10 t r i gP l o t addFunction ( fp )11

12 t r i gP l o t setAutoColor ( true )13 t r i gP l o t T i t l e (Trigonometric functions)14 t r i gP l o t makeLegend ( )15 t r i gP l o t xLabel (t)16 t r i gP l o t yLabel (y)

70

17 t r i gP l o t v l i n e (PI 2 java awt Color green )18 t r i gP l o t v l i n e (PI java awt Color green )19 t r i gP l o t v l i n e (3lowastPI 2 java awt Color green )20 t r i gP l o t show ( )

Το αποτέλεσμα θα είναι παρόμοιο με το διάγραμμα της αντίστοιχης εικό-

νας 92

Σχήμα 92 Τριγωνομετρικές συναρτήσεις εμπλουτισμένο διάγραμμα σε σχέση

με αυτό του σχήματος 91

913 Αναπαραγωγή ήχουlowast

Η κλάση που έχει διαμορφωθεί στο περιβάλλον του SDE για την αναπαραγωγή

ήχου είναι η soundplayer και βασίζεται στο Java Sound API Προκαθορισμένο

αντικείμενο αναπαραγωγής ήχου είναι το στιγμιότυπο της κλάσης soundplayerμε όνομα μεταβλητής theSP Μοναδική μέθοδος αυτής της κλάσης είναι η play-sound που στο όρισμα της παίρνει την διάταξη που περιέχει τις τιμές από τις

οποίες θα παραχθεί ο ήχος και μία τιμή για την ένταση Παράδειγμα χρήσης

αποτελεί ο κωδικας του πιο κατω σκριπτ

1 sound=[ ]2 f 1 =4400 Hz

71

3 om1=2lowastPIlowast f 14 r a t i o s r2=f2 f1 and r3=f3 f15 r2 =40 r3 =98 6 p a r t i c i p a t i o n o f each s i n e7 c1 =10 c2 =10 c3 =10 8 om2=r2 lowastom1 om3=r3 lowastom1 9 f r e q =44100

10 dt=10 f r e q11 ( 0 f r e q ) each12 sound add ( c1lowast s i n (om1lowast i t lowastdt )+c2lowast s i n (om2lowast i t lowastdt )+c3lowast s i n (om3lowast i t lowast

dt ) )13 14 theSP playsound ( sound )

72

Βιβλιογραφία

[1] Μ Γουσίδου-Κουτίτα Ανώτερα εφαρμοσένα μαθηματκά και αριθμητικές

μέθοδοι Εκδόσεις Χριστοδουλίδη Θεσσαλονίκη 2004

[2] Graff Karl F Wave motion in elastic solids Oxford University Press1973

[3] Χ Παναγιωτόπουλος και Π Κολιόπουλος Εγχειρίδιο δυναμικής των κα-

τασκευών Εκδόσεις Σοφία Θεσσαλονίκη 2007

[4] Σ Παπαϊωάννου και Χ Βοζίκης Αριθμητική Ανάλυση ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419845

[5] Α Μπράτσος Μαθήματα εφαρμοσμένων μαθηματικών ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet11419438

[6] Press WH and Teukolsky SA and Vetterling WT and FlanneryBP Numerical Recipes 3rd Edition The Art of Scientific ComputingCambridge University Press 2007

[7] Α Πρωτοπαπάς Βελτιστοποίηση τεχνικών συστημάτων ΣΕΑΒ Αθήνα

2015 Διαθέσιμο στο httphdlhandlenet114195906

73