TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ...

53
TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΠΙΛΥΣΗ ΔΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ ΜΕ ΜΕΘΟΔΟΥΣ ΑΡΙΘΜΗΤΙΚΗΣ ΑΝΑΛΥΣΗΣ ΓΡΑΜΜΕΝΕΣ ΣΕ TURBO PASCAL 6.0

Transcript of TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ...

Page 1: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

TEl ΚΑΒΑΛΑΣ Π ΤΥΧΙΑΚ Η ΕΡΓΑΣΙΑ

ΕΠΙΛΥΣΗ ΔΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ ΜΕ ΜΕΘΟΔΟΥΣ ΑΡΙΘΜΗΤΙΚΗΣ ΑΝΑΛΥΣΗΣ

ΓΡΑΜΜΕΝΕΣ ΣΕ TURBO PASCAL 6.0

Page 2: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΤΕΙ ΚΑΒΑΛΑΣ Π ΤΥΧ ΙΑ Κ Η ΕΡΓΑΣΙΑ

,ο.ν

ΕΠΙΛΥΣΗ ΔΙΑΦΟΡΙΚΩΝ ΕΞΙΣΩΣΕΩΝ ΜΕ ΜΕΘΟΔΟΥΣ ΑΡΙΘΜΗΤΙΚΗΣ ΑΝΑΛΥΣΗΣ

ΓΡΑΜΜΕΝΕΣ ΣΕ TURBO PASCAL 6.0

Page 3: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Ονομ/μο σπουδαστή : Παπαδόπουλος Ομηρος

Εισηγητής καδηγητής : Αλεβίζος Θεόδωρος

Σχολή ; Τεχνολογικών Εφαρμογών

Τμήμα : Ηλεκτρολογίας

Εξάμηνο Παράδοσης : Χειμερινό 1992

Page 4: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΠΕΡΙΕΧΟΜΕΝΑ

0. ΕΠΙΤΟΜΗ

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

1 ΕΙΣΑΓΩΓΗ

LL Αριθμητική ανάλυση

2. ΔΙΑΦΟΡΙΚΕΣ ΕΞΙΣΩΣΕΙΣ

2.L Γενικά για τις διαφορικές εξισώσεις

2.2. Αριθμητικοί αλγόριθμοι επίλυσης

Μέθοδοι Euler , Runge-Kutta , Heun , Runge-Kutta-Gil, Euler2

3. ΤΟ ΠΕΡΙΒΑΑΑΟΝ ΕΡΓΑΣΙΑΣ ΤΟΥ Η. ΥΠΟΑΟΠΣΤΗ

3.1. Οι ενότητες

3.2. Το νόημα των τμημάτων μιας ενότητας

3.3. Χρήσιμες πληροφορίες για τις ενότητες

4. ΤΕΚΜΗΡΙΩΣΗ ΓΙΑ ΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗ

4.L Ανάλυση του προγράμματος

4.2. Λίστα του προγράμματος

5. ΤΕΚΜ ΗΡΙΩΣΗ ΓΙΑ ΤΟΝ ΧΡΗΣΤΗ

5.1. Δόμηση του προγράμματος χρήσης της ενότητας

5.2. Παράμετροι των εντολών

5.3. Επιλογή της μεθόδου

Page 5: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

6. ΕΦΑΡΜΟΓΕΣ ΣΕ ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ

6.1 Γενικές εξισώσεις των ηλ. κυκλωμάτων

6.2 Εφαρμογή 1 & πρόγραμμα

6.3 Εφαρμογή 2

7 ΕΠΙΛΟΓΟΣ

Page 6: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

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

Η γλώσσα που επιλέχτηκε είναι η TURBO PASCAL 6.0.

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

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

y ’ =f(x,X), X(^Q)^yQ

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

σημεία χ^, χ , με την διαφορά δυο διαδοχικών τιμών του χ σταθερή

και ίση με h, είναι διυίαδή i . Η τιμή του h είναι αυθαίρετη.

Γενικά, όσο μικρότερο είναι το h, τόσο ακριβέστερη είναι η λύση.

Το πρόγραμμα γράφτηκε κατά τέτοιο τρόπο, ώστε οι μέθοδοι να

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

χρήστη της PASCAL.

Οι μέθοδοι που έχει στην διάθεσή του ο χρήστης είναι :

1 ) ΜΕΘΟΔΟΣ EULER

2 ) ' RUNGE-KUTTA

3 ) ' HEUN

4 ) ' RUNGE-KUTTA-GILL

5 ) ΤΡΟΠΟΠΟΙΗΜΕΝΗ ΜΕΘΟΔΟΣ ΤΟ Υ EULER

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

προγραμματιστή και τον χρήστη, μια αναφορά στην αριθμητική ανάλυση

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

νοτήτων της TURBO PASCAL Μετά το πρόγραμμα ακολουθούν δύο

ηλεκ/γικά παραδείγματα.

Page 7: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

Ιο Κεφάλαιο Ειοαγωγή

Στην εισαγωγή της εργασίας γίνεται μια αναφορά στην αριθμητική

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

βρεθεί κάποια λύση σ ε πολλά προβλήματα των θετικών επιστημών. Δίνεται

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

2ο Κεφάλαιο Διαφορικές εξισώσεις

Στο πρώτο τμήμα του κεφαλαίου δίνονται γενικές πληροφορίες για τις δια­

φορικές εξισώσεις : Η μορφή της κανονικής διαφορικής, τον ορισμό της

λύσης της και τις απαιτήσεις δεδομένων των μεθόδων. Εξηγήται για ποιό

λόγο αναπτύχθηκε θεωρία μόνο για την λύση διαφορικών εξισώσεων

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

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

εξισώσεων.

Στο δεύτερο τμήμα γίνεται μαθηματική ανάλυση των αλγόριθμων. Ξεκι­

νώντας από μια αναφορά στην μέθοδο Taylor, αναπτύσσονται οι

αλγόριθμοι του Euler και των Runge-Kutta. Στα διαδοχικά βήματα της

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

πρόγραμμα.

3ο Κεφάλαιο Το περιβάλλον εργασίας του αλ. υπολογιστή

θεωρήθηκε σκόπιμο να γίνει επεξήγηση των ενοτήτων της TURBO

PASCAL γιατί όλο το πρόγραμμα αποτελεί μια ενότητα. Αυτό σημαίνει ότι

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

περισσότερο στον προγραμματιστή.

Page 8: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Παρουσιάζεται η δόμηση των ενοτήτων, τον τρόπο χρήσης τους και

άλλες σημαντικός πληροφορίες.

4ο Κεφάλαιο Τεκμηρίωση για τον προγραμματιστή

Το κεφάλαιο αυτό απευθύνεται στον προγραμματιστή που 8α θελήσει όχι

μόνο να χρησιμοποιήσει, αλλά και να τροποποιήσει το πρόγραμμα. Στην

αρχή γίνεται περιγραφή των μεταβλητών, των σταθερών και των τύπων που

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

γράμματος.

Στο πρόγραμμα που ακολουθεί υπάρχουν αρκετά σχόλια ώστε να

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

5ο Κεφάλαιο Τεκμηρίωση για του χρήστη

Εδώ παρουσιάζεται βήμα προς βήμα η δόμηση του προγράμματος χρήσης

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

επίλυσης και αναλύεται η λειτουργία τους. Τέλος αυαφέρεται στο κριτήριο

επιλογής της μεθόδου.

6ο Κεφάλαιο Εφαρμογές σ ε ηλεκτρικά κυκλώματα

Η παρουσία αυτού του κεφαλαίου αποδεικυύει την χρησιμότητα των διαφο­

ρικών εξισώσεων στον ηλεκτρολογικό τομέα. Αρχικά παρουσιάζονται ανα­

λυτικά κάποιες εξισώσεις πάνω σε συγκεκριμένα ηλεκτρικά κυκλώματα. Κα­

τόπιν παρουσιάζονται δυο παραδείγματα, όπου το πρόβλημα λύνεται κατα

δυο τρόπους Αναλυτικά και αριθμητικά. Το πρόγραμμα που

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

καθαρά η ακρίβεια της μεθόδου.

Page 9: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

7ο Κεφάλαιο Επίλογος

Στον επίλογο δίνονται κάποιες ιδέες για παραπέρα εξέλιξη του προγράμ­

ματος.

Page 10: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 1

L I Αριθμητική Ανάλυση

Η ανάγκη να βρεθεί μια λύση, έστω και κατά προσέγγιση, σε πολλά

προβλήματα Μηχανικού και γενικότερα σε προβλήματα των θετικών

επιστημών δημιούργησε την Επιστήμη της Αριθμητικής Ανάλυσης.

Τα τελευταία χρόνια παρατηρείται τεράστια εξέλιξη στην τεχνολογία και

στη χρήση των Υπολογιστικών μηχανών. Για να χρησιμοποιηθούν όμως οι

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

υπάρχουν οι κατάλληλοι μέθοδοι Αριθμητικής Ανάλυσης (αλγόριθμοι). Οι

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

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

Επιπλέον οι αλγόριθμοι χρησιμοποιούνται όταν το πλήθος των

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

γίνουν σωστά και γρήγορα οι απαιτούμενοι υπολογισμοί.

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

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

ορισμένη ακρίβεια. Η λύση που παίρνουμε τις περισσότερες φορές δεν

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

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

από το πλήθος των αριθμητικών πράξεων που θα γίνουν. Αν

χρησιμοποιηθεί Ηλεκτρονικός Υπολογιστής, ανάλογος προς το πλήθος των

πράξεων είναι ο χρόνος του Η. Υπολογιστή και ιδιαίτερα της κεντρικής

Page 11: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

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

χρόνο με την ίδια ή καλύτερη ακρίβεια.

Page 12: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 2 ΔΙΑΦΟΡΙΚΕΣ ΕΞΙΣΩΣΕΙΣ

2.1 Γενική για τις διαφορικές εξισώ σεις

Μια εξίσωση της μορφήςdy d2y di y

f ( x , y . ------ . ...................... .......... ) = 0dx dx2 dxn

ονομάζεται κανονική διαφορική εξίσοκτη η τάξης, όταν ηεριέχει ολικά

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

είναι η χ ενώ η y είναι η εξαρτημένη μεταβλητή.

Μια συνάρτηση y(x), που ικανοποιεί την εξίσωση, σνομάζεται λύση της

διαφσρικής εξίσωσης και είναι διαφορίσημη τουλάχιστον η-φορές.

Για μερικές διαφορικές εξισώσεις υπάρχουν αναλυτικές λύσεις, ενώ για τις

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

άπειρους όρους) ή δεν μπορεί να βρεθεί. Στις περιπτώσεις αυτές

χρησιμοποιούμε αριθμητικές μεθόδους. Για να πετύχουμε μια μοναδική

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

άλλες πληρσφορίες σι οποίες είναι οι τιμές της y(x) ή και τιμές των

παραγωγών της y(x) για ορισμένες τιμές της χ.

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

έχουμε ένα πρόβλημα αρχικών τιμών. Αν οι συνθήκες προσδιορίζονται για

περισσότερες τιμές του (π.χ. χο και χη), έχουμε πρόβλημα οριακών

συνθηκών.

Page 13: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Κάθε διαφορικά εξίσωση η-τάξης είναι δυνατόν να γραφεί σαν σύστημα η

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

Αν έχουμε τη διαφορική εξίσωση τρίτης τάξης

dy d2y d^yf ( x , y , -------. --------, -------- ) = 0

dx dx2 dx2

αυτή θα αντικατασταθεί απο το σύστημα τριών διαφορικών εξισώσεων, δηλ.

τωνdy

--------- ζ = 0dx

dz

f ( X , y , ζ , w , - - ) = οdx

Αφού όμως κάθε εξίσωση οποιασδήποτε τάξης μπορεί να γίνει κατ’ αυτό

τον τρόπο σύστημα εξισώσεων πρώτης τάξης, χρειάζεται να αναπτυχθεί

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

τάξης.

Η διαφορική εξίσωση πρώτης τάξης γράφεται

dy--------= f ( x , y )dx

ταυτόχρονα απαιτείται και μια αρχική οριακή συνθήκη.

Για να λυθεί η διαφορική εξίσωση, το διάστημα [ a , b ] της χ στο οποίο

ζητούμε την λύση, χωρίζεται σε υποδιαστήματα ή βήματα h, όπου

Page 14: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

h = -

και βρίσκουμε μια προσέγγιση στην αληθινή λύση y(x) στις τιμές

xj = χ(3 + ih , i = 0 , 1 , . η

Κατ’ αυτό τον τρόπο η λύση δίνεται με την μορφή ενός πίνακα ΐΉ-1 τιμών

στις αντίστοιχες τιμές της X j, yj = y(xj) και η αληθινή τιμή της παραγωγού

dy/dx με την προσεγγιστική πμή

f = f ( Xj , yj ) = f ( Xj , y(xj))

H διαφορά ej = y| - y(xj) της αληθινής και της προσεγγιστικής ημής της

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

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

πρόκειται για την λύση σε ολόκληρο το διάστημα { a , b ].

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

αρχικές συνθήκες χωρίζονται σε δυο κατηγορίες. Η ηρώτη κατηγορία

περιλαμβάνει τις μεθόδους που χρησιμοποιούν την ανάπτυξη κατο Taybr

της y(x) ενώ, η δεύτερη τις μεθόδους που χρησιμοποιούν τους κλειστούς ή

ανοικτούς τύπους της αριθμηηκής ολοκλήρωσης.

Η πρώτη κατηγορία χαρακτηρίζεται απο την ιδιότητα ότι, για να

υπολογιστεί π λύση σε μια τιμή του χ, δηλ. την Xj+i , απαιτούνται

δεδομένα μόνο από την προηγούμενη τιμή Xj και γι’ αυτό οι μέθοδοι της

κατηγορίας αυτής λέγονται του απλού βήματος. Στη δεύτερη κατηγορία

απαιτούνται δεδομένα για περισσότερες απο μια τιμές του Xj και γι’ αυτό

λέγονται μέθοδοι του πολλαπλού βήματος.

Για την πρώτη κατηγορία η λύση ξεκινά με δεδομένα την τιμή του y(x) για

χ=χθ . Στην δεύτερη η λύση ξεκινά με δεδομένα τις τιμές των y(xQ) , y(xi)

Page 15: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

, y(x2) Kj\.n. Οι τιμές y(x] ) , y(x2) κτ\.π αν δεν δίδονται, βρίσκονται με μια

απο τις μεθόδους του απλού βήματος.

2.2 Αριθμητικοί μέθοδοι επίλυσης.

2.2.1.. Μ έθοδος Taybr.

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

λύση στην τιμή του x j = χ() + h και λέγεται h τάξης, όταν χρησιμοποιούμε

μέχρι και την η-1 παράγωγο της f.

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

υπολογισμός των παραγωγών της f ( χ , y ) , αν η μορφή της είναι

περίπλοκη και γι’ αυτό τον λόγο δεν συμπεριλήφθηκε στο πρόγραμμα.

2.2.2. Μ έθοδος Euler.

Αν στο ανάπτυγμα Taybr παίρνουμε, τους όρους μέχρι τον όρο που έχει

το h, έχουμε την μέθοδο Eubr, όπου

y(xj+i) = y(xj) + hf( Xj , y(xj)) + 0(h2) i = 0 ,1 , 2, . . . π

H μέθοδος Eubr είναι n πιο απλή μέθοδος απλού βήματος, αν και η

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

προβλημάτων.

Η λύση με την μέθοδο Eubr στο διάστημα Xj ( χ { Χ|+1 ακολουθεί την

εφαπτομένη της y(x) στην τιμή Xj, και αν παρακολουθήσουμε την λύση σε

Page 16: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

κλίσεις

f ( Xj , y(xi) ) i = 0, 1, 2, . . . η-1

To τοπικό σφάλμα της μεθόδου Eyler είναι

I e j+1 - e j I = 2!-| ί ’ ( ξ , ν ( 3 ) Ι Χϊ ( ξ < Χϊ+1

Αυτό ισχύει όμως μόνο για το πρώτο διάστημα [ XQ ι XI 1 ενώ για τα

υπόλοιπα διαστήματα έχουμε μεγαλύτερο σφάλμα εξ αιτίας του σφάλματος

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

απο το ένα διάστημα στο άλλο.

Αποδείχνεται πως το ολικό σφάλμα της μεθόδου Euler β| = γ| - y(x)) ,

όπου γ] η θεωρητική λύση της διαφορικής εξίσωσης και y(xi) η

προσεγγιστική, τείνει προς το μηδέν για η τείνει στο άπειρο και h τείνει

στο 0. Αυτό σημαίνει ότι η μέθοδος Euler συγκλίνει με ολικό σφάλμα της

τάξης Κ

I β) I = I y, - y(x|) I = 0(h)

2.2.3. Μέθοδοι Runge-Kutta

Η μέθοδος του Taybr απαιτεί τη χρήση παραγώγων μέχρι η τάξης, που ο

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

ακρίβεια αναλογη με το

Είναι δυνατό να αναπτυχθούν μέθοδοι απλού βήματος οι οποίες να

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

του τύπου Taybr, που είναι μεγαλύτερη της πρώτης τάξης. Οι Runge και

Kutta επινόησαν μεθόδους δεύτερης, τρίτης, τέταρτης και ανώτερης τάξης.

Page 17: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

που είναι ισοδύναμες με τον τύπο Taylor των αντίστοιχων τάξεων και

έχουν πάρει το όνομά τους.

Ολες οι μέθοδοι Runge-Kutta έχουν την μορφή

Vi+l = yt + Ηφ( xj . Vi . h )

όπου η συνάρτηση φ είναι μια κατάλληλη προσέγγιση της f ( χ , y ) στο

διάστημα [ Xj , Xj+j ].

Ο υπολογισμός της φ για μέθοδο δεύτερης τάξης Runge-Kutta γίνεται ως

εξής :

Στο διάστημα [ χ,· , xj+i ] έχουμε

φ = akj + bl<2

Vi+l = yi + h ( aki + bk2 )

Av πάρουμε k j = f ( Xj , yj ) ,

k2 = f ( Xi + ph , y,- + qhf ( Xj . y j))

= f ( Xj + ph , yj + qhki )

και αν αναπτύξουμε την k2 κατα Taybr έχουμε

k2 = f ( Xj + ph , yi+ qhf ( x j , y j))

= f ( Xj +yj ) + phf ( Xj . yj) + qhf (xj . y j) f ( Xj , y j) + O ( h2 )

Με αντικατάσταση έχουμε :

yj+1 = yj + h [ af { Xj , y j) + bf ( X j, y j) ]

+ h [ bpfx ( X j, yj) + bqf ( X j, Vi) fy ( X j, y j) ] + O { h )

Av αναπτύξουμε την y(x) κατά Taylor έχουμε

yi ( Xj + h ) = yj+i = y(xj) + hf ( X j. y(xj))

+ ( h / 2 ! ) f ’ (xj,y(xi)) + (h / 3 !) Π ξ Λ

y ( Xj + h ) = yj+i = yj+l(xj) + hf ( X j. y(xj))

+ (h 2 / 2! ) f ’ (xj.y(x|)) + (h 3/30 V’ ( IMO)

Page 18: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

όπου f’ = ίχ + ffy

Αυ θεωρήσουμε ότι οι ουντελεστές των δυνάμεων του h στις δυό μορφές

τησ y είναι ίσοι, με εξίσοοση των όρων παίρνουμε :

a + b = 1

bp = 1/2

bq = 1/2

Οι τρείς εξισώσεις περιέχουν τέσσερις αγνώστους απο τους οποίους ο

ένας μπορεί να ορισθεί αυθαίρετα.

Αν πάρουμε b = 1/2 , έχουμε ρ = q = 1 και a = 1/2

Ο τύπος τότε γίνεται h

Vi+l = Vi + -------[ ί ( Xi , Vi) + f ( Xi + h , Vi + hf { Xi , yj ) ) ]2

και λέγεται Βελτιωμένη μέθοδος του Euler ή μέθοδος Heun.

Αν πάρουμε b = 1, τότε έχουμε ρ = q = 1/2 και a = 0.

Ο τύπος τότε γίνεται :h h

yj+1 = Vi + hf [ Xj + — , Vi + — f ( X j, y j) ]2 2

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

του Euler.

Η μέθοδος τρίτης τάξης Runge-Kutta αναπτύσεται κατα τον ίδιο τρόπο.

Παίρνουμε

φ = aki + bk2 + cks ,

όπου τα k i , k2 , k3 ορίξονται ως εξής :

Page 19: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

kl = f ( x j . y,-)

k2 = f ( Xj + ph . yj + qhki )

ks = f ( Xj + rh , yj + shki + thk2 )

και yj+i = yj + h ( ak j + bk2 + ck3 )

Για να προσδιορίσουμε τις σταθερές a , b , c , p , r , t , s , αναπτύσσσυμε

κατα Taylor τα k2 , k3 στο σημείο ( Xj , yj ) σαν συναρτήσεις δυο

μεταβλητών. Ακόμη η y(x) αναπτύσεται KaTaTaybr και εξισώνουμε τους

συντελεστές τών δυνάμεων του h μέχρι h . Από την εξίσωση των

συντελεστών προκύπτουν οι σχέσεις :

a + b + C = 1

bp + cr = 1/2

bp2 -I = 1/3

cps = 1/6

p = q

r = s + t

Επειδή έχουμε έξη εξισώσεις με οκτώ αγνώστους

αγνώστους μπορούν να ορισθούν αυθαίρετα.

Αν πάρουμε a = 1/6 , c = 1/6 βρίσκουμε

b = 4/6 , ρ = q = 1/2 , Γ = 1 , S = -1 , t = 2

και τελικά ο τύπος γίνεταιh

Vi+l = ys + — ( kl + 4k2 + ks )6

όπου ki = f ( Xj , yj )

1 1k2 = f ( Xj + — h , yj + — hk )

2 2ks = f { Xj + h , yj - hk + 2hk )

Page 20: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ο περισσότερο γνωστός τύπος των Runge-Kutta είναι ο τύπος τέταρτης

τάξης. Η εξαγωγή του τύπου Runge-Kutta τέταρτης τάξης γίνεται με

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

αυθαίρετα. Ανάλογα με την εκλογή των παραμέτρων αυτών προκύπτουν

διάφορες μορφές τύπων Runge-Kutta τέταρτης τάξης.

Η παρακάτω μορφή έχει δοθεί από τον Runge

Vi+l = Vi + — ( ki + 2k2 + 2k3 + k4 ) ,6

όπου kj = f { Xj , yj )

1 1k2 = f ( Xj + — h , yj + — h k i)

2 21 1

k3 = f ( Xj + — h , yj + — hk2 ) 2 2

k4 = f ( Xj + h , yj + hk3 )

H παρακάτω μορφή έχει δοθεί από τον Kutta

Vi+l = yi + — ( ki + 3k2 + 3k3 + k4 ) . 8

όπου ki = f ( X j, y j)

1 1k2 = f ( Xj + — h , yj + — h k i)

3 3

Page 21: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

2 1k3 = f ( Xi + — h , i/j----- hki + hk2 )

k4 = f ( Xj + h , 5/j + hki - hk2 + hk3)

H μορφή που χρησιμοποιείται περισσότερο σε προγράμματα ηλεκτρονικών

υπολογιστών είναι του Gill και λέγεται Runge-Kutta-Gill

h 1 1Vi+1 = y j+ — ( k i + 2 ( l ----- ) k 2 + 2 ( l + — ) k 3 + k4 ) ,

6 δ δ

όπου kl = f ( Xj , y i)

1 1k2 = f ( Xj + — h , yj + — h k i )2 2

1 1 1 1k3 = f [ Xj + — h , yj + ( ------+ — ) hki + (1 ------- ) hk2 ]

2 2 δ δ

k4 = f [ Xj + h , y j------hk2 + (1 + — hk3) ]δ δ

και δ η τετραγωνική ρίζα του δύο.

Page 22: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ TU RBO PASCAL

3.1. Οι ενότητες της TURBO PASCAL.

ΚΕΦΑΛΑΙΟ 3

Από dnoyn προγραμματιστικής πρακτικής οι ενότητες της Τ Ρ . είναι ένα

εξαιρετικό εργαλείο. Επιτρέπουν στον προγραμματιστή να δημιουργεί

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

κΑπ.

Μια ενότητα αποτελείται :

α) Από την επικεφαλίδα π.χ. unit onoma;

Η επικεφαλίδα μιας ενότητας προγράμματος ξεκινάει με το λεξικό

σύμβολο unit στη συνέχεια ακολουθεί ένα όνομα και τελειώνει με το

σύμβολο ' ; '.

β) Το λεξικό σύμβολο interface

Μετά από αυτό ορίζουμε σταθερές, τύπους κΛ.π. όπως μετά την BEGIN και

πριν το κυρίως σώμα, καθώς και τις επικεφαλίδες των διαδικασιών και

συναρτήσεων που θα δημιουργήσουμε.

Αυτό το μέρος λέγεται μέρος διασύνδεσης ( interface p art).

γ) To λεξικό σύμβολο implementation

Μετά από αυτό προγραμματίζουμε μία-μία τις διαδικασίες και τις

συναρτήσεις.

Αυτό είναι το μέρος υλοποίησης ( implementation p art).

Page 23: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

δ) Τέλος υπάρχει το μέρος εκκίνησης { initialization part ), που μπορεί να

είναι σύνθετη εντολή ή κενό.

Οπως ένα πρόγραμμα της PASCAL, έτσι και μια ενότητα, τελειώνει με μια

τελεία ( . ).

3.2. Το νόημα των τμημάτων μιας ενότητας.

- Το όνομα στην επικεφαλίδα μας χρησιμεύει για να δηλώσουμε τη χρήση

της.

Την ώρα που η Τ Ρ . θα μάξει να βρεί την ενότητα για να τη συνδέσει στο

πρόγραμμά μας, θα πρέπει να υπάρχει ένα αρχείο που να έχει σαν όνομα,

το όνομα ενότητας και κατάληξη “.TPU".

- Οτιδήποτε ορίζεται ή δηλώνεται στο μέρος διασύνδεσης μιας ενότητας

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

αντικείμενα είναι ανοικτά ή ορατά.

- Οτιδήποτε ορίζεται ή δηλώνεται στο μέρος υλοποίησης μιας ενότητας

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

ενότητας. Λέμε ότι αυτά τα αντικείμενα είναι εσωτερικά ή κρυμμένα.

- Οι εντολές του μέρους εκκίνησης εκτελούνται μια φορά, όταν αρχίζει η

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

3.3 Χρήσιμες πληροφορίες για τις ενότητες.

- Για να είναι χρήσιμη μια ενότητα θα πρέπει να μεταγλωτίζεται στο δίσκο

( σε αρχείο TPU ). Η μεταγλώττιση στη μνήμη είναι χρήσιμη μόνο για

έλεγχο του συντακτικού.

Page 24: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

"end".

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

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

παραπάνω ή και τα τρία. Μια ενότητα με κενό μέρος διασύνδεσης είναι

κατ' αρχήν άχρηστα

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

τρόπο που τις χρησιμοποιεί και ένα πρόγραμμα. Προσοχή μόνο ότι η

φράση χρήσης γράφεται στο μέρος διασύνδεσης.

Page 25: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 4

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

Η ενότητα DifEqu περιλαμβάνει τα εξής μέρη :

Α) Το τμήμα διασύνδεσης όπου ορίζονται :

- Η σταθερά MaxNP οτην οποία δηλώνεται το μέγεθος των πινάκων των

αποτελεσμάτων.! Στην προκειμένη περίπτοκτη η τιμή της είναι 1000 )

- Οι τύπος Rxy σαν συνάρτηση δύο μεταβλητών τύπου REAL και

αποτελέσματος επίσης τύπου REAL

- Ο τύπος RlArr σάν μονοδιάστατος πίνακας με μέγεθος MaxNP.

- Οι διαδικασίες mEuler, mRunge, mHeun, mGill και mEuler2.

Σ’ αυτό το τμήμα δεν ορίζεται καμιά μεταβλητή

Β) Το τμήμα υλοποίησης.

Οι παράμΒτροι είναι ίδιοι για όλες τις μεθόδους. Αναλυτικά c

και η σημασία τους είναι η εξής :

Μεταβλητή_________ Τύπος__________Σημασία_______________

1 FUNCTION Ονομα της συνάρτησης της y’

2 REAL Ακρίβεια υπολογισμού

3 REAL Αρχική τιμή του χ

4 REAL Τελική τιμή του χ

5 REAL Αρχική τιμή της y(x)

6 INTEGER Βήμα εγγραφής

Page 26: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ARRAY

ARRAY

Πίνακας αποθήκευσης του χ

Πίνακας αποθήκευσης της y(x)

Σε μια προσπάθεια να μην αυξηθεί άλλο ο αριθμός των παραμέτρων, το

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

[1000] του πίνακα έγγραφης των ημών του χ. Επίσης ο κωδικός λάθους

αποθηκεύεται στην θέση [1000] του πίνακα εγγραφής των τιμών της y(x). Η

τιμές που παίρνει σημαίνουν :

0 : Δεν υπάρχει λάθος

1 : Η μέθοδος κλήθηκε με λάθος ορίσματα

2 : Η λύση απαιτεί πίνακες μεγαλύτερων διαστάσεων από MaxNP

Σε κάθε διαδικασία ορίζονται οι κοινές μεταβλητές :

Nmax Integer Μετρητής του πίνακα

k Integer Υπολογισμοί που θα γίνουν

kO Real Βοηθητική μεταβλητή γιπ το k

η Integer Μετρητής του βρόγχου ( 0 - k )

nStep Integer Μετρητής εγγραφής

X Real Περιέχει την τιμή του χ

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

Πρώτα ελέγχεται αν η ακρίβεια και το βήμα εγγραφής είναι μικρότερα ή

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

την αρχική. Αν συμβεί κάποια από αυτές τις περιπτώσεις η θέση [1000] του

πίνακα εγγραφής των τιμών της y(x) παίρνει τιμή ένα και η διαδικασία

τελειώνει

Page 27: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Μετά βρίσκεται και ελέγχεται το πλήθος των αριθμών της λύσης, αν είναι

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

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

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

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

Η βοηθητική μεταβλητή kO βοήθησε να ξεπεραστεί το πρόβλημα ότι η

εντολή trunc δεν δίνει αποτέλεσμα για μεγάλους αριθμούς, που θα

προέκυπταν από εσφαλμένη κλήση της μεθόδου.

Έτσι χρησιμοποιείται για τον έλεγχο, αν ο αριθμός των αποτελεσμάτων

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

εντολή trunc που δεν θα έχει πρόβλημα αφού η kO θα είναι σίγουρα

σχετικά μικρός αριθμός. Ο προγραμματιστής που θα θελήσει να αυξήσει

κατά πολύ το μέγεθος των πινάκων θα πρέπει να αντιμετωπίσει το

παραπάνω πρόβλημα με διαφορετικό τρόπο.

Ο ρυθμός εγγραφής βασίζεται στον μετρητή nStep. Ο αριθμός των

υπολογισμών για να έχουμε μια ικανοποιητική ακρίβεια κατα την εκτέλεση

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

θέλουμε πολύ λιγότερους αριθμούς. Αυτός είναι και ο λόγος ύπαρξης

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

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

μέρος της λύσης.

Στις μεθόδους Runge - Kutta και Runge - Kutta - Gill ορίζονται επιπλέον

οι μεταβλητές kl, Ι<2, k3, k4 τύπου REAL για χρήση στον αναδρομικό

τύπο.

Στην μέθοδο Runge - Kutta - Gill ορίζεται η μεταβλητή a τύπου REAL και

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

τον αναδρομικό τύπο.

Page 28: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

unit DlfEqu ;INTERFACE

constMaxNP = 1000 ;

type

Rxy = Functlon(x,y : Real); Real;RlArr = Array{0_MaxNP] of Real;

procedure mEuler(syn : Rxy ;fO<i;(0,Yl : Real;Nout : integer;Var Xout.Yout: RlArr );

procedure mRunge(syn ΚΧΙΛΟ,ΥΙ Nout

Rxy ; Real; integer ;

Var Xout.Yout: RlArr ) ;

procedure mHeun{syn Rxy ;KXl.X0,Yi Real;Nout integer ;Var Xout.Yout: RlArr):

procedure mGilKsyn Rxy ;h.Xl.X0.Yi Real;Nout Integer;Var Xout.Yout RlArr ) ;

procedure mEuIer2(syn Rxy ;h.Xi.X0.Yi Real;Nout integer ;Var Xout.Yout: RlArr);

IMPLEMENTATION

Page 29: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

..........................................................{ procedure mEuler(syn : Rxy;{ K Xi, XO, Yt : Real;{ NOut : Integer;{ var XOut.YOut: RlArrh

{{1. Μέθοδος EULER για την επίλυση της διαφορικής εξίσωσης :{ ν' = f(x, V){{ syn; υποπρόγραμμα συνάρτηση που υλοποιεί την f { h: βήμα υπολογισμού{ Xi: αρχική τιμή του χ{ ΧΟ: τελική τιμή του χ { Yi: αρχική τιμή της y(x){ NOut: βήμα εγγραφής στους πίνακες { XOut: πίνακας αποθήκευσης των τιμών του χ { YOut: πίνακας αποθήκευσης των τιμών της y(x){ X0ut[1000]: μήκος εγγραφής στους πίνακες{ Y0ut[1000) κωδικός λάθους. Τιμές:

0: ΟΚ1: Η μέθοδος EULER κλήθηκε με λάθος ορίσματα.2: Ζητήθηκαν περισσότερες από MaxNP τιμές.

Έκδοση 1.00 Παπαδόπουλος Όμηρος 1992 ΤΕΙ Καβάλας }----------------------------------------------------------------------------------------------J

procedure mEuler(syn : Rxy ;KXi^O.Yi : Real ;N out: Integer ;Var Xout.Yout : RlArr ) ;

var

Nmax Integerk IntegerkO Realη IntegernStep IntegerX Real

{ Μετρητής του πίνακα }{ Υπολογισμοί που θα κάνει}{ Βοηθητική μεταβλητή για το k }{ Μετρητής του κύριου βρόγχου (O-k)} { Μετρητής εγγρφής }{ Περιέχει το χ }

Page 30: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{ Απαγορεύεται η ακρίβεια h να είναι μικρότερη λ ίση με μηδέν, }{ η τελική τιμή του X να είναι μικρότερη ή ίση με την αρχική, } { και το βήμα εγγραφής πρέπει να είναι μεγαλύτερο από μηδέν. }

if (h<=0) or (xO<=xi) or (nOut<=0) then Y0ut[1000] := 1

else begin

kO:=(xO-xi)/h ; { Πόσοι υπολογισμοί 8α γίνουν ; }

{ Δεν πρέπει ο αριθμός των αποτελεσμάτων να είναι }{ μεγαλύτερος απο τις διαστάσεις των πινάκων xOut.yOut }

if ((kO/nOut)>Maxnp) then Y0ut[1000] := 2

else begin

Y0ut[1000] .·= 0 ; k := trunc(kO) ;

{ Αρχή κύριας ρουτίνας }

η5ίβρ.·=0 ;Nmax:=0 ;

begin

For n:=0 to k do BeginX := xi + (n’h) ;yi := yl + (h*syn(x,yl)); { Υπολογισμός της Υ(χ) nStep:=nStep+lif nStep = nOut then

beginxOut[Nmax] := x+h ; yOut[Nmax] := yi ;

{ Γράφεται το αποτέλεσμα }{ στους πίνακες xOut και yOut. }

Nmax := Nmax + 1 ;

nStep ?= 0 ; { Μηδενισμός του μετρητή εγγραφής.}end ; { if nStep = . . . )

Page 31: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

end { F o r };

x0ut[1000] := Nmax-1 ; { Εδώ αποθηκεύεται το μήκος εγγραφής του πίνακα. }

end; { If ((k/nOut) > . . . } end; { if (h<=0) or . . . }

end; { Procedure mEuler }

{----------------------------------------------------------------------------------- --------------------------------

Page 32: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{ procedure mRunge(syn ; Rxy; ;{ h, Xi, XO, Y i : Real; ]{ NOut ; Integer; ]{ var XOut,YOut: RlArrh ]

{{ 2^ έ8 ο δ ο ς RUNGE-KUTTA για την επίλυση της διαφορικής εξίσωσης :

^ = f(x, y)

syn: υποπρόγραμμα συνάρτηση που υλοποιεί την fh: βήμα υπολογισμούXi: αρχική τιμή του χΧΟ: τελική τιμή του χΥΐ; αρχική τιμή της y(x)NOut; βήμα εγγραφής στους πίνακες XOut: πίνακας αποθήκευσης των τιμών του χ YOut: πίνακας αποθήκευσης των τιμών της y(x)X0ut[1000]: μήκος εγγραφής στους πίνακες YOutflOOO]; κωδικός λάθους. Τιμές;

0: ΟΚL Η μέθοδος RUNGE-KUTTA κλήθηκε με λάθος ορίσματα. 2: Ζητήθηκαν περισσότερες από MaxNP τιμές.

Έκδοση 1.00 Παπαδόπουλος Όμηρος 1992 ΤΕΙ Καβάλας

procedure mRunge(syn : Rxy ;h^ i^0,Y i ; Real ;Nout ; Integer ;Var Xout,Yout ; RlArr f.

var

Nmax Integer ; { Μετρητής του πίνακα }k Integer ; { Υπολογισμοί που θα κάνει}kO Real ; { Βοηθητυιή μεταβλητή για το k }n Integer ; { Μετρητής του κύριου βρόγχου (0-k)}nStep Integer ; { Μετρητής εγγρφής }kl,k2,k3,k4 Real ; { βοηθητικές μεταβλητές του αλγόριθμου }X Real ; { Περιέχει το χ }

Page 33: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{ Απαγορεύεται η ακρίβεια h να είναι μικρότερη ή ίση με μηδέν,}{ η τελική τιμή του X να είναι μικρότερη ή ίση με την αρχική, } { και το βήμα εγγραφής πρέπει να είναι μεγαλύτερο από μηδέν. }

if (h<=0) or (xO<=xi) or (nOut<=0) then Y0ut(1000] := 1

else begin

kO:=(xO-xi)/h ; { Πόσοι υπολογισμοί θα γίνουν ; }

{ Δεν πρέπει ο αριθμός των αποτελεσμάτων να είναι }{ μεγαλύτερος απο τις διαστάσεις των πινάκων xOut,yOut }

if ((kO/nOut)>Maxnp) then Y0ut[1000] := 2

else begin

YOutflOOO] := 0 ; k := trunc(kO);

{ Αρχή κύριας ρουτίνας }

nStep :=0 ;Nmax r=0 ;

For n:=0 to k do begin

begin

x.-=xi+(n*h):kL‘=h*syn(x,yi);k2:=h*syn(x+0.5’h,yi+0.5’kl);k3:=h‘syn(x+0.5‘h,yi+0.5‘k2):k4;=h*syn(x+Kyi+k3);

yi:=yi+{kl+2’k2+2*k3+k4)/6; {Υπολογισμός της Υ(χ)}

nStep;=nStep+l ;if nStep = nOut then { Γράφεται το αποτέλεσμα }

{ στους πίνακες xOut και yOut.}

Page 34: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

beginxOut[Nmax] := x+h ; yOut[Nme»x] := yi ;

Nmax := Nmax + 1 ;

nStep := 0 ; { Μηδενισμός του μετρητή εγγραφής.}end ; { if nStep = . . . }

end ; { for }

x0ut[1000] ?= Nmax-1 ; { Εδώ αποθηκεύεται το μήκος εγγραφής του πίνακα }

end ; { if ((k/nOut > . . . } end ; { if (fvO) or . . . }

end; { Procedure mRunge }

{ -

Page 35: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{ procedure mHeun(syn :.............................................................)

Rxy; ]{ h, Xi, XO, Yi : Real; ]{ NOut : Integer; ]{ var XOut,YOut : RlArr); ]

1 j {3. Μέθοδος HEUN για την επίλυση της διαφορικής εξίσωσης : ]

{ y’ = f(x, y) ] / 1

{ syn; υποπρόγραμμα συνάρτηση1

που υλοποιεί την f ]{ K‘ βήμα υπολογισμού { Xi: αρχική τιμή του χ{ ΧΟ: τελική τιμή του χ{ Yi: αρχική τιμή της y(x){ NOut: βήμα εγγραφής στους πίνακες { XOut; πίνακας αποθήκευσης των τιμών του χ { YOut: πίνακας αποθήκευσης των τιμών της y{x){ XOutflOOO]; μήκος εγγραφής στους πίνακες { YOutflOOO]: κωδικός λάθους. Τιμές:{ 0: ΟΚ{ 1: Η μέθοδος HEUN κλήθηκε με λάθος ορίσματα{ 2; Ζητήθηκαν περισσότερες από MaxNP τιμές.

{{ Έκδοση 1.00

{.................................

Παπαδόπουλος Όμηρος 1992 ΤΕΙ Καβάλας }--------------------------------------------------------------------- J

procedure mheun(syn : Rxy ;hXi^O.Yi: R eal;Nout ; integer ;Var Xout,Yout : RlArr ) ;

var

Nmax Integer ; { Μετρητής του πίνακα }k Integer ; { Υπολογισμοί που θα κάνει }kO Real ; { Βοηθητική μεταβλητή για το k }n Integer ; { Μετρητής του κύριου βρόγχου (O-k) }nStep Integer ; { Μετρητής εγγρφής }X Real ; { Περιέχει το χ }

Page 36: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{ Απαγορεύεται η ακρίβεια h να είναι μικρότερη ή ίση με μηδέν, }{ η τελική τιμή του X να είναι μικρότερη ή ίση με την αρχική, }{ και το βήμα εγγραφής πρέπει να είναι μεγαλύτερο από μηδέν. }

if (h<=0) or (xO<=xi) or (nOut<=0) then Y0ut(1000] := 1

else begin

kO:=(xO-xi)/h ; { Πόσοι υπολογισμοί δα γίνουν ; )

{ Δεν πρέπει ο αριθμός των αποτελεσμάτων να είναι }{ μεγαλύτερος απο τις διαστάσεις των πινάκων xOut.yOut }

if {(kO/nOut)>Maxnp) then YOutflOOO] .■= 2

else begin

YOutllOOO] .·= 0 ; k := trunc(kO);

{ Αρχή κύριας ρουτίνας }

nStep.-=0 ;Nmax.‘=0 ;

For n:=0 to k do Begin x:=xl+(n‘h);

yir=yi+0.5*h*(syn(x,yi)+syn(x+Kyi+h*syn(x,yi))); { Υπολογισμός της Υ {χ)}

nStep:=nStep+l;if nStep = nOut then { Γράφεται το αποτέλεσμα }

{ στους πίνακες xOut και yOut. }beginxOut[Nmax] := x+h ; yOut[Nmax] := y i ;

begin

Nmax := Nmax + 1 ;

Page 37: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

nStep := Ο ; { Μηδενισμός tou μετρητή εγγραφής.}end ; { if nStep = . . . }

end ; { For }

x0ut[1000] := Nmax-1; { Εδώ αποθηκεύεται το μήκος εγγραφής του πίνακα. ] end ; { if {(k/nOut). . . . }

end : { if (h«=0) or . . . } end ; { Procedure mHeun }

{ -

Page 38: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

--------------------------------------------------------------------------------------------------------------------J

{ procedure mGilKsyn; Rxy, }{ h, Xi, XO, Yi : Reat }{ NOut : Integer; }{ var XOut,YOut ; RlArr); }

{ }{4.Μέ8οδος RUNGE-KUTTA-GILL yta την επίλυση της διαφορικής εξίσωσης : }{ ν’ = f(x. y) }{ }{ syn: υποπρόγραμμα συνάρτηση που υλοποιεί την f }{ h: βήμα υπολογισμού }{ Χΐ: αρχική τιμή του χ }{ ΧΟ; τελική τιμή του χ }{ Υΐ: αρχική τιμή της y(x) }{ NOut: βήμα εγγραφής στους πίνακες }{ XOut; πίνακας αποθήκευσης των τιμών του χ }{ YOut: πίνακας αποθήκευσης των τιμών της y(x) }{ XOut[1000J μήκος εγγραφής στους πίνακες }{ YOut[1000J κωδικός λάθους. Τιμές: }{ 0: ΟΚ }{ 1: Η μέθοδος R. Κ. GILL κλήθηκε με λάθος ορίσματα. }{ 2: Ζητήθηκαν περισσότερες από MaxNP τιμές. }

{ }{ Έκδοση 1.00 Παπαδόπουλος Όμηρος 1992 ΤΕΙ Καβάλας }-------------------------------------------------------------------------------------------------------------------- J

procedure mGilKsyn : Rxy ;ΐαΐ^ίΟ ,Υΐ: R eal;Nout : integer ;Var Xout.Yout : RlArr ^

var

Nmax : Integerk : IntegerkO : Realn : IntegernStep : Integera : Real

{ Μετρητής του πίνακα }{ Υπολογισμοί που θα κάνει }{ Βοηθητική μεταβλητή για το k }{ Μετρητής του κύριου βρόγχου (O-k)} { Μετρητής εγγρφής }{ l/sqrt(2) }

Page 39: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

kl,k2,k3,k4 : Real ; { βοηθητικές μεταβλητές του αλγόριθμου }X : Real ; { Περιέχει το χ }

begin

{ Απαγορεύεται η ακρίβεια h υα είναι μικρότερη ή ίση με μηδέν, }{ η τελική τιμή του X να είναι μικρότερη ή ίση με την αρχική, }{ και το βήμα εγγραφής πρέπει να είναι μεγαλύτερο από μηδέν. }

if (h<=0) or (xO<=xi) or (nOut<=0) then Y0ut[1000] := 1

else begin

kO;=(xO-xi)/h ; { Πόσοι υπολογισμοί θα γίνουν ; }

{ Δεν πρέπει ο αριθμός των αποτελεσμάτων να είναι }{ μεγαλύτερος απο τις διαστάσεις των πινάκων xOut.yOut }

if ((kO/nOut))Maxnp) then Y0ut[1000] := 2

else begin

YOutflOOO] := 0 ; k := trunc(kO);

{ Αρχή κύριας ρουτίνας }

nStep:=0 ;Nmax ?=0 ; a := l/sqrt(2) ;

For n:=0 to k do begin

x:=xi+(n‘h);kl:=syn(x,yi);k2:=syn(x+0.5*Kyl+0-5*h*kl);k3:=syn(x+0.5*h,yi+(-0.5+a)’h*kl+(l-a)*h’k2);k4;=syn(x+h,yi-a*h*k2+(l+a)‘h‘k3):

yi:=yi+h*(kl+2*(l-a)*k2+2*(l+a)*k3+k4)/6; {Υπολογισμός της Υ(χ)}

Page 40: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

nStep:=nStep+l;if nStep = nOut then { Γράφεται το αποτέλεσμα }

{ στους πίνακες xOut και yOut.}beginxOut[Nmax] := x+h ; yOut[Nmax] := y i;

Nmax ;= Nmax + 1 ;

nStep r= 0 ; { Μηδενισμός του μετρητή εγγραφής.}end ; { if nStep = - . . }

end ; { for }

x0ut[1000] ;= Nmax-1; { Εδώ αποδηκεύεται το μήκος εγγραφής του πίνακα. }

end ; { if ((k/nOut > . . . } end : { if (h<=0) o r . . . }

end : {procedure mGill)

{ -

Page 41: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

{................................................{ procedure mEuler2(syn :

{{{{{5.

{{{{{{

h, Xi, XO, Yi : NOut :var XOut.YOut:

Rxy:Real;integer;RIArrh

Μέθοδος EULER2 για την επίλυση της διαφορικής εξίσωσης

y’ = f(x, y)

syn; υποπρόγραμμα συνάρτηση που υλοποιεί την fh: βήμα υπολογισμούXi: αρχική τιμή του χΧΟ: τελική τιμή του χYi: αρχική τιμή της y(x)NOut: βήμα εγγραφής στους πίνακεςXOut: πίνακας αποθήκευσης των τιμών του χYOut; πίνακας αποθήκευσης των τιμών της y(x)X0ut[1000]: μήκος εγγραφής στους πίνακες Y0ut[1000]: κωδικός λάθους. Τιμές:

0: ΟΚ1: Η μέθοδος EULER2 κλήθηκε με λάθος ορίσματα.2: Ζητήθηκαν περισσότερες από MaxNP τιμές.

Έκδοση L00 Παπαδόπουλος Όμηρος 1992 ΤΕΙ Καβάλας }----------------------------------------------------------------------------- --------------- J

procedure meuler2(syn : Rxy ;h^i^O.Yi : R eal;Nout : integer;Var Xout.Yout : RlArr ) ;

var

Nmax Integer ;k Integer ;kO Real ;η Integer;nStep Integer;X Real ;

{ Υπολογισμοί που θα κάνει }{ Βοηθητική μεταβλητή για το k )

{ Περιέχει το χ }

Page 42: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

begin

{ Απαγορεύεται η ακρίβεια h να είναι μικρότερη ή ίση με μηδέν,} { η τελική τιμή του X να είναι μικρότερη ή ίση με την αρχική, } { και το βήμα εγγραφής πρέπει να είναι μεγαλύτερο από μηδέν. }

if (h<=0) or (xO<=xi) or (nOut<=0) then Y0ut[1000] ?= 1

else begin

kO:=(xO-xi)/h ; { Πόσοι υπολογισμοί 8α γίνουν ; }

{ Δεν πρέπει ο αριθμός των αποτελεσμάτων να είναι }{ μεγαλύτερος απο τις διαστάσεις των πινάκων xOut,yOut }

if ((kO/nOut)>Maxnp) then Y O u tflO O O ]2

else begin

YOutflOOO] := 0 ; k := trunc(kO);

{ Αρχή κύριας ρουτίνας }

nStep.-=0 ;Nmax:=0 ;

For n;=0 to k do Begin x:=xi+(n’h

yi;=yi+h’syn(x+(h/2),yi+(h/2)*syn(x,yi)); { Υπολογισμός της Υ(χ) }

nStep:=nStep+l ;if nStep = nOut then { Γράφεται το αποτέλεσμα }

{ στους πίνακες xOut και yO ut.}

beginxOut[Nmax] := x+h; yOut[Nmax] := y i :

Nmax r= Nmax + 1 ;

Page 43: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

nStep := Ο ; end ; { if nStep =

end ; { For }

{ Μηδενισμός του μετρητή εγγραφής.} . . . }

x0ut[1000] Nmax-1; { Εδώ αποθηκεύεται το μήκος εγγραφής του πίνακα.}

end ; { if ((k/nOut >. . . } end ; { if (h<=0) or . . . )

end ; { Procedure mEuler2 }

{----------------------

Page 44: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

BeginEnd.

Page 45: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 5

ΤΕΚΜ ΗΡΙΩΣΗ ΓΙΑ ΤΟΝ ΧΡΗΣΤΗ.

5.1. Δόμηση του προγράμματος χρήσης της ενότητας.

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

να δηλώσουμε ότι 8α χρησιμοποιήσουμε την ενότητα. Αυτό γίνεται με την

φράση uses DilEq. Φυσικά μπορούμε να χρησιμοποιήσουμε κι άλλες

μονάδες π.χ. uses DilEq,crt,Graphics

Μέσα σε εντολή VAR πρέπει να ορίσουμε μαζί με τις άλλες μεταβλητές

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

αυτούς 8α απο8ηκευτούν οι λύσεις των με8όδων. Αν οι μεταβλητές-

πίνακες ήταν οι xex και yex 8α τις ορίζαμε ως εξής:

VAR

xex,yex : RlArr ;

Ο τύπος ΑΙΑγγ έχει ορισ8εί στο τμήμα διασύνδεσης της ενότητας DifEq

σαν μονοδιάστατος πίνακας 1000 8έσεων.

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

μακρινή κλήση στην μνήμη : {$Ε+}

Στην συνέχεια ορίζουμε με εντολή FUNCTION μία συνάρτηση δύο

μεταβλητών τύπου REAL. Αυτή δηλώνει την y’.

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

Page 46: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Μέθοδος Ονομα κλήσης

L Euler mEuler

2. Runge-Kutta mRunge

3. Heun mHeun

4. Runge-Kutta-Gill mGill

5. Τροποποιημένη μέθοδος

του Euler mEuler2

5.2. Παράμετροι των εντοΛών επίλυσης.

Ολες οι εντολές δέχονται τις ίδιες παραμέτρους. π.χ. η εντολή

mHeun( syn , 0 . 0 0 1 , 0 , 2 , 0 , 1 0 0 , xex , yex ) , έχει την εξής σημασία :

Ετους δυο πίνακες xex και yex θα αποθηκευτούν οι τιμές x+h*i και

y(x+h*i) αντίστοιχα. Το βήμα h είναι το γινόμενο 0.001*100 = 0.1 Ο

αλγόριθμος θα υπολογίζει την y(x) με ακρίβεια 0.001 αλλά η εγγραφή

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

αποτελέσματος θα είναι 0.1

Ο υπολογισμός θα γίνει στο διάστημα [ 0,2 ] με yQ = 0

Αναλυτικά η σημασία των παραμέτρων είναι :

Μεταβλητή_________ Τύπος_________ Εημασία_______________________,

1 FUNCTION Ονομα της συνάρτησης της y*

2 REAL Ακρίβεια υπολογισμού

3 REAL Αρχική τιμή του χ

4 REAL Τελική τιμή του χ

5 REAL Αρχική τιμή της y(x)

6 INTEGER Βήμα εγγραφής

7 ARRAY Πίνακας αποθήκευσης του χ

8 ARRAY Πίνακας αποθήκευσης της y(x)

Page 47: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

Μετά την εκτάλεοττ κάποιας εντολής επίλυσης, στην θέση 1000 του

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

εγγραφής και στην αντίστοιχη θέση του πίνακα των τιμών της γ(χ),

αποθηκεύεται η ημή του κωδικού λάθους. Αυτές τις τιμές θα τις

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

αποτελεσμάτων.

5.3. Επιλογή της μεθόδου.

Ολες οι μέθοδοι είναι απλού βήματος άρα το μοναδικό κριτήριο επιλογής

είναι η συνάρτηση ακρίβειας και ταχύτητας που απαιτούμε.

Για παράδειγμα η μέθοδος Euler βάζοντας μικρή ακρίβεια π.χ. 0.1 και

μονάδα σαν βήμα εγγραφής, δεν έχει μεγάλη ακρίβεια, αλλά θα τύχει να

χρησιμοποιηθεί πολλές φορές επειδή είναι ταχύτατη.

Η αξιολόγηση των μεθόδων βάση την ακρίβεια είναι η εξής :

1 ) Μέδοδος Range - Kutta - Gill

2 ) Range - Kutta

3 ) Euler2

4 ) “ Heun

5 ) ■■ Euler

Υπενθυμίζεται ξανά ότι όσο ακριβέστερη είναι μια μέθοδος, τόσο ποιο αργή είναι.

Page 48: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 6

ΕΦΑΡΜ ΟΓΕΣ ΣΕ ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ

6.1 Γεν ικές εξισώσεις των ηλ. κυκλωμάτων.

Θεωρούμε ένα ηλ κύκλωμα, στο οποίο συνδέονται σε σειρά μια πηγή με

ηλεκτρεγετική δύναμη Ε ( Volt ), μια αντίσταση R ( Ohm ) και ένα πηνίο

αυτεπαγωγής L ( Henry ).

Σύμφωνα με το νόμο του Kirchhoff, η ηλεκτρεγερτική δύναμη είναι

οποιαδήποτε στιγμή ίση με το άθροισμα της πτώσεως τάσεως L(dl/dt) στο

πηνίο και της πτώσεως τάσεως RI στην ανπσταση, όπου I = I ( t ) είναι η

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

δηλ. έχουμε:dl

L -------+ RI = E ( 1 )dt

Θεωρούμε τώρα ότι ένα ηλ. κύκλωμα, στο οποίο συνδέονται σε σειρά μια

πηγή με ηλεκτρεγερτική δύναμη Ε ( Volt ), μια αντίσταση R ( Ohm ) και

ένας πυκνωτής χωρητικότητας C { Farad ).

Η πτώση τάσεως στον πυκνωτή είναι ίση με Q/C , όπου Q = Q ( t ) είναι

το φορτίο του πυκνωτή. Ο νόμος του Kirchhoff δίνει;Q

RI + -------= Ε ( 2 )C

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

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

δηλ. I = dQ/dt η προηγούμενη εξίσοκτη γίνεταε

Page 49: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

dQ= E ( 3 )

6.2. Εφαρμογή 1

Πηγή με ηλεκρεγερτική δύναμη Ε = 200e“5t ( Volt ) συνδέεται σε σειρά

με μια αντίσταση R = 20 ( Ohm ) και ενα πυκνωτή χωρητικότητας C = 0.01

( Farad ). Να εκφραστούν το φορτίο Q του πυκνωτή και η ένταση [ του

ρεύματος, που διαρρέει το κύκλωμα, με το χρόνο t. Υποθέτουμε ότι όταν t

= 0 είναι Q = 0.

Λύοη

Η Δ.Ε. ( 3 ) γίνεται στην περίπτωση αυτή dQ

------ + 5Q = 10e-5tdt

η οποία είναι γραμμική Δ £. πρώτης τάξης. Αποδεικνύεται ότι η αναλυτική

λύση της εξίσωσης είναι Q = 10 t

Για να εφαρμόσουμε την Δ £. στο πρόγραμμα, την λύνουμε ως προς dQ/dt

= I0e"5t - 5Q και θέτουμε dQ/dt = όνομα της συνάρτησης, t = χ, Q = y.

Το παρακάτω πρόγραμμα εφαρμογής όταν το 'τρέξουμε' μας δίνει την

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

λόγια βρίσκει το φορτίο του πυκνωτή από το 0 μέχρι τα 2 sec με βήμα 0.1

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

Page 50: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

program Exablel;uses crtJDifEqu ;

xex,yex : RIArr ; { ορισμός των πινάκων που θα περιέχουν την λύση } y^HKOS^rCode ; Integer ;

{$F+}

function Syn(x,y:real):real { ορισμός της συνάρτησης } beginSya‘=10*exp(-5*x}-5‘y ; end;

begincirscr,mGHI(Syn,0.001,0^,0,100^ex,yex);

MHKOS := trunc(xexilOOO]); { to μήκος της εγγραφής }ErCode := trunc(yex{1000]); { κωδικός λάθους }

wrltehCwriteln(’—

αριθμητικά αναλυπκά ’);------------------------ Error Code :’,yex{1000)2O):

if ErCode <> 0 then { έλεγχος για λάθος ορίσματα } beginwriteln(’ Εκανες λάθος στο ορίσματα.’) ; writeln{’ Πατα ενα πλήκτρο για να προχωρήσεις.’) ; repeat until keypressed; halt :

end ;

For t=0 to MHKOS do beginwriteln(xex[i]:10:3,’ ’,yex(iμ0;7,’ ’40*xex[i]'exp(-5*xex[i])tl0:7)

end ;

writein ;writeln(’ Πατα ενα πλήκτρο για να προχωρήσεις.’) ;

repeat until keypressed; end.

Page 51: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

6.3. Εφαρμογή 2

Πηγή με ηλεκτρεγερτική δύναμη Ε = 20 συν { 5 t ) ( Volt ), συνδέεται σε

σειρά με μια αντίσταση R = 10 { Ohm ) και ένα πηνίο αυτεπαγωγής L = 2 {

Henry ). Να βρεθεί η ένταση I = ί ( t ) του ρεύματος που διαρρέει το

κύκλωμα. Ο διακόπτης κλείνει όταν t = 0.

Λύση

Η Δ.Ε. γίνεται, στην περίπτωση αυτήdl

------ + 51 = 10 συν ( 5 t )dt

η οποία είναι μια γραμμική ΔΈ. πρώτης τάξης με Ρ ( t ) = 5 και Q ( t ) =

10 συν ( 5 t )

Αποδεικνύεται ότι η αναλυτική της λύση είναι :

I = συν ( 5 t ) + ημ ( 5 t ) -

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

εφαρμογής αντικατασταθούν τα εξής:

Μέσα στην εντολή Function θα ορίσουμε την συνάρτηση

syn = 10*cos(5*x) - 5*y

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

cos(5*xex(i])+sin(5*xex[i])-exp(-5*xex[i])

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

sec απο 0 ως 1 sec.

Page 52: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

ΚΕΦΑΛΑΙΟ 7

ΕΠΙΛΟΓΟΣ

Η δόμηση του προγράμματος της ενότητας είναι τέτοια που επιτρέπει

πολύ εύκολα να γίνει η προσθήκη κάποιας ή κάποιων καινούργιων

μεθόδων. Απλά δηλώνεται όπως και οι υπόλοιπες στο τμήμα διασύνδεσης

και γράφεται στο κυρίως σώμα μετά την εντολή IMPLEMENTATION.

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

3, ώστε να είναι χρήσιμη η ενότητα στα προγράμματά μας.

Για να αλλάξουμε τις τιμές επίλυσης του προγράμματος πρέπει στην αρχή

της ενότητας να αντικαταστήσουμε την MaxNP = 1000 ; με την νέα τιμή.

Φυσικά εκτός των άλλων μπορούμε εύκολα να επεξεργαστούμε γραφικά

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

εκμεταλευόμενοι τους δυο πίνακες αποτελεσμάτων.

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

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

ώστε να είναι ανεξάρτητο απο την ενότητα. Ενας λόγος γι’ αυτό, θα ήταν

ότι το πρόγραμμά μας θα καταλάμβανε μικρότερη μνήμη αν

μεταγλωτίζονταν σαν αρχείο ’exe’ πάνω στον δίσκο.

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

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

ενότητας που περιέχει τους ορισμούς και τις δηλώσεις των μεταβλητών.

Page 53: TEl ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑdigilib.teiemt.gr/jspui/bitstream/123456789/5930/1/STEF111993.pdf · σημεία χ^, χ^, με την διαφορά δυο διαδοχικών

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

X. Φ Ρ Α Γ Κ Α Κ Ι: Μ έθοδοι αριθμητικής ανάλυσης.

Α Ν Δ ΡΕ A Γ. Α Θ Α Ν Α Σ ΙΑ Δ Η : Στοιχεία διαφορικών εξισώσεων,

θ . ΑΑΕΒΙΖΟΥ, Α .Κ Α Μ Π Ο Υ Ρ Ε Α Η : Ειδικά θέματα προγραμματισμού

στην PASCAL.

RICHARD BRO NSO N : Εισαγωγή στις διαφορικές εξισώσεις.

ST A N TO N R. G. : Numerical methods for scon ce and engineering.

W OLBERG J. R. . Application o f computer engineering analysis.