You are on page 1of 77

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας

Προγραμματισμός και Εφαρμογές Η/Υ


Matlab

Δρ. Β.Χ. Μούσας, Αναπληρωτής Καθηγητής


Τμήμα Πολιτικών Μηχανικών Τ.Ε. και Μηχανικών Τοπογραφίας
& Γεωπληροφορικής Τ.Ε.

Εισαγωγή στο MatLab 1/13


Μέρος Α, Εκκίνηση της Εφαρμογής
1. Ενεργοποιήστε τον Η/Υ με το λογαριασμό του εργαστηρίου
για φοιτητές (acad, χωρίς password).
2. Βρείτε τη συντόμευση για MatLab (ή Octave) στη επιφάνεια
εργασίας (ή στο μενού Start/Έναρξη > Προγράμματα) και
ξεκινήστε την εφαρμογή.
3. Παρατηρήστε το παράθυρο τη εφαρμογής αν έχει τη
παρακάτω διάταξη:

1
Εισαγωγή στο MatLab 2/13
MatLab Octave

4. Εάν διαφέρει (ο προηγούμενος χρήστης μπορεί να άλλαξε τη


διάταξη), να την επαναφέρετε στη προεπιλογή της (default) από
το μενού της εφαρμογής:
a. MatLab: Desktop > Desktop Layout > Default
b. Octave: Window > Reset Default Window Layout
2

Εισαγωγή στο MatLab 3/13


5. Ελέγξτε τη διαδρομή του φακέλου όπου θα εργαστείτε (Current
Folder ή Directory) να είναι: C:\Users\...\Documents\MATLAB. Αν
δεν είναι επιλέξτε τη σωστή διαδρομή.
6. Ελέγξτε το παράθυρο του Editor να μην έχει ανοιχτό έγγραφο από
προηγούμενη χρήση. Κλείστε τυχόν παλαιότερα έγγραφα. Ανοίξτε
ένα νέο (untitled ή unnamed).
7. Κλείστε την εφαρμογή δίνοντας >>exit ή >>quit παράθυρο
εντολών.
8. Μέσα στο φάκελο Documents\MATLAB να δημιουργήστε το δικό
σας φάκελο με όνομα το login από το email σας (π.χ., cw1234).
9. Ξεκινήστε την εφαρμογή και ορίστε σαν φάκελο εργασίας το νέο
σας φάκελο (π.χ., C:\Users\...\Documents\MATLAB\ cw1234).

3
Εισαγωγή στο MatLab 4/13
Μέρος Β, Βασικές Ενέργειες
• Στο παράθυρο εντολών Command Window (>>)
πληκτρολογήστε τις εντολές:
1.
>>a = 5 (Σημ.: σε όλες τις εντολές δίνουμε στο τέλος <enter> για
να εκτελεστούν)
>>a = 5;
Τι αλλάζει βάζοντας (;) στο τέλος της εντολής; ΑΠ.: ___________

Εισαγωγή στο MatLab 5/13


2.
>>a = a/2; b = (a+3)^2/(10-a)*3;
Βρείτε τις μεταβλητές στο Workspace. Τι τιμές έχουν; ΑΠ.: ____
Ζητήστε από τον Η/Υ να σας εμφανίσει τις τιμές τους με την
εντολή disp
>> disp(a), disp(b)

3.
Ζητήστε από τον Η/Υ να διαβάσει το Χ από το πληκτρολόγιο με
την εντολή input.
>>X = input('Poso einai to X? ');

5
Εισαγωγή στο MatLab 6/13
4.
Υπολογίστε το F από τον τύπο F = aX2 + bX + c, γράφοντας την εντολή
>> F = a*X^2 + b*X + c;
Τι λείπει για να γίνει ο υπολογισμός; Δώστε του τη τιμή 10.
Ξαναδώστε την εντολή για το F, χωρίς να την πληκτρολογήσετε,
χρησιμοποιώντας τα βέλη στο πληκτρολόγιο.

5.
Εντοπίστε τις εντολές του Μέρους Β στο παράθυρο Command
History.

6.
Ανοίξτε ένα νέο αρχείο (script) στον Editor και αντιγράψτε τις εντολές
εκεί.
6

Εισαγωγή στο MatLab 7/13


7.
Αποθηκεύστε το αρχείο με το όνομα mytest1.m και ελέγξτε το
παράθυρο Current Folder (ή File Browser) για να βρείτε το
πρόγραμμα σας. Τι μέγεθος έχει το mytest1;

8.
Στο Command Window δώστε την εντολή >>clear, και ελέγξτε
ότι το Workspace έχει καθαρίσει. Στη συνέχεια δώστε την νέα
«εντολή» (πρόγραμμα) >>mytest1 που φτιάξατε.

9.
Τι τιμές περιέχει το Workspace τώρα;
7
Εισαγωγή στο MatLab 8/13
Μέρος Γ, Αριθμοί και Πράξεις
• Στο παράθυρο εντολών Command Window (>>)
πληκτρολογήστε τις εντολές:
1. Καθαρίστε το Command Window με την εντολή:
>>clc

2.
Αρχίστε τη καταγραφή των εντολών & αποτελεσμάτων δίνοντας
την εντολή:
>>diary on

Εισαγωγή στο MatLab 9/13


3. Δώστε τις παρακάτω εντολές (αν κάνετε λάθος διορθώστε και
ξαναδώστε)
>>pi __________________________________
>>exp(1) __________________________________
>>sqrt(-1) __________________________________
>>i __________________________________
>>eps __________________________________
>>inf __________________________________
>>nan __________________________________
>>3>2 __________________________________
>>3<2 __________________________________
• Τι απαντήσεις πήρατε και τι αναπαριστούν οι παραπάνω
ποσότητες;
9
Εισαγωγή στο MatLab 10/13
4.
Σταματήστε τη καταγραφή δίνοντας την εντολή:
>>diary off

5.
Βρείτε το αρχείο diary στο φάκελο σας και ανοίξτε το στον Editor
να δείτε τι κατέγραψε. Δώστε πάλι την εντολή diary on για να
συνεχίσετε τη καταγραφή.

10

Εισαγωγή στο MatLab 11/13


6.
Δώστε τις παρακάτω τιμές στις μεταβλητές a, b, c, x, y:
a = 2.3, b = -2.3, c= π/2, x =2/π, and y = √3.
Υπολογίστε τις παρακάτω παραστάσεις (γράψτε εντολή και αποτέλεσμα):
6.1) (a2 + bc + x) >> ____________________________ ans= __________
6.2) sin(c) + y/c >> ____________________________ ans= __________
6.3) (a+c)/(x+y) >> ____________________________ ans= __________
6.4) 1/(cos(c) + ln(x)) >> ____________________________ ans= __________
6.5) (a+c)3/b >> ____________________________ ans= __________

11
Εισαγωγή στο MatLab 12/13
7.
Αντιγράψτε και αποθηκεύστε όλες τις εντολές του ερωτήματος 6
σε ένα νέο αρχείο στον Editor με το όνομα mytest2.m.

12

Εισαγωγή στο MatLab 13/13


Μέρος Δ, Απλά Προβλήματα
Σας δίνονται οι δυο παρακάτω τύποι της φυσικής: PV=nRT, όπου
n=m/MW, και οι τιμές για τις εξής ποσότητες:
Όγκος: V=1000, Θερμοκρασία: T=300, Πίεση: P=100, Μοριακό βάρος:
MW=29, και η σταθερά: R=8.314.
• Ζητείται να υπολογιστεί η μάζα m.
• Ποιες εντολές και με ποια σειρά θα δώσετε στο MATLAB για να
βρείτε τη μάζα m;
(Μπορείτε να χρησιμοποιήστε το υπόλοιπο φύλο για να λύσετε τους
τύπους πριν τους βάλετε στο MatLab).
• Όταν τελειώσετε δώστε την εντολή >>diary off να σταματήσει η
καταγραφή.
• Τέλος, να μεταφέρετε όλα τα .m αρχεία και τα diary στο USB Flash
που έχετε μαζί σας.

13
Ενότητα 2: Matlab Άσκηση 2

Εντολές σε Δομή Ακολουθίας 1/12


Μέρος Α, Επίλυση Απλού Προβλήματος με Ακολουθίες Εντολών
Πρόβλημα 1: Μετατροπές Γωνιών
Να μετατραπεί μια γωνία από Μοίρες (degrees) σε Βαθμούς (grads) &
Ακτίνια (radians), και στη συνέχεια να υπολογιστούν τα
τριγωνομετρικά μεγέθη. Η αναλογία που ισχύει μεταξύ τους είναι:
𝑚 𝑏 𝑎
= =
360 400 2𝜋

ΣΗΜ.: Οι μετατροπές αυτές είναι απαραίτητες για τους Μηχανικούς. Η


καθιερωμένη μονάδα μέτρησης των γωνιών είναι οι μοίρες. Όμως σε
προβλήματα τοπογραφίας η χρησιμοποιούμενη μονάδα είναι οι βαθμοί,
ενώ οι Η/Υ χρησιμοποιούν μόνο τα ακτίνια για τα τριγωνομετρικά μεγέθη
όπως ημ (sin), συν (cos), εφ (tan), τοξεφ (arctan ή atan), κλπ.

1
Εντολές σε Δομή Ακολουθίας 2/12
Δομή του Προγράμματος:
1. Διάβασμα/Είσοδος Δεδομένων.
a. Ο Η/Υ θα πρέπει πρώτα να μάθει τη τιμή του m (μοίρες) είτε
σαν σταθερά ή ρωτώντας τον χρήστη, ώστε να μπορεί να
υπολογίσει τα υπόλοιπα μεγέθη.

m = 30; ή m = input(' Dwste to megethos tis gwnias: ');

2. Υπολογισμός των μεγεθών.


a. Από την αναλογία των γωνιών φτιάχνουμε τους τύπους που
υπολογίζουν τους βαθμούς & τα ακτίνια:
𝑚∗400 𝑚∗2𝜋
𝑏= ,𝑎 = και τους διατυπώνουμε σαν εντολές για τον Η/Υ:
360 360

b = m/360 * 400;
a = m/360 * 2*pi;
2

Εντολές σε Δομή Ακολουθίας 3/12


b. Αφού έχουν υπολογιστεί τα ακτίνια (a) μπορούμε να
καλέσουμε τις έτοιμες συναρτήσεις της γλώσσας για τα
τριγωνομετρικά μεγέθη.
t1 = sin(a); t2 = cos(a); t3 = tan(a);

3. Εμφάνιση/Έξοδος Αποτελεσμάτων.
a. Εμφανίζουμε τα αποτελέσματα απλά:
disp('Apotelesmata: '); disp(t1); disp(t2); disp(t3);

b. Εμφανίζουμε τα αποτελέσματα με μορφοποίηση:


disp(sprintf(' HM=%g, SYN=%g, EF=%g ', t1, t2, t3))

Μπορείτε να δοκιμάσετε όλες τις εντολές στο Command Window


και μετά να τις συγκεντρώσετε σε ένα πρόγραμμα με το όνομα:
gwnies1.m 3
Εντολές σε Δομή Ακολουθίας 4/12
Μέρος Β, Δημιουργία προγραμμάτων για 3 Απλά Προβλήματα
Πρόβλημα 2: Μετατροπή Θερμοκρασίας °C σε °F
Να γραφεί πρόγραμμα που να μετατρέπει μια θερμοκρασία από
βαθμούς Κελσίου σε βαθμούς Φαρενάιτ. Ο τύπος μετατροπής είναι:
9
𝐹 = 32 + 𝐶
5
Δομή του Προγράμματος (τρεις εντολές):
1. Διάβασμα/Είσοδος Δεδομένων (ερώτηση για τους βαθμούς
Κελσίου – input() ).
2. Υπολογισμός των μεγεθών (ο τύπος για τον υπολογισμό σε
Φαρενάιτ).
3. Εμφάνιση/Έξοδος Αποτελεσμάτων (εμφάνιση με μορφοποίηση –
disp(sprintf()) ).
4

Εντολές σε Δομή Ακολουθίας 5/12


Μπορείτε να δοκιμάσετε τις εντολές στο Command Window και
μετά να τις συγκεντρώσετε σε ένα πρόγραμμα με το όνομα:
thermokrasies1.m
Όταν θα εκτελείται το πρόγραμμα θα πρέπει να εμφανίζεται ο
παρακάτω διάλογος:
>> thermokrasies1
Dwse ti thermokrasia se bathmous Kelsiou: 36.6
Oi 36.6 bathmoi Kelsiou einai 97.88 bahmoi Farhenheit

Γράψτε τις εντολές που χρησιμοποιήσατε:


___________________________________________________
___________________________________________________
___________________________________________________
5
Εντολές σε Δομή Ακολουθίας 6/12
Πρόβλημα 3: Απόσταση Μεταξύ 2 Σημείων
Να γραφεί πρόγραμμα που να υπολογίζει την απόσταση δύο σημείων
στο επίπεδο. Τα δύο σημεία Α & Β έχουν συντεταγμένες στο επίπεδο
Χ-Y: Α(x1, y1) & Β(x2, y2). Η απόσταση μεταξύ τους (από το
Πυθαγόρειο θεώρημα) είναι:
𝑑 = 𝑥2 − 𝑥1 2 + 𝑦2 − 𝑦1 2
• Δομή του Προγράμματος:
1. Διάβασμα/Είσοδος Δεδομένων (4 ερωτήσεις – input() ).
2. Υπολογισμός των μεγεθών (η συνάρτηση για τη τετρ. ρίζα είναι:
sqrt() ).
3. Εμφάνιση/Έξοδος Αποτελεσμάτων (εμφάνιση με μορφοποίηση –
disp(sprintf()) ).
Μπορείτε να δοκιμάσετε τις εντολές στο Command Window και μετά
να τις συγκεντρώσετε σε ένα πρόγραμμα με το όνομα: apostasi1.m
6

Εντολές σε Δομή Ακολουθίας 7/12


Όταν θα εκτελείται το πρόγραμμα θα πρέπει να εμφανίζεται ο
παρακάτω διάλογος:
>> apostasi1
Dwse to X tou Simeiou A: 10

Dwse to Y tou Simeiou A: 3


Dwse to X tou Simeiou B: 13
Dwse to Y tou Simeiou B: 7
H Apostasi A-B einai: 5

Γράψτε τις εντολές που χρησιμοποιήσατε:


___________________________________________________________
___________________________________________________________
___________________________________________________________

7
Εντολές σε Δομή Ακολουθίας 8/12
Πρόβλημα 4: Μετατροπή Καρτεσιανών Συντεταγμένων σε Πολικές
Να γραφεί πρόγραμμα που να μετατρέπει τις Καρτεσιανές
συντεταγμένες Χ & Υ σε Πολικές συντεταγμένες R & F. Οι τύποι
μετατροπής των Καρτεσιανών συντεταγμένων σε πολικές είναι:
Υ
𝑅 = 𝑋 2 + 𝑌 2 , & 𝐹 = 𝜏𝜊𝜉𝜀𝜑
Χ
Δομή του Προγράμματος:
1. Διάβασμα/Είσοδος Δεδομένων (2 ερωτήσεις – input() ).
2. Υπολογισμός των μεγεθών (η συνάρτηση για το τόξο εφαπτομένης
είναι: atan() ). Σημ.: ο Η/Υ υπολογίζει ακτίνια και εμείς θέλουμε
την F σε μοίρες (προβλ.1).
3. Εμφάνιση/Έξοδος Αποτελεσμάτων (εμφάνιση με μορφοποίηση –
disp(sprintf()) ).
Μπορείτε να δοκιμάσετε τις εντολές στο Command Window και μετά
να τις συγκεντρώσετε σε ένα πρόγραμμα με το όνομα: polikes1.m
8

Εντολές σε Δομή Ακολουθίας 9/12


Όταν θα εκτελείται το πρόγραμμα θα πρέπει να εμφανίζεται ο
παρακάτω διάλογος:
>> polikes1
Dwse ti Tetmimeni X: 4
Dwse ti Tetagmeni Y: 3
Oi Polikes Syntetagmenes einai: R= 5 & F= 36.87(moires)

Γράψτε τις εντολές που χρησιμοποιήσατε:


_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________

9
Εντολές σε Δομή Ακολουθίας 10/12
Μέρος Γ) Εκτέλεση προγραμμάτων & Συμπλήρωση Πινάκων με
Αποτελέσματα
Να εκτελεστούν τα τρία προγράμματα του Μέρους Β για τα
παρακάτω δεδομένα και να συμπληρωθούν οι πίνακες:
Μετατροπή Θερμοκρασίας

°C -100 -40 -10 0 15 22 36.6 42 100 1000


°F

10

Εντολές σε Δομή Ακολουθίας 11/12


Απόσταση 2 Σημείων Μετατροπή Συντεταγμένων
x₁ y₁ x₂ y₂ Απόσταση (d) X Y R F(°)
1 6 4 8 4 4
-1 -1 1 1 3 2
2 3 20 10 2 3
10 9 1 2 1 6
0 0 4 3 -5 0
2 2 5 6 2 0
12 5 2 0 6 3
5 4 4 5 0 5

11
Εντολές σε Δομή Ακολουθίας 12/12
Χρησιμοποιήστε για τη καταγραφή των αποτελεσμάτων την
εντολή:
>>diary on
Σταματήστε τη καταγραφή όταν τελειώσετε δίνοντας την
εντολή:
>>diary off
Να ελέγξετε τις περιπτώσεις όπου τα αποτελέσματα δεν ήταν τα
αναμενόμενα. Σημειώστε τα με ένα αστερίσκο (*) και δώστε
παρακάτω μια ερμηνεία για τα λάθη/διαφορές που βλέπετε.
(*)
Τέλος, να μεταφέρετε όλα τα .m αρχεία και τα diary στο USB
Flash που έχετε μαζί σας.
12

Ενότητα 3: Matlab Άσκηση 3


Έλεγχος Ροής με την Εντολή Επιλογής IF
1/8
Μέρος Α, Επίλυση Γραμμικής Εξίσωσης aΧ+b=c
1: Απλή επίλυση χωρίς έλεγχο
Να γραφεί ένα απλό πρόγραμμα 5 εντολών το οποίο να ζητά να
διαβάσει τα a, b & c, να
υπολογίζει το Χ από τη λύση της γραμμικής, και τέλος, να
τυπώνει το αποτέλεσμα Χ.
Δομή του Προγράμματος:
1. Διάβασμα/Είσοδος Δεδομένων. (3 εντολές input(‘…’))
𝑐−𝑏
2. Υπολογισμός των μεγεθών: 𝑥 =
𝑎
3. Εμφάνιση/Έξοδος Αποτελεσμάτων. (μια εντολή
disp(sprintf(…)) )
1

Έλεγχος Ροής με την Εντολή Επιλογής IF


2/8
Όταν θα εκτελείται το πρόγραμμα θα πρέπει να εμφανίζεται ο
παρακάτω διάλογος:

>> grammiki1
Dwse to A: 3
Dwse to B: 6
Dwse to C: 0
H lysi tis grammikis AX+B=C einai X= -2

Γράψτε τις εντολές που χρησιμοποιήσατε:


1._______________________________________________
2._______________________________________________
3._______________________________________________
4._______________________________________________
5. _________________________________________________________
2
Έλεγχος Ροής με την Εντολή Επιλογής IF
3/8
2: Λύση με διερεύνηση / έλεγχο
Να επεκταθεί το παραπάνω πρόγραμμα ώστε να πραγματοποιεί
τον παρακάτω έλεγχο/διερεύνηση πριν κάνει υπολογισμούς:
Αν το a = 0 και το c-b = 0, τότε θα τυπώνει ότι η λύση είναι 'aoristi'.
Αν το a = 0 και το c-b ≠ 0, τότε θα τυπώνει ότι η λύση είναι 'adynati'.
Αν το a ≠ 0 τότε θα υπολογίζει και θα τυπώνει τη λύση Χ.
Δεν θα γράψετε νέο πρόγραμμα, θα προσθέσετε εντολές σε
αυτό του προηγούμενου ερωτήματος και θα το σώσετε με το
ίδιο όνομα (grammiki1.m).

Έλεγχος Ροής με την Εντολή Επιλογής IF


4/8
Δίνεται ο Ψευδοκώδικας του Προγράμματος:
Διάβασμα/Είσοδος Δεδομένων. (3 εντολές input(‘…’))
Αν a ≠ 0
Υπολογισμός λύσης:
Εμφάνιση Αποτελέσματος (εντολή disp(sprintf(…)) )
Αλλιώς
Αν c-b ≠ 0
Εμφάνιση Μηνύματος (εντολή disp(…) )
Αλλιώς
Εμφάνιση Μηνύματος (εντολή disp(…) )
Τέλος
Τέλος

4
Έλεγχος Ροής με την Εντολή Επιλογής IF
5/8
Γράψτε τις εντολές MATLAB που θα χρησιμοποιήσετε για το
παραπάνω πρόγραμμα:
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Να εκτελεστεί για τις παρακάτω γραμμικές εξισώσεις:
Γραμμική εξίσωση Αποτέλεσμα Χ= Μήνυμα:
3x+2=5
x+12=10
4x+5=5
3x-0=9
0x+1=0
0x+6=6 5

Έλεγχος Ροής με την Εντολή Επιλογής IF


6/8
Μέρος Β, Επίλυση Δευτεροβάθμιας (Τριωνύμου) aΧ²+bΧ+c=0.
• Να γραφεί ένα πρόγραμμα το οποίο να ζητά να διαβάσει τα
a, b & c, να ελέγχει τις τιμές τους σύμφωνα με τον παρακάτω
πίνακα διερεύνησης, να υπολογίζει ανάλογα με τη περίπτωση
τα Χ₁, Χ₂ από τους τύπους λύσης του τριωνύμου, και τέλος,
να τυπώνει τα αποτελέσματα Χ₁, Χ₂.

6
Έλεγχος Ροής με την Εντολή Επιλογής IF
7/8
Οι συνθήκες διερεύνησης και οι αντίστοιχες λύσεις του
τριωνύμου είναι:

Συνθήκη Λύσεις Τύποι


Αν A=B=C=0 ‘aoristi’ -
Αν A=B=0, και, C≠0 ‘adynati’ -
Αν A=0, και, B≠0 ‘grammiki – mia lysi’ x = – C /B
Αν Α≠0, ‘mia dipli pragm. lysi’ 𝑥1,2 = −𝐵/2𝐴
Η διακρίνουσα θα
είναι: D=B²–4AC
Αν D=0
Αν D>0 ‘dyo pragmatikes lyseis’ −𝐵 ± 𝐷
𝑥1,2 =
2∙𝐴
Αν D<0 ‘dyo migadikes lyseis’ −𝐵 ± 𝐷
𝑥1,2 =
2∙𝐴
7

Έλεγχος Ροής με την Εντολή Επιλογής IF


8/8
Γράψτε τις εντολές MATLAB που θα χρησιμοποιήσετε για το
παραπάνω πρόγραμμα:

Ελέγξτε το πρόγραμμα αν απαντά σωστά σε όλες τις περιπτώσεις


της διερεύνησης.
8
Ενότητα 4: Matlab Άσκηση 4

Έλεγχος Ροής με την Εντολή Επανάληψης


FOR 1/9
Μέρος Α, Επαναλήψεις Υπολογισμών
1: Δημιουργία μιας σειράς αριθμών
Να γραφεί ένα πρόγραμμα (εντολή for) που να δημιουργεί και
να τυπώνει όλους τους ακεραίους από το 1 έως το 20.

Τι θα αλλάξετε στη for για να τυπώνει μόνο τους μονούς αριθμούς;

Τι άλλο θα αλλάξετε στη for για να τυπώνει μόνο τους ζυγούς


αριθμούς;

1
Έλεγχος Ροής με την Εντολή Επανάληψης
FOR 2/9

2: Στατιστικά μιας σειράς αριθμών


Να γραφεί ένα πρόγραμμα που να υπολογίζει το άθροισμα, το
μέσο όρο και το γινόμενο όλων των ακεραίων από το 1 έως το
1000.
Χρησιμοποιήστε τις μεταβλητές: S για το άθροισμα, N για το
πλήθος και ΜΟ για το μέσο όρο.

Έλεγχος Ροής με την Εντολή Επανάληψης


FOR 3/9

Τι θα αλλάξετε στη for για να υπολογίζει το άθροισμα, το μέσο όρο και το


γινόμενο των ζυγών θετικών ακεραίων που είναι μικρότεροι του 75;

3
Έλεγχος Ροής με την Εντολή Επανάληψης
FOR 4/9
3. Προπαίδεια
Να γραφεί ένα πρόγραμμα (με δυο nested for) που να
υπολογίζει τη προπαίδεια από το 1x1 έως το 10x10.

Έλεγχος Ροής με την Εντολή Επανάληψης


FOR 5/9

Μέρος Γ) Κλασικές Σειρές - Αριθμοί Fibonacci


1: Δημιουργία της σειράς αριθμών Fibonacci
Να γραφεί ένα πρόγραμμα που να δημιουργεί τη σειρά
αριθμών Fibonacci που περιγράφεται από τον τύπο: Φ(Ν) =
Φ(Ν-1) + Φ(Ν-2), και αρχίζει ως εξής: 0 1 1 2 3 5 8 13 21 34 55 …
Το πρόγραμμα θα ζητάει το πλήθος Ν των αριθμών και θα τους
τυπώνει καθώς τους δημιουργεί.

5
Έλεγχος Ροής με την Εντολή Επανάληψης
FOR 6/9

Το πρόγραμμα εκτός από τον κάθε αριθμό Φ(Ν) θα τυπώνει


επίσης και τον λόγο: Λ = Φ(Ν)/Φ(Ν-1). Σε ποίον αριθμό συγκλίνει ο Λ
όσο αυξάνει το Ν (δώστε τον με ακρίβεια 4 δεκαδικών); Τι γνωρίζετε
για τον αριθμό αυτό, που να αφορά στην ειδικότητά σας;
6

Έλεγχος Ροής με την Εντολή Επανάληψης


FOR 7/9

7
Έλεγχος Ροής με την Εντολή Επανάληψης
FOR 8/9
2: Ένας Κατάλογος Προϊόντων
• Η εταιρεία σας δεν μπορεί να κατασκευάσει κυλινδρικές
δεξαμενές σε οποιεσδήποτε διαστάσεις. Οι ακτίνες (R)
μπορούν να κυμαίνονται από 1 έως 4 μέτρα, με βήματα του
ενός μέτρου, και τα ύψη (h) από 1 έως 6 μέτρα, με βήματα
του ενός μέτρου.

Έλεγχος Ροής με την Εντολή Επανάληψης


FOR 9/9
• Να γραφεί ένα πρόγραμμα το οποίο (αντί να ζητάει ύψος και
ακτίνα) να χρησιμοποιεί τους παραπάνω
περιορισμούς/δυνατότητες για να υπολογίζει Όγκο (V) και
Επιφάνεια (Ε) των δεξαμενών που μπορούν να
κατασκευαστούν για κάθε δυνατό συνδυασμό R και h, και, να
εμφανίζει ένα κατάλογο με τα προϊόντα της εταιρείας σας
(24 κυλινδρικές δεξαμενές), ο οποίος θα περιέχει τα
χαρακτηριστικά του κάθε προϊόντος: Ακτίνα, Ύψος, Όγκο,
Επιφάνεια.

9
Ενότητα 5: Matlab Άσκηση 5

Έλεγχος Ροής με τις Εντολές Switch - Case


και While 1/7
Μέρος Α, Κατάταξη Ηλικιών
1: Εντολή SWITCH CASE
Να δημιουργήσετε ένα πρόγραμμα το οποίο θα ζητά μια ηλικία
και θα την κατατάσσει στη κατηγορία που ανήκει σύμφωνα με
το παρακάτω σχήμα: 0 ≤ Μωρό < 1 ≤ Παιδί < 13 ≤ Έφηβος < 18 ≤
Ενήλικας < 60 ≤ Ηλικιωμένος.
Χρησιμοποιήστε: α) τη δομή: if … , elseif … , elseif … , else … ,
end
και β) τη δομή: switch …, case … , case … , otherwise … , end.

1
Έλεγχος Ροής με τις Εντολές Switch - Case
και While 2/7
2: Εντολή WHILE
Να συμπληρώσετε το παραπάνω πρόγραμμα ώστε να
επαναλαμβάνεται συνεχώς, μέχρις ότου δοθεί για την ηλικία
ένας αρνητικός αριθμός.
Χρησιμοποιήστε τη δομή: while (…συνθήκη…) , … , end, μέσα
στην οποία θα βάλετε τη δομή επιλογής που ετοιμάσατε στο
βήμα Α1.
Σημ.: Η χρήση της while απαιτεί δυο ίδιες εντολές input, μία εκτός
(πριν τη while) και μία εντός της επανάληψης (πριν την end) (βλ.
θεωρία).

Έλεγχος Ροής με τις Εντολές Switch - Case


και While 3/7
askisi5a1 askisi5a2

3
Έλεγχος Ροής με τις Εντολές Switch - Case
και While 4/7
Μέρος Β, Στατιστικά Ηλικιών
• Να συμπληρώσετε το παραπάνω πρόγραμμα ώστε όταν
τελειώνει να εμφανίζει τα στατιστικά των ηλικιών που έδωσε
ο χρήστης, δηλαδή, το πλήθος, τη μέγιστη και την ελάχιστη
ηλικία, τον μέσο όρο (μ) και τη διασπορά (σ²) των ηλικιών.
o Χρησιμοποιήστε ένα μετρητή για το πλήθος (π.χ. n = n + 1).
o Χρησιμοποιήστε δύο δομές if για τη μέγιστη (meg) και την
ελάχιστη (mik).
o Χρησιμοποιήστε ένα αθροιστή για το σύνολο (π.χ. s = s + x).

Έλεγχος Ροής με τις Εντολές Switch - Case


και While 5/7
o Χρησιμοποιήστε ένα ακόμη αθροιστή για το σύνολο των x² (π.χ.
s2 = s2 + x^2)
o Χρησιμοποιήστε τον παρακάτω τύπο για τη διασπορά:
Ν 𝑁
1 1
2
𝜎 = 𝑥𝑖 − 𝜇 2 = 𝑥𝑖2 − 𝜇2
Ν Ν
𝑖=1 𝑖=1

askisi5b

5
Έλεγχος Ροής με τις Εντολές Switch - Case
και While 6/7
Μέρος Γ, Χρήση Πινάκων και Συναρτήσεων MatLab
• Να τροποποιήσετε το παραπάνω πρόγραμμα ώστε να
αποθηκεύει τις ηλικίες που δίνονται από τον χρήστη σε ένα
διάνυσμα, και, τις αντίστοιχες κατηγορίες ηλικιών που
υπολογίζει σε ένα άλλο διάνυσμα.
• Το πρόγραμμα θα τυπώνει και τα δυο διανύσματα με
αύξουσα και με φθίνουσα σειρά ηλικιών.
− Χρησιμοποιήστε τη συνάρτηση του MatLab: [Y,I] = sort(X,mode)
(Συμβουλευτείτε το help sort για τη χρήση της εντολής).

Έλεγχος Ροής με τις Εντολές Switch - Case


και While 7/7
• Το πρόγραμμα θα υπολογίζει επίσης τα στατιστικά του
ερωτήματος Β χρησιμοποιώντας το διάνυσμα με τις ηλικίες
και τις ειδικές συναρτήσεις του MatLab.
− Χρησιμοποιήστε τις συναρτήσεις MatLab: count(), max(), min(),
mean(), var().
Συγκρίνετε τα αποτελέσματα με αυτά του Β.
askisi5c

7
Ενότητα 6: Matlab Άσκηση 6

Δεδομένα σε Πίνακες και σε Αρχεία 1/19


Μέρος Α, Εμβαδά Τριγωνικών Εκτάσεων από το μήκος των
Πλευρών τους
Ένας μηχανικός πραγματοποίησε τη καταμέτρηση μιας μεγάλης
έκτασης (όπως στο παρακάτω σχήμα), η οποία ήταν χωρισμένη
σε πολλά τριγωνικά τμήματα (1,2,3,…). Αφού μέτρησε τις
αποστάσεις των κορυφών μεταξύ τους (δηλ. τις πλευρές των
τριγωνικών τμημάτων), τις κατέγραψε σε μια λίστα στην οποία
κάθε σειρά (1,2,3,…) αντιστοιχεί και σε ένα τριγωνικό τμήμα.

1
Δεδομένα σε Πίνακες και σε Αρχεία 2/19
• Σκοπός μας είναι να δημιουργήσουμε ένα πρόγραμμα που να
παίρνει σαν δεδομένα τις μετρήσεις του μηχανικού και να
μας δίνει σαν αποτέλεσμα τα εμβαδά όλων των τριγωνικών
τμημάτων και το συνολικό εμβαδόν της έκτασης.
ΣΗΜ.1: Το εμβαδόν (E) ενός τριγώνου από τις πλευρές του (a, b, c),
δίνεται με τον τύπο:
𝑎+𝑏+𝑐
Ε= 𝑡 ∙ 𝑡 − 𝑎 ∙ 𝑡 − 𝑏 ∙ 𝑡 − 𝑐 , όπου 𝑡 =
2

Δεδομένα σε Πίνακες και σε Αρχεία 3/19


ΣΗΜ.2: Ο υπολογισμός του εμβαδού θα πρέπει να επαναληφθεί τόσες
φορές όσα και τα τριγωνικά τμήματα (για τα a, b, c του κάθε τριγώνου).
Αυτό το πετυχαίνουμε χρησιμοποιώντας την εντολή for. Στη for ορίζουμε
πόσες επαναλήψεις θα κάνει (π.χ.: for i= 1:2) και ποιες εντολές θα
επαναλάβει (ορισμός των a, b, c και υπολογισμός των t, E).
ΣΗΜ.3: Όταν ο αριθμός των δεδομένων είναι μεγάλος, δεν μπορούμε να
τα δίνουμε με το χέρι, γι’ αυτό τα τοποθετούμε από την αρχή σε ένα
αρχείο (data1.txt) και λέμε στο πρόγραμμα να τα διαβάζει από εκεί. Με
την εντολή: x = importdata('data1.txt'), το πρόγραμμα θα διαβάσει ότι
έχει το αρχείο data1.txt και θα τα τοποθετήσει στον πίνακα x (μπορείτε
να δώσετε την εντολή >>disp(x) για να δείτε τι περιέχει το x).
Δημιουργήστε πρώτα το αρχείο data.txt με τα δυο πρώτα σετ
δεδομένων:
data1.txt :
4 5 6
6 3 7
3
Δεδομένα σε Πίνακες και σε Αρχεία 4/19
1.
Αρχίστε με το παρακάτω πρόγραμμα το οποίο θα υπολογίσει και
θα εμφανίσει το εμβαδό των δυο πρώτων τριγωνικών τμημάτων
(trigemb.m).
Εντολές - Εξήγηση
x = importdata('data1.txt'); (Διάβασμα των δεδομένων του
αρχείου)
for i = 1:2, (Επανάληψη για κάθε γραμμή-τρίγωνο)
a = x(i,1); b = x(i,2); c = x(i,3); (Αντιστοίχιση τους
στις 3 πλευρές)
t = (a+b+c)/2; (ημιπερίμετρος)
E = sqrt(t*(t-a)*(t-b)*(t-c)); (εμβαδό)
disp(sprintf('%g %g %g %g %g',i,a,b,c,E))
(εμφάνιση/εκτύπωση)
end (επόμενη γραμμή/τρίγωνο)
4

Δεδομένα σε Πίνακες και σε Αρχεία 5/19


• Συγκρίνετε τα αποτελέσματα σας με τα παρακάτω, για να
βεβαιωθείτε ότι δεν έχετε κάνει λάθη στους τύπους
υπολογισμού του εμβαδού:
>> trigemb
1 4 5 6 9.92157
2 6 3 7 8.94427

5
Δεδομένα σε Πίνακες και σε Αρχεία 6/19
2.
Το πιο πάνω πρόγραμμα υπολογίζει μόνο τρία τριγωνικά
τμήματα και επίσης δεν υπολογίζει το συνολικό εμβαδόν.
Επιπλέον, τα αποτελέσματά του εμφανίζονται στην οθόνη χωρίς
καμία περιγραφή ή εξήγηση. Για να ολοκληρωθεί το πρόγραμμά
πρέπει να προσθέσουμε ή να τροποποιήσουμε μερικές εντολές.
• Για να κάνουμε το πρόγραμμα πιο ευέλικτο θα πρέπει η
επανάληψη (for) να εκτελείται τόσες φορές όσα είναι και τα
δεδομένα. Καθώς δεν ξέρουμε από την αρχή αν θα είναι 3, 6,
ή, 60 τα δεδομένα μας, θα βάλουμε μία μεταβλητή Ν στη
εντολή for (for i = 1:N) της οποίας τη τιμή θα τη βρίσκει το
πρόγραμμα από το μέγεθος του αρχείου data.txt μόλις το
διαβάσει ([N, M] = size(x)).

Δεδομένα σε Πίνακες και σε Αρχεία 7/19


• Εκτός από τα εμβαδά των επιμέρους τριγώνων, μας
ενδιαφέρει και το συνολικό εμβαδόν της έκτασης που
προκύπτει αν προσθέσουμε όλα τα επιμέρους εμβαδά (Ε). Σε
κάθε επανάληψη του for υπολογίζεται το Ε ενός μόνο
τριγώνου. Θα χρησιμοποιήσουμε λοιπόν μια μεταβλητή S
που θα παίζει το ρόλο αθροιστή και εκεί θα προσθέτουμε το
νέο Ε που υπολογίζεται σε κάθε επανάληψη (S = S + E). Όταν
τελειώσουν όλες οι επαναλήψεις, η S θα περιέχει το
άθροισμα όλων των εμβαδών.

7
Δεδομένα σε Πίνακες και σε Αρχεία 8/19
Συμπληρώστε το αρχείο data.txt με τα υπόλοιπα σετ
δεδομένων:
data1.txt :
4 5 6
6 3 7
7 4 5
4 7 4
4 6 3
3 3 5

Δεδομένα σε Πίνακες και σε Αρχεία 9/19


• Διορθώστε/προσθέστε τις εντολές και εκτελέστε το
πρόγραμμα και ελέγξτε αν συμφωνεί με τα αποτελέσματα.

>> trigemb
1 4 5 6 9.92157
2 6 3 7 8.94427
3 7 4 5 9.79796
4 4 7 4 6.77772
5 4 6 3 5.33268
6 3 3 5 4.14578
44.92

9
Δεδομένα σε Πίνακες και σε Αρχεία 10/19
3.
Οι τελικές βελτιώσεις στο πρόγραμμα αφορούν την εμφάνιση
και την αποθήκευση των αποτελεσμάτων:
• Προσθέστε ετικέτες πάνω από τα αποτελέσματα που να
εξηγούν τη κάθε στήλη, π.χ.:
disp( ' a/a A B C EMBADON ' )
• Προσθέστε ετικέτα στο συνολικό εμβαδόν, π.χ.:
disp(sprintf(' SYNOLIKO EMBADON = %g', S))

10

Δεδομένα σε Πίνακες και σε Αρχεία 11/19


Τα αποτελέσματα θα πρέπει να μοιάζουν με τα παρακάτω:

>> trigemb
a/a A B C EMBADON
1 4 5 6 9.92157
2 6 3 7 8.94427
3 7 4 5 9.79796
4 4 7 4 6.77772
5 4 6 3 5.33268
6 3 3 5 4.14578
SYNOLIKO EMBADON = 44.92

11
Δεδομένα σε Πίνακες και σε Αρχεία 12/19
4.
Έχοντας πλέον ένα ολοκληρωμένο πρόγραμμα στα χέρια σας,
χρησιμοποιήστε το για να υπολογίσετε το συνολικό εμβαδόν
του παρακάτω σχήματος (ο συνεργάτης σας έκανε τις
απαραίτητες 5 μετρήσεις, να υπολογίστε τις υπόλοιπες
αποστάσεις από τα ορθογώνια τρίγωνα και μετά να τις βάλετε
στο νέο data.txt). Πόσο θα είναι περίπου το αποτέλεσμα που
περιμένετε: 56, 84, 76, ή, 98;

Τι αποτέλεσμα πήρατε τελικά από το πρόγραμμα; ___ 12

Δεδομένα σε Πίνακες και σε Αρχεία 13/19


Μέρος Β, Εμβαδά Πολυγωνικών Εκτάσεων από τις
Συντεταγμένες των Κορυφών
• Να γραφεί ένα πρόγραμμα το οποίο να υπολογίζει το
εμβαδόν ενός πολυγωνικού οικοπέδου από τις καρτεσιανές
συντεταγμένες των κορυφών του. Το εμβαδόν ενός
πολυγώνου δίνεται από τον τύπο:
Ε= Ν 𝑖=1 𝑦𝑖+1 + 𝑦𝑖 ∙ 𝑥𝑖+1 + 𝑥𝑖 /2, όπου, τα 𝑥𝑖 και 𝑦𝑖 είναι
οι καρτεσιανές συντεταγμένες της κορυφής i.
ΣΗΜ.1: Τα δεδομένα 𝑥𝑖 και 𝑦𝑖 για κάθε κορυφή αποθηκεύονται σε
δύο διανύσματα X και Y αντίστοιχα, τα οποία θα έχουν τόσες
γραμμές όσες και οι κορυφές του πολυγωνικού οικοπέδου συν μία
(Ν+1). Η επιπλέον κορυφή Ν+1 θα είναι η ίδια με την 1η κορυφή
ώστε το πολύγωνο να κλείνει:

13
Δεδομένα σε Πίνακες και σε Αρχεία 14/19

ΣΗΜ.2: Όταν είναι μεγάλος ο αριθμός των δεδομένων, δεν τα


δίνουμε με το χέρι αλλά τα τοποθετούμε σε ένα αρχείο (data2.txt)
και το πρόγραμμα τα διαβάζει από εκεί με την εντολή: d =
importdata('data2.txt').

14

Δεδομένα σε Πίνακες και σε Αρχεία 15/19


1.
Αρχίστε με τη πληκτρολόγηση του παρακάτω προγράμματος το
οποίο υπολογίζει το εμβαδόν ενός τριγωνικού οικοπέδου
(αριθμός κορυφών Ν = 3)
d = importdata('data2.txt');
d(4,:) = d(1,:); (gia na kleisei to polygwno)
X = d(:,1); Y = d(:,2);
S = 0;
for i = 1:3
S = S + (Y(i+1)+Y(i))*(X(i+1)-X(i))/2;
disp(sprintf(' %g ', X(i),Y(i)))
end
disp(sprintf('SYNOLIKO EMBADON = %g', S))

15
Δεδομένα σε Πίνακες και σε Αρχεία 16/19
• Να δοκιμαστεί το πρόγραμμα για ένα τριγωνικό οικόπεδο με
το παρακάτω σετ συντεταγμένων τριών (3) κορυφών που θα
τοποθετήσετε στο αρχείο data2.txt:

16

Δεδομένα σε Πίνακες και σε Αρχεία 17/19


2.
Να διορθωθεί/γενικευτεί το πρόγραμμα για να τρέχει για
οποιοδήποτε αριθμό κορυφών Ν, και να εκτελεστεί για το
παρακάτω σετ συντεταγμένων πέντε (5) κορυφών:

data2.txt Αποτελέσματα: Πολυγωνικό σχήμα


00 100
04 204
25 325
53 453
30 530
EMBADON = 18

17
Δεδομένα σε Πίνακες και σε Αρχεία 18/19
3.
Χρησιμοποιήστε ξανά το πρόγραμμά σας για να υπολογίσετε το
εμβαδόν για το πολυγωνικό οικόπεδο που δίνεται στο
παρακάτω σχήμα:

Τι αποτέλεσμα βρήκατε; ____


18

Δεδομένα σε Πίνακες και σε Αρχεία 19/19


4.
Να ολοκληρώσετε το πρόγραμμα ώστε να σχεδιάζει το
πολυγωνικό οικόπεδο από τα διανύσματα Χ και Υ,
χρησιμοποιώντας την εντολή plot(). Προσθέστε τους σχετικούς
τίτλους και ετικέτες (title(), xlabel(), ylabel()) στο διάγραμμα και
να αναγράψετε και το εμβαδό με την εντολή text().

19
Ενότητα 7: Matlab Άσκηση 7

Αριθμητικές Προσεγγίσεις 1/9


• Οι δυνατότητες των Η/Υ αναδεικνύονται σε πολλά
προβλήματα της επιστήμης τα οποία δεν έχουν αναλυτικό
τύπο υπολογισμού και πρέπει να υπολογισθούν αριθμητικά
και κατά προσέγγιση. Όσο περισσότερες επαναλήψεις, ή
μικρότερα διαστήματα υπολογισμού, ή περισσότερους όρους
βάζουμε, τόσο μεγαλύτερη είναι η ακρίβεια των
αποτελεσμάτων μας.

1
Αριθμητικές Προσεγγίσεις 2/9
Μέρος Α, Υπολογισμός του Αριθμού π
Ο αριθμός π υπολογίζεται προσεγγιστικά. Υπάρχουν διάφοροι
τρόποι υπολογισμού, και δύο από αυτούς περιγράφονται πιο
κάτω. Θα τους προγραμματίσετε και θα τους συγκρίνετε μεταξύ
τους και με το π που έχει αποθηκευμένο το MatLab στη
μεταβλητή pi (για να βλέπετε πιο πολλά ψηφία επιλέξτε στο
Command Window την εμφάνιση >>format long).
Βήμα 1. Δημιουργήστε ένα πρόγραμμα που ζητά το πλήθος των
όρων m και θα προσεγγίζει τον αριθμό π υπολογίζοντας το
παρακάτω άθροισμα (Gregory-Leibniz):
𝑚 −1 𝑘 4 4 4 4 4 4
𝜋≈4 𝑘=0 2𝑘+1 𝜋= − + − + − ….
1 3 5 7 9 11

Αριθμητικές Προσεγγίσεις 3/9


Όσο περισσότερους όρους m έχει το άθροισμα τόσο πιο
ακριβής θα είναι η απάντηση (η σειρά συγκλίνει στο π καθώς το
m τείνει στο άπειρο). Βασιζόμαστε στον τύπο για να
δημιουργήσουμε αριθμητή και παρονομαστή από τον δείκτη k
της εντολής for.
S=0
for k=0…m,
oros = 4∙(-1)k/(2k+1)
S = S + oros
end

Εκτελέστε το πρόγραμμα για διάφορες τιμές του m (10, 100,


1000, …) και βρείτε πόσους όρους (m) χρειάζεστε για να
πάρετε το π με ακρίβεια 5 δεκαδικών ψηφίων (3.14159…).
3
Αριθμητικές Προσεγγίσεις 4/9
Βήμα 2. Επαναλάβατε τα παραπάνω για τον τύπο του Madhava
που ακολουθεί (Να βασιστείτε στο προηγούμενο πρόγραμμα
και να κάνετε τις αναγκαίες μικρο-αλλαγές):
𝑚 −1 𝑘 1 1 1
𝜋 ≈ 12 𝑘=0 (2𝑘+1)∙3𝑘 𝜋 = 12 1 − + − +⋯
3∙3 5∙32 7∙33

• Ποια από τις δύο σειρές συγκλίνει πιο γρήγορα στο π; Με


πόσους όρους βρίσκει το pi του MatLab (10 δεκαδικά ψηφία)
η μέθοδος του Madhava;
• Μπορείτε να βρείτε περισσότερα στοιχεία για τον αριθμό π
στον ιστότοπο: Pi (disambiguation) .Τα πρώτα 50 ψηφία του π
είναι: 3.14159 26535 89793 23846 26433 83279 50288 41971
69399 37510 …

Αριθμητικές Προσεγγίσεις 5/9


Μέρος Β, Αριθμητικός Υπολογισμός Ολοκληρώματος
Όταν μας δίνονται ζεύγη τιμών (x, y) μιας συνάρτησης y=f(x),
αλλά όχι ο τύπος της, τότε η ολοκλήρωση της μπορεί να γίνει
αριθμητικά. Ο κανόνας του Τραπεζίου θεωρεί ότι οι τιμές y
ενώνονται με ευθύγραμμα τμήματα και έτσι σχηματίζονται
μικρά τραπέζια των οποίων τα εμβαδά αν αθροιστούν θα
δώσουν το συνολικό εμβαδό (ορισμένο ολοκλήρωμα) της y=f(x)
για τα αντίστοιχα x.

5
Αριθμητικές Προσεγγίσεις 6/9
• Αν π.χ., τα x αρχίζουν από το a και τελειώνουν στο b και
χωρίσουμε το διάστημα a…b σε άλλα μικρότερα με βήματα
μήκους h, θα προκύψουν πολλά τραπέζια με ύψος h και
βάσεις τα f(a), f(a+h), …, f(b-h), f(b), όπως στο παρακάτω
σχήμα:

Αριθμητικές Προσεγγίσεις 7/9


• Βήμα 1. Δημιουργήστε ένα πρόγραμμα που να υπολογίζει
ένα ορισμένο ολοκλήρωμα (εμβαδόν) με τον κανόνα του
Τραπεζίου από συγκεκριμένα ζεύγη τιμών x,y που θα του
δίνονται.
• Το πρόγραμμα θα διαβάζει τις τιμές x,y από ένα αρχείο
(importdata()), θα τις βάζει σε δύο διανύσματα x και y, θα
υπολογίζει επαναληπτικά τα εμβαδά των τραπεζίων που
προκύπτουν, και θα τυπώνει το τελικό άθροισμα (Ε). Ο
αλγόριθμος θα έχει τη μορφή:
E=0
for k=2…N,
ΕΤΡ = (yk+yk-1)∙(xk-xk-1)/2
E = E + ΕΤΡ
end
7
Αριθμητικές Προσεγγίσεις 8/9
όπου Ν είναι το πλήθος των σημείων που διάβασε από το
αρχείο (N=size(x)). Δεδομένα (data.txt):
1 3
2 5
4 10
6 10
7 8
9 2

Αριθμητικές Προσεγγίσεις 9/9


Βήμα 2. Στο τέλος του ίδιου προγράμματος να προσθέσετε μια
εντολή που θα χρησιμοποιεί την εσωτερική συνάρτηση του MatLab
trapz() για τον υπολογισμό του Εμβαδού και να ελέγξτε ότι το
αποτέλεσμά της συμφωνεί με τον δικό σας αλγόριθμο.
Ε2 = trapz(x,y)

Βήμα 3. Να διαβάστε το ίδιο αρχείο δεδομένων από την εφαρμογή


EXCEL/CALC. Να εισάγετε το τύπο του Εμβαδού Τραπεζίου στα
αντίστοιχα κελιά δεξιά των x,y και να υπολογίσετε και το συνολικό
άθροισμα. Σχεδιάστε το διάγραμμα x,y.
Επαναλάβατε τα παραπάνω με άλλο αρχείο δεδομένων που θα
σας δοθεί στο εργαστήριο.

9
Ενότητα 8: Matlab Άσκηση 8

Ευστάθεια Σκάλας 1/9


Μια απλή κλίμακα (σκάλα) που στηρίζεται (ακουμπά) στον τοίχο
σχηματίζει με το πάτωμα γωνία Α και ένας άνθρωπος βάρους Β
ανεβαίνει τη σκάλα. Αν το μήκος της σκάλας είναι L και ο
συντελεστής τριβής μ είναι ο ίδιος σε τοίχο και πάτωμα, ποιο θα
είναι το μέγιστο μήκος LB που θα ανεβεί ο άνθρωπος χωρίς να
πέσει η σκάλα;

1
Ευστάθεια Σκάλας 2/9
Μέρος Α, Πρόγραμμα Επίλυσης
Να γραφεί πρόγραμμα στο MatLab που θα ζητά τα δεδομένα L,
A, μ και B και θα λύνει το πρόβλημα, από τις συνθήκες
ισορροπίας δυνάμεων ΣFx=0, ΣFy=0 και ροπών ΣΜ=0, με δύο
τρόπους:
Βήμα 1. Λύνοντας τους παρακάτω τύπους ως προς R1, R2 και LB,
και, τοποθετώντας τους τύπους υπολογισμού
(R1=…,R2=…,LB=…) στο πρόγραμμα skala.m
𝜇𝑅1 − 𝑅2 = 0
𝑅1 + 𝜇𝑅2 = 𝐵
𝐵 ∙ 𝐿𝐵 cos 𝐴 = 𝜇𝑅2 ∙ 𝐿𝑐𝑜𝑠 𝐴 + 𝑅2 ∙ 𝐿 sin 𝐴, ή 𝑅2 ∙
𝐿 𝜇 + tan 𝐴 −B 𝐿𝐵 = 0
2

Ευστάθεια Σκάλας 3/9


Βήμα 2. Λύνοντας το σύστημα των τριών εξισώσεων με τρεις
αγνώστους (R1, R2 και LB):
𝜇R1 − R 2 + 0 = 0 𝜇 −1 0 R1 0
R1 + 𝜇R 2 + 0 = Β ⇒ 1 𝜇 0 R2 = 𝐵
0 + R 2 L 𝜇 + tan 𝐴 − 𝐵𝐿𝐵 = 0 0 𝐿 𝜇 + tan 𝐴 −Β L𝐵 0

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


διάνυσμα b των σταθερών και δίνοντας στο σύστημα τη μορφή a∙Χ =
b, η οποία στο MatLab λύνεται με την αριστερή (ανάποδη) διαίρεση
πινάκων: Χ = a\b.

3
Ευστάθεια Σκάλας 4/9
Βήμα 3. Να συγκρίνετε τα αποτελέσματα των τρόπων Α1 και Α2
για τις παρακάτω τιμές των δεδομένων:

Μ Α L Β 𝐋𝑩=
0.9 35° 2.0μ 90κ ~1.5914

Τι συμβαίνει στο LB όταν το Β αλλάζει;

Ευστάθεια Σκάλας 5/9


Μέρος Β, Συνάρτηση (function) Επίλυσης
Βήμα 1. Με βάση το πρόγραμμα του Μέρους Α1, δημιουργήστε
μια συνάρτηση (function) MatLab η οποία όταν θα καλείται με
δεδομένα (L, A, μ) και θα υπολογίζει και θα επιστρέφει το LB.
Η συνάρτηση θα ορίζεται με την εντολή: function Lb =
LBskalas(L, A, m), και πρέπει να αποθηκευτεί με το ίδιο όνομα:
LBskalas.m
Όταν μετατρέπουμε ένα πρόγραμμα σε συνάρτηση, καταργούμε
όλα τα input και disp και τα αντιστοιχίζουμε στις εισόδους και
στις εξόδους της. Η συνάρτηση δεν έχει πλέον διαλόγους με τον
χρήστη, δέχεται όποιους αριθμούς βάλουμε στη παρένθεση και
επιστρέφει το αποτέλεσμα.
5
Ευστάθεια Σκάλας 6/9
Μπορούμε να δοκιμάσουμε τη λειτουργία της στο Command
Window δίνοντας:
>> LBskalas(2,35,0.9)
ans = 1.5914

Το αποτέλεσμα πρέπει να συμφωνεί με αυτό του Α3.


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

Ευστάθεια Σκάλας 7/9


Βήμα 2. Να γράψετε το κυρίως πρόγραμμα (skales.m) που θα
καλεί τη παραπάνω συνάρτηση για πολλούς συνδυασμούς των
δεδομένων Α και μ, και για δεδομένο μήκος σκάλας L = 3.0
μέτρα. Το Α μεταβάλλεται από 10ο έως 80ο ανά 10ο και το μ =
από 0.4 έως 1.2 ανά 0.1.
Δημιουργήστε από ένα διάνυσμα για τα Α και μ.
Χρησιμοποιήστε δυο εμφωλευμένα (nested) for για να κάνετε
όλους τους συνδυασμούς.
Αποθηκεύστε τα Lb σε πίνακα ώστε να μπορούν να
απεικονισθούν σε διάγραμμα π.χ.:
Lb(i,j) = LBskalas(L,A(i),m(j))

7
Ευστάθεια Σκάλας 8/9
Το κυρίως πρόγραμμα θα σχεδιάζει τα αποτελέσματα σε ένα 3-D
διάγραμμα τη σχέση του μήκους 𝐿𝐵 με τη γωνία Α και τον
συντελεστή μ (εντολή surf(Lb)).
(Παρατηρήστε τις τιμές στους άξονες ΧΥ που έχουν τις τιμές των
i και j αντί των Α και μ).
Βήμα 3. Αντί του διπλού for να γίνει χρήση των πράξεων
πινάκων και της meshgrid() του MatLab.
Διορθώστε τη συνάρτηση LBskalas() ώστε όλες οι πράξεις να
γίνονται στοιχείο-στοιχείο (δηλ.: .*, ./ και .^) και έτσι να
λειτουργεί και για διανύσματα όχι μόνο για βαθμωτές.

Ευστάθεια Σκάλας 9/9


Δημιουργήστε το ΧΥ πλέγμα από τα Α και μ με τη meshgrid() και
καλέστε την συνάρτηση LBskalas() για να υπολογίσει όλα τα
στοιχεία του πλέγματος. Σχεδιάστε τα Χ,Υ,Ζ με τη surf.
[X, Y] = meshgrid(A,m)
Z = LBskalas(L,X,Y)
surf (X, Y, Z)

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


(Παρατηρήστε ότι οι άξονες ΧΥ έχουν τώρα τις τιμές των Α και
μ).

9
Ενότητα 9: Matlab Άσκηση 9

Ανοιχτή Όδευση 1/5


Όταν η απόσταση μεταξύ δύο σημείων είναι πολύ μεγάλη και
δεν μπορεί να γίνει απ’ ευθείας μέτρηση (λόγω ακρίβειας των
οργάνου, φυσικών εμποδίων, κλπ.), χρησιμοποιούνται
ενδιάμεσα σημεία-στάσεις των οποίων οι αποστάσεις μπορούν
να μετρηθούν με ακρίβεια (Ανοιχτή Όδευση). Η μετρήσεις
γίνονται ως εξής (βλ. σχήμα 1):
ξεκινάμε από το Α0 και σε κάθε ενδιάμεσο σημείο (i) μετρούνται
για το επόμενο σημείο (i+1), α) η απόσταση S𝑖+1 , β) η
κατακόρυφη γωνία W𝑖+1 , και, γ) η δεξιόστροφη γωνία B𝑖+1 , από
το προηγούμενο σημείο (i-1) προς το επόμενο σημείο (i+1).

1
Ανοιχτή Όδευση 2/5

Σχήμα 1: Οι μετρήσεις 𝑆𝑖 και 𝐵𝑖 γίνονται σε κάθε ενδιάμεσο σημείο-στάση


(i-1) για να υπολογισθεί το επόμενο σημείο (i).

Ανοιχτή Όδευση 3/5


Καθώς οι παραπάνω μετρήσεις είναι σχετικές η μία προς την
άλλη, δεν μπορούν να μας δώσουν απόλυτες συντεταγμένες.
Αυτό που μας χρειάζεται στην αρχή, είναι οι απόλυτες
συντεταγμένες του πρώτου σημείου 𝐴0 (𝑋0 , 𝑌0 , 𝑍0 ) ως προς το
σύστημα αξόνων που χρησιμοποιούμε, και δεύτερον, η
κατεύθυνση των αξόνων Χ-Υ, η οποία μας δίνεται (με τη βοήθεια
ενός προηγουμένου σημείου αναφοράς 𝐴−1 ) σαν τη
δεξιόστροφη γωνία 𝐹0 του άξονα Υ με τη γραμμή 𝐴0 𝐴−1 (βλ.
σχήμα 2).

Σχήμα 2: Οι αρχικές και οι διαδοχικές μετρήσεις για 4 σημεία-στάσεις


3
Ανοιχτή Όδευση 4/5
Μέρος Α, Ανοιχτή Όδευση
Να γραφεί πρόγραμμα που να υπολογίζει τις συντεταγμένες X,
Y, Z ενός απομακρυσμένου σημείου ξεκινώντας από κάποιο
άλλο σημείο 𝐴0 του οποίου η θέση, στο χρησιμοποιούμενο
σύστημα αξόνων Χ-Υ-Ζ, είναι γνωστή.

Οι Αναδρομικοί Υπολογισμοί
Από την αρχική γωνία 𝐹0 (= 𝐺0 + 180° ) και τις γωνίες
𝐵𝑖 υπολογίζουμε αναδρομικά τη γωνία 𝐺𝑖 που σχηματίζει κάθε
τμήμα 𝑆𝑖 με τον άξονα Y:
𝐺𝑖 = 𝐵𝑖 + 𝐺𝑖 -1 + 180° ( - 360° )
και, από τα μήκη 𝑆𝑖 και τις γωνίες 𝐺𝑖 και 𝑊𝑖 υπολογίζουμε
αναδρομικά τις συντεταγμένες όλων των σημείων (𝑋𝑖 , 𝑌𝑖 , 𝑍𝑖 ):
• 𝑋𝑖 = 𝑋𝑖−1 + 𝑆𝑖 ∙ ημ 𝐺𝑖
• 𝑌𝑖 = 𝑌𝑖−1 + 𝑆𝑖 ∙ συν 𝐺𝑖
• 𝑍𝑖 = 𝑍𝑖−1 + 𝑆𝑖 ∙ εφ 𝑊𝑖

5
Τα Δεδομένα
Τα αρχικά δεδομένα (𝑋0 , 𝑌0 , 𝑍0 , 𝐹0 ) και τα δεδομένα όλων των
σημείων-στάσεων (𝑆𝑖 , 𝐵𝑖 , 𝑊𝑖 ) μας δίνονται, από τον μηχανικό
που κάνει τις μετρήσεις, σε δύο αρχεία (odeysidata0.txt και
odeysidata1.txt) με τη παρακάτω μορφή (π.χ.):
odeysidata0.txt odeysidata1.txt

X0 Y0 Z0 F0 S B W
10 10 10 255 0 0 0
100 180 0.9
100 198 0.9
100 207 0.9
55 120 0
80 290 0
60 230 0
118 100 -1
121 120 -1
132 200 -2
6

Η Διαδικασία
1. Δημιουργήστε τα δυο παραπάνω αρχεία δεδομένων.
2. Ξεκινήστε τη δημιουργία του προγράμματος, καλώντας την
εντολή importdata() δύο φορές για να διαβάσετε τα δύο αρχεία.
3. Αντιγράψτε τις στήλες των πινάκων στις αντίστοιχες μεταβλητές S,
B, W, υπολογίστε το G0 από το F0 και βάλτε όλες τις αρχικές τιμές
(G0, X0, Y0, Z0) στη πρώτη θέση των αντίστοιχων διανυσμάτων (G,
X, Y, Z).
4. Χρησιμοποιήστε μια επανάληψη for i=2…N για τους
αναδρομικούς τύπους, και να αποθηκεύετε τα αποτελέσματα στα
διανύσματα G, Χ, Υ και Ζ (Σημ.: για τις τριγωνομετρικές
συναρτήσεις οι μοίρες να γίνουν ακτίνια).
5. Εμφανίστε τα αποτελέσματα στο Command Window σε μορφή
πίνακα και σχεδιάστε την όδευση σε διάγραμμα 2-D (X-Y) και 3-D
(X-Y-Z) (εντολές plot() και plot3()).

7
Παράδειγμα Αποτελεσμάτων 1/2
X Y Z
10.0000 10.0000 10.0000
80.7107 80.7107 11.5709
169.8113 126.1097 13.1419
269.8113 126.1097 14.7128
297.3113 173.7411 14.7128
348.7343 112.4576 14.7128
338.3154 53.3691 14.7128
449.1992 13.0107 12.6531
541.8906 90.7880 10.5410
665.9300 135.9347 10.0802

Παράδειγμα Αποτελεσμάτων 2/2

9
Ανοιχτή Όδευση 5/5
Μέρος Β, Άλλα Δεδομένα
• Εκτελέστε ξανά το πρόγραμμά σας για το παρακάτω σύνολο
δεδομένων (το αρχικό σημείο του odeysidata0.txt είναι το
ίδιο), βρείτε τις συντεταγμένες όλων των σημείων και
σχεδιάστε τα όπως στο Μέρος Α:
οdeysidata2.txt
S B W
0 0 0
300 135 0
150 210 0
150 300 0
300 210 0
50 270 0
150 270 0
50 90 0
150 90 0
50 270 0 10

Ενότητα 10: Matlab Άσκηση 10


Καμπτικές Ροπές Αμφιέρειστης Δοκού
1/14
Να υπολογίσετε, με τη βοήθεια του MatLab, τις δυνάμεις και τις
καμπτικές ροπές σε μία αμφιέρειστη δοκό που φορτίζεται από
συγκεντρωμένα και κατανεμημένα φορτία.
Μέρος Α, Καμπτικές Ροπές Δοκού από Σημειακά Φορτία
Η δοκός, μήκους L=10m, φορτίζεται με ένα συγκεντρωμένο
φορτίο P=700kN σε απόσταση PL=4m από το Α, και, ένα
συγκεντρωμένο φορτίο R=400kN σε απόσταση RL=7m από το Α.
Το πρόβλημα περιγράφεται και στο παρακάτω σχήμα:

Καμπτικές Ροπές Αμφιέρειστης Δοκού


2/14
Βήμα 1: Να γράψετε ένα αρχικό πρόγραμμα (dokos.m) όπου θα
ορίζονται τα δεδομένα του προβλήματος (να δίνονται σαν
σταθερές, όχι με input) και θα υπολογίζονται οι αντιδράσεις Fa
και Fb στα σημεία στήριξης Α και Β αντίστοιχα. Το πρόγραμμα
θα περιέχει τα παρακάτω:
• Ορισμός των Δεδομένων του προβλήματος (L, P, PL, R, RL)
• Υπολογισμός Fa από ισορροπία ροπών ως προς Β (ΣΜΒ=0).
• Υπολογισμός Fb από ισορροπία ροπών ως προς Α (ΣΜΑ=0).
• Σύγκριση του (Fa+Fb) με το άθροισμα όλων των φορτίων για
επαλήθευση (ΣFΥ=0).

2
Καμπτικές Ροπές Αμφιέρειστης Δοκού
3/14
Παράδειγμα Αποτελεσμάτων από το Βήμα 1 της άσκησης:
>> dokos
To Athroisma Olwn twn Fortiwn (P+R) einai: 1100 kN
H antidrasi Fa sto A einai: 540 kN
H antidrasi Fb sto B einai: 560 kN
To athroisma twn Antidrasewn (Fa+Fb) einai: 1100 kN
>>

Καμπτικές Ροπές Αμφιέρειστης Δοκού


4/14
Βήμα 2: Να συμπληρώσετε στη συνέχεια το πρόγραμμα ώστε να
υπολογίζει τις καμπτικές ροπές κατά μήκος της δοκού (να
χρησιμοποιηθούν τουλάχιστον Ν=10 διαστήματα υπολογισμού).
• Ο επαναληπτικός υπολογισμός (βήματα κατά μήκος της δοκού)
γίνεται με μια εντολή for i=1:N, … … … end.
• Σε κάθε βήμα i, η θέση Χ μετατοπίζεται (αυξάνει) από το σημείο Α
(0) προς το σημείο Β (L) κατά dL = L/N.
• Σε κάθε βήμα ελέγχουμε και υπολογίζουμε τη ροπή του κάθε
φορτίου ως προς το τρέχον Χ
• Για κάθε ένα φορτίο ο έλεγχος θα γίνεται από μία ξεχωριστή
εντολή ελέγχου: if X > …, …; end (Συμβουλευτείτε το παράδειγμα
από το θεωρητικό μάθημα).
• Τέλος, οι επί μέρους καμπτικές ροπές των φορτίων θα αθροίζονται
για να δώσουν τη συνολική καμπτική ροπή της δοκού.
• Όλες οι ροπές και η θέση Χ θα τυπώνονται όπως στο παράδειγμα
παρακάτω.
4
Καμπτικές Ροπές Αμφιέρειστης Δοκού
5/14
Παράδειγμα Αποτελεσμάτων από το Βήμα 2 της άσκησης:
Kamptikes Ropes (BM)
x BMx_Fa BMx_P BMx_R BMx
0.00 -0.00 0.00 0.00 0.00
1.00 -540.00 0.00 0.00 -540.00
2.00 -1080.00 0.00 0.00 -1080.00
3.00 -1620.00 0.00 0.00 -1620.00
4.00 -2160.00 0.00 0.00 -2160.00
5.00 -2700.00 700.00 0.00 -2000.00
6.00 -3240.00 1400.00 0.00 -1840.00
7.00 -3780.00 2100.00 0.00 -1680.00
8.00 -4320.00 2800.00 400.00 -1120.00
9.00 -4860.00 3500.00 800.00 -560.00
10.00 -5400.00 4200.00 1200.00 0.00
>>

Καμπτικές Ροπές Αμφιέρειστης Δοκού


6/14
Βήμα 3: Να τροποποιήσετε το πρόγραμμα ώστε τα
αποτελέσματα να αποθηκεύονται και σε πίνακες ή διανύσματα,
τα οποία θα χρησιμοποιήσετε στη συνέχεια για να σχεδιάσετε
(με τη plot) το διάγραμμα με τη συνολική καμπτική ροπή καθώς
και τη καμπτική ροπή κάθε φορτίου. Επάνω στα διαγράμματα
των ροπών να προσθέσετε: πλέγμα (grid), υπόμνημα (legend),
καθώς και μια οριζόντια μαύρη γραμμή στο μηδέν σαν ένδειξη
για τη δοκό.

6
Καμπτικές Ροπές Αμφιέρειστης Δοκού
7/14
Παράδειγμα Αποτελεσμάτων από το Βήμα 3 της άσκησης:
Διαγράμματα καμπτικών ροπών, συνολικά και ανά φορτίο:

Καμπτικές Ροπές Αμφιέρειστης Δοκού


8/14
Βήμα 4: Τι προσθήκες θα κάνετε στο πρόγραμμα αν πρέπει
προστεθεί ένα ακόμη φορτίο S=500kN στο μέσον της δοκού,
ώστε να υπολογίζεται και αυτό στη συνολική ροπή;

8
Καμπτικές Ροπές Αμφιέρειστης Δοκού
9/14
Μέρος Β, Καμπτικές Ροπές Δοκού από Σημειακά και Συνεχή
Φορτία
Η δοκός του Μέρους Α, φορτίζεται επιπλέον και με ένα
κατανεμημένο φορτίο Q=100kN/m μήκους QL=3m και αρχή
εφαρμογής σε απόσταση QA=5m από το Α. Το πρόβλημα
περιγράφεται και στο παρακάτω σχήμα:

Καμπτικές Ροπές Αμφιέρειστης Δοκού


10/14
Βήμα 1: Βασιζόμενοι στο πρόγραμμα του Μέρους Α, να συμπληρώσετε
το πρόγραμμα ώστενα υπολογίζονται σωστά οι αντιδράσεις Fa και Fb
λόγω και του Q, και να υπολογίζει τις καμπτικές ροπές της δοκού
εξετάζοντας και την επίδραση του συνεχούς φορτίου Q.
• Στον υπολογισμό των αντιδράσεων να συμπεριληφθεί το συνεχές
φορτίο, (δηλ., το ισοδύναμό του (Q∙QL) στο σημείο (QA+QL)/2 που
είναι το μέσον του).
• Ο επαναληπτικός υπολογισμός (βήματα κατά μήκος της δοκού) θα
γίνεται με μια εντολή FOR. Σε κάθε βήμα, η θέση Χ μετατοπίζεται από
το σημείο Α προς το σημείο Β κατά dL=L/N. Σε κάθε βήμα ελέγχουμε
και υπολογίζουμε τη ροπή του κάθε φορτίου ως προς το τρέχον Χ
(όπως και στο παράδειγμα πρόγραμμα του 1ου Μέρους).
• Μέσα στην επανάληψη θα προστεθεί ο απαραίτητος έλεγχος για τον
υπολογισμό της καμπτικής ροπής του κατανεμημένου φορτίου Q, με
μια εντολή ελέγχου της μορφής: if X<QA…, …; elseif X< (QA+QL)…, …;
else …; end. Πρίν το σημείο QA δεν υπάρχει ροπή, μετά το QA και
πριν το (QA+QL) δρα ένα μέρος του Q, μετά το (QA+QL) δρα όλο το Q.
10
Καμπτικές Ροπές Αμφιέρειστης Δοκού
11/14
Παράδειγμα Αποτελεσμάτων της άσκησης:

To Athroisma Olwn twn Fortiwn (P+R+Q*QL) einai: 1400 kN


H antidrasi Fa sto A einai: 645 kN
H antidrasi Fb sto B einai: 755 kN
To athroisma twn Antidrasewn (Fa+Fb) einai: 1400 kN
Kamptikes Ropes (BM):

11

Καμπτικές Ροπές Αμφιέρειστης Δοκού


12/14
Kamptikes Ropes (BM)
Thesi BMxFa BMxP BMxR BMxQ BMx
x
0 0 0 0 0 0
1 -645 0 0 0 -645
2 -1290 0 0 0 -1290
3 -1935 0 0 0 -1935
4 -2580 0 0 0 -2580
5 -3225 700 0 0 -2525
6 -3870 1400 0 50 -2420
7 -4515 2100 0 200 -2215
8 -5160 2800 400 450 -1510
9 -5805 3500 800 750 -755
10 -6450 4200 1200 1050 0
>>

12
Καμπτικές Ροπές Αμφιέρειστης Δοκού
13/14
Διαγράμματα καμπτικών ροπών, συνολικά και ανά φορτίο:

13

Καμπτικές Ροπές Αμφιέρειστης Δοκού


14/14
Βήμα 2: Εάν η δοκός είχε ένα ακόμη βάρος Β=500kN
κατανεμημένο ομοιόμορφα σε όλο το μήκος της, να προσθέσετε
τις απαραίτητες εντολές ή διορθώσεις στο πρόγραμμα ώστε να
συνυπολογίζει το βάρος της στη συνολική ροπή.

14
Ενότητα 11: Matlab XL Άσκηση 11

Υπολογισμός Ανοιχτής Όδευσης (στο


EXCEL) 1/4
Όταν μια απ' ευθείας τοπογραφική μέτρηση είναι αδύνατη, τότε
η θέση του τελικού σημείου προσδιορίζεται με τη βοήθεια
ενδιάμεσων σημείων (στάσεις) των οποίων οι αποστάσεις
μπορούν να μετηθούν με ακρίβεια. Σε κάθε θέση (i-1) μετράμε
τη γωνία Bi και την απόσταση Si και υπολογίζουμε τις
συντεταγμένες της θέσης (i). Απαιτείται μόνο ένα αρχικό σημείο
(Α0) με γνωστές συντεταγμένες και προσανατολισμό (βλ.
MatLab Άσκηση 9).

1
Υπολογισμός Ανοιχτής Όδευσης (στο
EXCEL) 2/4
Οι τύποι υπολογισμού είναι αναδρομικοί και υπολογίζουν κάθε
σημείο από το προηγούμενο:
Gi = Bi + Gi-1 + 180º (- 360º)
Yi = Yi-1 + Si · συν ( Gi )
Xi = Xi-1 + Si · ημ ( Gi )
Zi = Zi-1 + Si · εφ ( Wi )
με αρχικές τιμές: τις συντεταγμένες του αρχικού σημείου Α0 και
τη γωνία F0 με τον άξονα Υ, όπου: F0 = G0 + 180°

Υπολογισμός Ανοιχτής Όδευσης (στο


EXCEL) 3/4
Δίνονται τα παρακάτω δεδομένα από 9 στάσεις και το αρχικό
σημείο Α0.
1. Συμπληρώστε στο πίνακα τους τύπους υπολογισμού των
συντεταγμένων.
2. Σχεδιάστε την όδευση σε 2-D (X-Y).
3. Δοκιμάστε το πρόγραμμά σας και με άλλα δεδομένα για
επαλήθευση.

3
Υπολογισμός Ανοιχτής Όδευσης (στο
EXCEL) 4/4

(επίσης από Α0)


Τι θα συμβεί στη τελευταία στάση;
Τι σχήμα θα δημιουργηθεί στο
διάγραμμα;

Ενότητα 12: Matlab XL Άσκηση 12


Πίνακες και Λύση Συστημάτων (στο
EXCEL) 1/7
Βήμα 1. Γινόμενο Διανυσμάτων

Πίνακες και Λύση Συστημάτων (στο


EXCEL) 2/7
Βήμα 2. Γινόμενο Αριθμού με Διάνυσμα

=C10*$C$22

Το σύμβολο ($) κρατά σταθερό το C22


και έτσι αλλάζει μόνο το C10 σε C11 …
C14 όπως προχωράμε προς τα κάτω.

2
Πίνακες και Λύση Συστημάτων (στο
EXCEL) 3/7
Βήμα 3. Πολλαπλασιασμός Πινάκων

Επιλέγουμε (μαυρίζουμε) τη περιοχή όπου θα μπεί το αποτέλεσμα,


και επάνω, στη γραμμή του editor, εισάγουμε τη συνάρτηση MMULT
(πίνακας C ; Πίνακας D).
Δεν πατάμε Enter αλλά CTRL+SHIFT+ENTER για να καταλάβει το Excel
ότι πρόκειται για πίνακα (και προσθέτει αγκύλες { } γύρω από την
εντολή).

Πίνακες και Λύση Συστημάτων (στο


EXCEL) 4/7
Βήμα 4. Ορίζουσα και Αντίστροφος Τετραγωνικού Πίνακα

4
Πίνακες και Λύση Συστημάτων (στο
EXCEL) 5/7
Βήμα 5. Να λυθούν με τη βοήθεια Πινάκων τα παρακάτω
Συστήματα Εξισώσεων
i. 2𝑥 + 2𝑦 = 6 , 4𝑥 + 9𝑦 = 15
𝑦
ii. 3𝑥 + 2𝑦 − 𝑧 = 1 , 2𝑥 − 2𝑦 + 4𝑧 = −2 , −𝑥 + 2 − 𝑧 = 0
iii. 5𝑥1 + 8𝑥2 − 12𝑥3 + 3𝑥4 = 3,
6𝑥1 + 2𝑥2 − 3𝑥3 + 5𝑥4 = 7, 8𝑥1 + 4𝑥2 − 6𝑥3 + 7𝑥4 = −1,
3𝑥1 + 2𝑥2 − 10𝑥3 + 9𝑥4 = 13

Πίνακες και Λύση Συστημάτων (στο


EXCEL) 6/7
Π.Χ.: (i)

𝐴 ∙ 𝑋 = 𝐵 → 𝑋 = 𝐴−1 ∙ 𝐵
Με τη χρήση των Function
MINVERSE και MMULT

6
Πίνακες και Λύση Συστημάτων (στο
EXCEL) 7/7
Για κάθε μεταβλητή, κάνουμε τη διαίρεση δυο οριζουσών. Ο
παρονομαστής είναι πάντα η ορίζουσα του πίνακα των
συντελεστών, ενώ ο αριθμητής είναι η ορίζουσα του πίνακα των
συντελεστών όπου οι συντελεστές της μεταβλητής έχουν
αντικατασταθεί από τους σταθερούς όρους.
Π.Χ.: (i)
Με τη χρήση της
Function MDETERM

𝐴𝑥 Να ελέγξετε ότι τα
𝑥= = 1,5
𝐴 αποτελέσματα των
Βημάτων 5 και 6
𝐴𝑦 συμφωνούν.
𝑦= =1
𝐴 7

Ενότητα 13: Matlab XL Άσκηση 13


Άσκηση 13

Για να δείτε ολόκληρη την άσκηση ανατρέξτε στο υποστηρικτικό


υλικό: «MatLab_XL_Άσκηση_13_(Χειμερινό_14).pdf»
1
Τ.Ε.Ι ΑΘΗΝΑΣ, Σ.Τ.ΕΦ.,
ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧ. TE ΜΗΧ. ΤΟΠΟΓΡΑΦΙΑΣ ΓΕΩΠΛΗΡΟΦΟΡΙΚΗΣ TE
ΤΟΜΕΑΣ ΔΟΜΟΣΤΑΤΙΚΗΣ

A B C D E F G H I J K L
1 Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ & ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Α’ Εξ.) Χειμερινό Εξάμηνο 2014-15
2 Εργαστηριακή Άσκηση
3 13 - Καμπτικές Ροπές Αμφιέρειστης Δοκού (στο EXCEL)
4
5 ΔΟΚΟΣ L Μήκους (m)
6 (L) 10
7 Σημειακό Κατανεμημένο
8 Φορτίο Φορτίο
9 P Q
10 (P) 300 (kN) (Q) 200 (kN/m)
11 Θέση PL Αρχή QA
12 (PL) 2 (m) (QA) 4 (m)
13 Μήκος QL
14 (QL) 4 (m)
15 Συνολικό Κατανεμ. Φορτίο: 800 (kN)
16 Υπολογισμός Αντιδράσεων στις στηρίξεις
17 Ροπές ως προς Α MaP MaQ
18 (kNm) 600 4800
19 Ροπές ως προς Β MbP MbQ
20 (kNm) 2400 3200 Αντιδράσεις
21 Αντίδραση στο Β λόγω: FbP FbQ Fb
22 (kN) 60 480 540
23 Αντίδραση στο Α λόγω: FaP FaQ Fa
24 (kN) 240 320 560 (Fa)
25 Fa+Fb = 1100
26 Επαλήθευση: P+Q*QL= 1100
27 Καμπτικές Ροπές
28 Διαστήματα υπολογ. N 20 (N)
29 Βήμα dL (m) = 0,5 (dL)
30 Σύνολο
31 Θέση X BMxFa BMxP BMxQ BMx
32 0 0 0 0 0
33 0,5 -280 0 0 -280
34 1 -560 0 0 -560
35 1,5 -840 0 0 -840
36 2 -1120 0 0 -1120
37 2,5 -1400 150 0 -1250
38 3 -1680 300 0 -1380
39 3,5 -1960 450 0 -1510
40 4 -2240 600 0 -1640
41 4,5 -2520 750 25 -1745
42 5 -2800 900 100 -1800
43 5,5 -3080 1050 225 -1805
44 6 -3360 1200 400 -1760
45 6,5 -3640 1350 625 -1665
46 7 -3920 1500 900 -1520
47 7,5 -4200 1650 1225 -1325
48 8 -4480 1800 1600 -1080
49 8,5 -4760 1950 2000 -810
50 9 -5040 2100 2400 -540
51 9,5 -5320 2250 2800 -270
52 10 -5600 2400 3200 0
Τ.Ε.Ι ΑΘΗΝΑΣ, Σ.Τ.ΕΦ.,
ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧ. TE ΜΗΧ. ΤΟΠΟΓΡΑΦΙΑΣ ΓΕΩΠΛΗΡΟΦΟΡΙΚΗΣ TE
ΤΟΜΕΑΣ ΔΟΜΟΣΤΑΤΙΚΗΣ

M N O P Q R S T U
ξάμηνο 2014-15
1
2 Καμπτικές Ροπές
3 BMxFa BMxP BMxQ BMx
4 8000
5
6000
6
7 4000
8
9 2000
kN*m

10
11 0
12 0 1 2 3 4 5 6 7 8 9 10
-2000
13
14 -4000
15
16 -6000
17
18 -8000 Θέση Χ
19
20
21 Βοήθημα 1: Scroll Bars για τη ρύθμιση των Φορτίων (μέγεθος & θέση)
22
23 ΒΗΜΑΤΑ:
24 1. Άνοιγμα Εργαλειοθήκης Control Toolbox: View > Toolbars > Control Toolbox
25
26
27 Με το πρώτο πλήκτρο της εργαλειοθήκης επιλέγουμε για: Design Mode
28 (Οταν τελειώσουμε το επιλέγουμε πάλι για: Exit Design Mode)
29 2. Επιλογή εργαλείου Scroll Bar και τοποθέτηση στο φύλλο εργασίας
30 (ένα για κάθε ποσότητα που θέλουμε να μεταβάλλουμε)
31
32
33 3. Ορισμός Ορίων και Συνδεδεμένου Κελιού για κάθε Scroll Bar, από τον πίνακα ιδιοτήτων
34 (Δεξί Κλίκ > Properties)
35
36 Π.Χ.: Για τα Διαστήματα υπολογ. Ν ορίζουμε
37 LinkedCell C28
38 Max 20
39 Min 1
40
41 4. Το ίδιο επαναλαμβάνεται και για τα υπόλοιπα
42 Τα όρια τους θα είναι:
43 για το ScrollBar_P: 0 - 1000
44 για το ScrollBar_Q: 0 - 500
45 για το ScrollBar_PL: 0 - 10
46 για το ScrollBar_QA: 0 - 6
47 για το ScrollBar_QL: 1 - 4
48 Για τις δυμάμεις ορίζουμε επίσης βήμα αλλαγής
49 μεγαλύτερο από 1, π.χ., να είναι 10 ή 50
50 (LargeChange & SmallChange).
51
52 5. Εφαρμόστε την ίδια τεχνική για το πλήθος διαστημάτων Ν στα Ολοκληρώματα της Άσκησης 7.
Τ.Ε.Ι ΑΘΗΝΑΣ, Σ.Τ.ΕΦ.,
ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧ. TE ΜΗΧ. ΤΟΠΟΓΡΑΦΙΑΣ ΓΕΩΠΛΗΡΟΦΟΡΙΚΗΣ TE
ΤΟΜΕΑΣ ΔΟΜΟΣΤΑΤΙΚΗΣ

V W X Y Z AA AB AC AD
1
2 Βοήθημα 2: ΤΥΠΟΙ ΥΠΟΛΟΓΙΣΜΟΥ ΤΩΝ ΑΝΤΙΣΤΟΙΧΩΝ ΚΕΛΙΩΝ
3
4 πλαίσιο : Δεδομένα του προβλήματος. Όλες οι άλλες ποσότητες υπολογίζονται.
5 (όνομα) Ονομα Μεταβλητής του (διπλανού) κελιού για χρήση αντί του C6, G14, κλπ.
6 2003: Insert > Name > Define... 2007: Formulas > Name Managern > Define Name...
7 MaP P*PL
8 MbP P*(L-PL)
9 FbP C18/L
10 FaP C20/L
11 Fa SUM(C24;G24)
12 dL L/N
13 Θέση X IF(A32+dL>L ; L ; A32+dL)
14 BMxFa -Fa*A32
15 BMxP IF($A32<=PL ; 0 ; P*($A32-PL))
16 BMxQ IF($A32<=QA ; 0 ; IF($A32>(QA+QL) ; Q*QL*($A32-QA-QL/2) ; Q*($A32-QA)^2/2))
17
18 Προσοχή στους τύπους: να γράφονται στα Αγγλικά!
19
20
QA QL
21
PL
22 Q
23 P
24
25
26 L
A B
27 0 1 dL 2 3 ( ... N )
28
29 x
Fa Fb
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Ενότητα 14: Matlab Άσκηση 14

Δημιουργία GUI στο MatLab 1/10


Μέρος Α, Λύση του Τριωνύμου με Υποπρόγραμμα
(Συνάρτηση) και Χρήση GUI
Στην άσκηση αυτή θα δημιουργήσετε ένα πρόγραμμα το οποίο,
αντί του Command Window, θα χρησιμοποιεί ένα GUI (Graphical
User Interface - Γραφική Διεπαφή Χρήστη) για την είσοδο των
δεδομένων και την εμφάνιση των λύσεων του προβλήματος του
τριωνύμου: Α ∙ 𝑥 2 + 𝐵 ∙ 𝑥 + 𝐶 = 0 π.χ.:
Η γραφική διεπαφή χρήστη (GUI) θα έχει περίπου την
παραπάνω μορφή όπου τα δεδομένα (A, B, C) θα
συμπληρώνονται από τον χρήστη στις αντίστοιχες θέσεις και
όταν πατηθεί το πλήκτρο ΛΥΣΗ θα εμφανίζονται οι λύσεις (x1,
x2).

1
Δημιουργία GUI στο MatLab 2/10
• Συγκεκριμένα, όταν πατηθεί το πλήκτρο ΛΥΣΗ από τον χρήστη
θα καλείται μια συνάρτηση (υποπρόγραμμα/διαδικασία) που
θα διερευνά και θα λύνει το τριώνυμο. Πρόκειται για το
πρόγραμμα που έχετε ήδη ολοκληρώσει στην άσκηση 3 και
το οποίο με μικρές αλλαγές θα μετατραπεί σε
υποπρόγραμμα-συνάρτηση ώστε να το καλούν άλλα
προγράμματα MatLab (π.χ. το GUI).

Δημιουργία GUI στο MatLab 3/10


Βήμα 1. Δημιουργία Υποπρογράμματος (συνάρτηση MatLab) από το
υπάρχον πρόγραμμα.
Θα βασιστείτε σε προηγούμενο πρόγραμμα σας (Άσκηση 3 - MatLab)
για τη Λύση και τη Διερεύνηση του Τριωνύμου. Με βάση το
πρόγραμμα αυτό, θα δημιουργήστε μια συνάρτηση function [x1,x2] =
lysitriwnymou (A, B, C) η οποία θα δέχεται τους 3 συντελεστές (A, B, C)
και θα επιστρέφει τις 2 απαντήσεις (x1, x2) οι οποίες θα περιέχουν
είτε τις λύσεις (αριθμούς) είτε τα σχετικά μηνύματα. Για να γίνει αυτό:
1. Αντιγράφετε τον κώδικά σας σε ένα νέο αρχείο.
2. Αφαιρείτε τις εντολές εισόδου/εξόδου (Ι/Ο) όπως: input, disp,
sprintf, κλπ.
3. Προσθέτετε, σαν πρώτη εντολή, τον ορισμό της συνάρτησης
function όπως δίνεται πιο πάνω.
4. Ελέγχετε ότι οι μεταβλητές σας (A, B, C, X1, X2) είναι σωστές
(κεφαλαία, πεζά, κλπ).

3
Δημιουργία GUI στο MatLab 4/10
5. Αποθηκεύετε το πρόγραμμα με όνομα ίδιο με αυτό της
συνάρτησης (δηλ.: lysitriwnymou.m).
• Τέλος, εκτελείτε τη συνάρτηση δοκιμαστικά για μερικές τιμές
των συντελεστών (A,B, C) για να βεβαιωθείτε ότι λειτουργεί
σωστά και ότι δίνει τις παρακάτω τιμές και μηνύματα:

ΤΡΙΩΝΥΜΟ Χ1 X2
𝑥 2 − 3𝑥 + 2 = 0 2.0 1.0
2𝑥 2 − 4𝑥 + 2 = 0 -1.0 -1.0
0𝑥 2 − 4𝑥 + 2 = 0 -0.5 ‘(Γραμμική Εξίσωση)’
0𝑥 2 − 0𝑥 + 2 = 0 ‘Λύση:’ ‘ΑΔΥΝΑΤΗ’
0𝑥 2 − 0𝑥 + 0 = 0 ‘Λύση:’ ‘ΑΟΡΙΣΤΗ’
𝑥2 − 𝑥 + 2 = 0 ‘Λύσεις:’ ‘ΜΙΓΑΔΙΚΕΣ’

Δημιουργία GUI στο MatLab 5/10


Βήμα 2. Δημιουργία GUI για τα Δεδομένα και την Εμφάνιση των
Αποτελεσμάτων
1. Ανοίγετε τον EDITOR για GUI από το: Start>MATLAB>GUIDE,
ή, δίνοντας : >>guide.
2. Επιλέγετε τη δημιουργία νέου GUI: Blank GUI (Default).
3. Στον καμβά που εμφανίζετε θα τοποθετήσετε τα αντικείμενα
που απαιτούνται δηλαδή:
o Τρία (3) πλαίσια EDIT για τα δεδομένα A,B, και C,
o Δύο (2) πλαίσια TXT για τα αποτελέσματα x1 και x2,
o Ένα (1) πλήκτρο (τύπου ΟΚ) που θα εκτελεί τη λύση.

5
Δημιουργία GUI στο MatLab 6/10
4. Αποθηκεύετε το σχέδιό σας με το όνομα lysitriwnymouGUI
οπότε και δημιουργούνται αυτόματα δύο (2) αρχεία τα:
lysitriwnymouGUI.fig και lysitriwnymouGUI.m. Το πρώτο
αρχείο περιέχει την εικόνα του GUI με τα αντικείμενα που
σχεδιάσατε, και, το δεύτερο αρχείο περιέχει τον κώδικα του
GUI. Ο κώδικας του GUI δημιουργείται αυτόματα, και δεν
πρέπει να τον αλλοιώσετε. Επιτρέπεται μόνο να
προσθέσετε στις σωστές θέσεις τις κατάλληλες εντολές.

Δημιουργία GUI στο MatLab 7/10


5. Στο υποπρόγραμμα-συνάρτηση callback του πλήκτρου θα
προσθέσετε τις παρακάτω εντολές οι οποίες περιλαμβάνουν 3
ενέργειες:
o Διαβάζουν τα περιεχόμενα των τριών πλαισίων EDIT,
o Καλούν τη συνάρτησή σας για τη λύση του τριωνύμου, και,
o Στέλνουν τα αποτελέσματα στα δύο πλαίσια TXT.
A = str2double(get(handles.edit1,'String'));
B = str2double(get(handles.edit2,'String'));
C = str2double(get(handles.edit3,'String'));
[X1 X2] = lysitriwnymou(A,B,C);
set(handles.text1,'String',X1)
set(handles.text2,'String',X2)

7
Δημιουργία GUI στο MatLab 8/10
6. Εκτελέστε το GUI από το πλήκτρο
(RUN FIGURE) και δοκιμάστε τη λειτουργία του για τις
παραπάνω περιπτώσεις τριωνύμων (βλ. προηγούμενο βήμα).

Δημιουργία GUI στο MatLab 9/10


Βήμα 3. Προσθήκη Γραφικής Παράστασης του Τριωνύμου 𝑦 = 𝐴𝑥 2 +
𝐵𝑥 + 𝐶 στο GUI.
1. Επιστρέψτε στη σχεδίαση του GUI και προσθέστε:
o Ένα (1) πλαίσιο AXES για την απεικόνιση γραφικής παράστασης,
o Ένα (1) πλήκτρο (τύπου ΟΚ) που θα υπολογίζει και σχεδιάζει τα x και
y.
2. Στο υποπρόγραμμα-συνάρτηση callback του πλήκτρου θα
προσθέσετε τις παρακάτω εντολές οι οποίες περιλαμβάνουν 3
ενέργειες:
o Διαβάζουν τα περιεχόμενα των τριών πλαισίων EDIT (όπως και στο
βήμα 2),
o Δημιουργούν τα x (από -5 έως +5) και τα αντίστοιχα y του τριωνύμου,
και,
o Σχεδιάζουν τα x και y με την plot στέλνοντας τα αποτελέσματα στο
πλαίσιο AXES.

9
Δημιουργία GUI στο MatLab 10/10
A = str2double(get(handles.edit1,'String'));
B = str2double(get(handles.edit2,'String'));
C = str2double(get(handles.edit3,'String'));
x = -5:0.1:5; y = A.*x.^2+B.*x+C;
plot(handles.axes1,x,y)
set(handles.axes1,'XGrid','on','YGrid','on')
3. Εκτελέστε ξανά το GUI από το πλήκτρο
(RUN FIGURE) και δοκιμάστε τη λειτουργία των γραφικών
παραστάσεων για διάφορες περιπτώσεις τριωνύμων.
4. Προσθέσετε στο GUI ότι άλλο χρειάζεται ώστε να δίνετε
εσείς τα όρια του x, αντί να είναι σταθερά [-5, 5].
10

You might also like