Professional Documents
Culture Documents
Πληροφορική Ι (Matlab) PDF
Πληροφορική Ι (Matlab) PDF
Πληροφορική Ι (Matlab)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ
ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ
Αθήνα 2003-2004
Εισαγωγή
141. Πληροφορική I
• Εισαγωγικές έννοιες αρχιτεκτονικής και αριθµητικής υπολογιστών.
• Αλγοριθµική επίλυση προβληµάτων.
• Βασικές δοµές και αποτελεσµατικότητα αλγορίθµων.
• Προγραµµατισµός µε Matlab / Octave.
• Εφαρµογές σε µαθηµατικά, και όχι µόνο, προβλήµατα.
2
Τα ϐασικά µέρη ενός υπολογιστή
ΜΟΝΑ∆ΕΣ ΕΞΟ∆ΟΥ
ΚΕΝΤΡΙΚΗ ΜΟΝΑ∆Α
ΕΠΕΞΕΡΓΑΣΙΑΣ (ΚΜΕ)
ΑΠΟΘΗΚΕΥΣΗ (ΑΡΧΕΙΑ)
ΜΝΗΜΗ
ΜΟΝΑ∆ΕΣ ΕΙΣΟ∆ΟΥ
∆ΙΚΤΥΟ
4
Αλγόριθµος
Μαθηµατική µεθοδολογία υπολογιστικής επίλυσης κάποιου
προβλήµατος. Κάθε αλγόριθµος ικανοποιεί τα παρακάτω κριτήρια :
6. Ερµηνεία αποτελεσµάτων.
6
Βασικές εντολές
8
Μετατροπή ϐαθµών Fahrenheit σε ϐαθµούς Celsius
Fahrenheit σε Celsius: c / f
disp(c);
Αριθµητικές σταθερές
Χρησιµοποιούνται για αριθµητικές ποσότητες που δεν αλλάζουν
10
Μεταβλητές
Παραµετρική διατύπωση αλγορίθµων/προγραµµάτων.
Αναφορά σε τιµές που mεtabάλλοntai σ΄ ένα πρόγραµµα, ή τιµές
που δεν είναι γνωστές πριν την εκτέλεση (σε αντίθεση µε τις
staθερές).
Για να χρησιµοποιηθεί µια µεταβλητή στο πρόγραµµα πρέπει να
έχει πάρει κάποια τιµή.
Επιτρεπτά ονόµατα µεταβλητών είναι συνδυασµοί λatiniκώn
γραµµάτων, αριθµών και του χαρακτήρα ‘_’. Ο πρώτος χαρακτήρας
όµως δεν µπορεί να είναι αριθµός ! Παραδείγµατα :
ΝΑΙ : φ ς ρ2δ2 µεσοσ_οροσ
ΟΧΙ : 456 disp 3πο µεσοσ-οροσ
Σ΄ ένα πρόγραµµα οι µεταβλητές είναι έsεiς mnήmhς.
11
Εκφράσεις
Οι εκφράσεις έχουν timές και συνήθως εκfράζουn κάποιο υπολογισµό.
α΄
µε την προυπόθεση να έχει αρχικοποιηθεί
ϐ΄
και κλήσεις συναρτήσεων, όπως ϑα δούµε αργότερα.
12
Υπολογισµός εκφράσεων - σειρά υπολογισµού
Ανάγκη για ακριβείς κανόνες που καθορίζουν ακριβώς τη σηµασία µια
έκφρασης : Η προtερaiόthta υπολογισµών καθορίζει τη σειρά εκτέλεσης
των τελεστών σε µια έκφραση.
Η έκφραση a b a b 4+3*4-3
ισούται µε a b a b
(4 + 3) * (4 - 3) = 7
ή µε a b a b ?? 4 + (3*4) - 3 = 13
Προτεραιότητα τελεστών :
2. µετά οι ’πολλαπλασιασµοί’: ,/
3. τέλος οι ’προσθέσεις’: +,
13
Η έκφραση a/b
c ισούται µε a/ b
c ή µε a/b
c ??
/
Οι κanόnες sυsχεtismού καθορίζουν τη σειρά µεταξύ συνεχόµενων
τελεστών της ίδιας προτεραιότητας. Υπάρχει διαφορά?
Κανόνες συσχετισµού :
Η έκφραση a/b
c ισούται µε a/b c
Η έκφραση a b c d ισούται µε a b c
d
14
Εντολές ανάθεσης
Οι µεταβλητές παίρνουν συνήθως τιµές µε τις εntολές anάθεshς
µεταβλητή = έκφραση
Εποµένως η
x = x + 1;
15
f
451
φ = 451;
f c
451 232.77
ς = (φ - 32)*5/9;
f c
452 232.77
φ = φ + 1;
16
Εξοδος
Με την εντολή disp() που έχει 2 παραλλαγές :
disp(έκφραση )
disp( ’µήνυµα ’)
Για εκτύπωση :
– της τιµής της µεταβλητής x: disp(x)
– της τιµής της έκφρασης : disp(1+1)
– του µηνύµατος «Ματλαβ ισ ςοολ!»: disp( ’Matlab is cool΄)!
– του αριθµου 13: disp(13) αλλά και disp( ’13’)
ΛΑΘΟΣ : disp( f , c) (µόνο ένα όρισµα).
17
Εξοδος (συνεχ.)
Αν δεν τερµατίσουµε µιά εντολή µε ‘ ;’, τότε εκτυπώνεται η τίµη της
έκφρασης της εντολής. Π.χ.
Με την εντολή fprintf (), για πλήρη έλεγχο της µορφής της
εκτύπωσης.
18
Επανάληψη υπό συνθήκη
Μετατροπή ϐαθµών Fαηρενηειτ σε Cελσιυσ για
o
F, o F,
F, . . . ,
o
F
% Μεταβλητές
%f ϐαθµοί Fahrenheit
%c ϐαθµοί Celsius % Μεταβλητές
f = 0; %f ϐαθµοί Fahrenheit
c = (f 32) 5/9;
%c ϐαθµοί Celsius
disp( f ); disp(c); f = 0;
f = 1; while f <= 212,
c = (f 32) 5/9;
disp( f ); disp(c);
19
Η εντολή while
20
Λογικές (boolean) εκφράσεις
Στην απλούστερη µορφή τους συγκρίσεις, που σχηµατίζονται από :
µεταβλητές,
σταθερές,
αριθµητικές εκφράσεις, και
tελεstές sυsχέtishς:
21
22
Είσοδος δεδοµένων
Μετατροπή 7 ϑερµοκρασιών C σε ϐαθµούς Fα΄ (µε while). Χρειάζεται :
23
Η εντολή input
µεταβλητή = input( ’µήνυµα ’);
24
Επιλογή εναλακτικής πορείας εκτέλεσης
΄Ελεγχος n ϑερµοκρασιών F για το αν κυµαίνονται µεταξύ ανεκτού εύρους ϐαθµών C:
25
Η εντολή if
if λογική συνθήκη ,
εντολές S1
else ,
εντολές S2
TRUE FALSE
ΣΥΝΘΗΚΗ end
if λογική συνθήκη ,
εντολές S
end
26
Λογικοί (boolean) τελεστές
Σύζευξη (και) µε τελεστή & (διµελής)
o
Αν η ϑερµοκρασία είναι κάτω απο C και ϐρέχει, τότε χιονίζει.
p q ˜p p&q p q
1 1 0 1 1
Πίνακας αλήθειας : 1 0 0 1
0 1 1 0 1
0 0 0 0
27
και τέλος οι διµελείς λογiκοί τελεστές.
x = 5;
x >1& x <3 % FALΣΕ
1< x <3 % TRΥΕ
28
Μια άλλη εντολή επανάληψης
Μετατροπή 7 ϑερµοκρασιών C σε ϐαθµούς F (µε χρήση της εντολής for).
29
Η εντολή for
30
Παραδείγµατα for
for i = 1:10, disp( i ); end
for j = 1:1:10, disp( j ); end
for m = 2:3:10, disp(m); end
for odd = 1:2:100, disp(odd); end
for even = 0:2:100, disp(even); end
for nothing = 100:10:1, disp(nothing ); end
for nada = 100: 500:100000, disp(nada); end
for countdown = 10: 1:1, disp(countdown); end
31
ισοδ.
µτβ = ΑΤ ;
while µτβ <= ΤΤ ,
εντολές ;
µτβ = µτβ + Β ;
end
32
Αγνωστο πλήθος επαναλήψεων
Σε πόσα χρόνια ϑα διπλασιαστει αποταµιευµένο κεφάλαιο 1000 €, που
τοκίζεται µε 5% το χρόνο?
my_money = 1000;
n = 0;
while my_money < 2000,
my_money = my_money 1.05;
n = n + 1;
end
disp( ’Χρόνια για διπλασιασµό χρηµάτων : ’);
disp(n );
33
Χρήσιµες ‘εντολές’
... για οποιεσδήποτε εκfράsεiς Α και Β
34
Λιγότερα κέρµατα
Ελάχιστος αριθµός κερµάτων για δεδοµένο χρηµατικό ποσόν < €1
35
Μετατροπή cm σε ft και in
% 1ιν = 2.54 ςµ, 1φτ = 12 ιν
cm = input(’∆ώσε µήκος σε cm? ’);
total_inches = cm/2.54;
feet = fix ( total_inches /12);
inches = total_inches feet 12; % ή ινςηεσ = ρεµ(τοταλ_ινςηεσ , 12)
disp( ’ ft : ’ ); disp(feet );
disp( ’ in : ’ ); disp(inches );
36
Αλγοριθµικές τεχνικές
37
Αθροισµα 10 Αριθµών
1ος Τρόπος (µη αλγοριθµικός)
s = n1 + n2 + n3 + n4 + · · · + n10
n1 = input( ’n1? ’ ); s = 0;
n2 = input( ’n2? ’ ); n1 = input( ’n1? ’ );
n3 = input( ’n3? ’ ); s = s + n1;
... n2 = input( ’n2? ’ );
n10 = input( ’n10? ’ ); ⇐⇒ s = s + n2;
s = n1+n2+n3+n4+n5+n6+n7+n8+n9+n10; ...
disp(s ); n10 = input( ’n10? ’ );
s = s + n10;
Τι γίνεται µε πρόσθεση 100 αριθµών?
disp(s );
Χρειάζονται στην πράξη και οι 10 µεταβλητές n1, n2, ..., n10??
38
Αθροισµα 10 Αριθµών
2ος Τρόπος (αλγοριθµικός)
Χρειάζονται 2 µόνο µεταβλητες : µία για τον εκάστοτε προσθετέο (value) και µία
για το αθροισµα ( total).
• Ο αθροιστής total αρχικά παίρνει
την τιµή 0. total = 0;
• Για κάθε προσθετέο εκτελούνται τα for i =1:10,
ϐήµατα : value = input( ’Επόµενος όρος ? ’);
1. Ανάγνωση µιας ακέραιας τιµής total = total + value;
και αποθήκευση στην value end
άθροισµα total
39
40
Επεξεργασία αγνώστου πλήθους δεδοµένων - II
ΑΝΤΙΜΕΤΩΠΙΣΗ: ανάγνωση και επεξεργασία δεδοµένων µεχρι να εισαχθεί
κάποια ειδικό δεδοµένο (π.χ. 0 ή -1), που δεν είναι επεξεργάσιµο, απλώς
σηµατοδοτεί το τέλος των δεδοµένων.
41
42
Αθροισµα ψηφίων ακεραίου
Για τον ακέραιο n:
• Εύρεση τελευταίου ψηφίου : n = input( ’∆ώσε ϑετικό ακέραιο ? ’);
43
Ατέρµονες επαναλήψεις
Υπάρχει περίπτωση µια επαναληπτική εντολή να µην τερµατίζει.
Παράδειγµα :
while n >= 0,
dsum = dsum + rem(n, 10);
n = fix (n/10);
end
44
Πρώτοι Αριθµοί
Βασικό πρόβληµα στη Θεωρία Αριθµών είναι ο έλεγχος άν κάποιος
ακέραιος είναι πρώτος.
45
46
Πρόγραµµα για τον αλγόριθµο Π1
% Ελέγχει αν ένας ακέραιος είναι πρώτος αριθµός
%n − αριθµός για έλεγχο
% num_div − πλήθος διαιρετών
n = input( ’∆ώσε ακέραιο αριθµό ? ’);
num_div = 0;
for i = 1: n,
if rem(n,i ) == 0, num_div = num_div + 1; end
end
if num_div == 2,
disp( ’Ο αριθµός είναι πρώτος ’);
else ,
disp( ’Ο αριθµός είναι σύνθετος ’);
end
47
48
Πρόγραµµα για τον αλγόριθµο Π2
% Ελέγχει αν ένας ακέραιος είναι πρώτος αριθµός
%n − αριθµός για έλεγχο
% divisor − πιθανοί διαιρέτες
% is_prime − ‘λογική’ µεταβλητή
% = 1, ο αριθµός είναι πρώτος
% = 0, ο αριθµός δεν είναι πρώτος
%
n = input( ’∆ώσε ακέραιο αριθµό ? ’);
% έστω ότι ο αριθµός είναι πρώτος
is_prime = 1;
%
if rem(n,2)==0,
is_prime = 0;
else
49
divisor = 3;
while divisor <=sqrt(n) & is_prime ,
if rem(n, divisor ) == 0,
is_prime = 0;
else
divisor = divisor + 2;
end
end
end
if is_prime ,
disp( ’Ο αριθµός είναι πρώτος ’);
else ,
disp( ’Ο αριθµός είναι σύνθετος ’);
end
50
Προβλήµατα µε τον αλγόριθµο Π2
• Λάθος για n = 1 (όχι πρώτος) και n = 2 (ο µόνος πρώτος άρτιος)
• Ο Π2 µπορεί να είναι αργότερος από τον Π1 γιατί υπολογίζει την
sqrt (n) σε ΚΑΘΕ επανάληψη :
while divisor <=sqrt(n) & is_prime ,
Αντιµετώπιση :
limit = sqrt (n );
while divisor <= limit & is_prime ,
51
52
Επιλογή αλγορίθµου
Μεταξύ των συντακτικά ορθών Π1 και Π3:
53
Πίνακες
51
∆οµές δεδοµένων
Σε πολλά (κυρίως µαθηµατικά) προβλήµατα (π.χ. ανάλυση
πειραµάτων, στατιστική επεξεργασία, γραφικές παραστάσεις, επίλυση
γραµµικών συστηµάτων, κ.α.):
∆οµές δεδοµένων.
52
Μονοδιάστατοι πίνακες (array)
Η απλούστερη δοµή (συλλογή) δεδοµένων είναι ο 1-διάστατος
πίνακας (array) που είναι :
∆ιατεταγµένη Η σειρά των στοιχείων είναι shmantiκή.
Οµογενής Ολα τα δεδοµένα είναι του iδίου τύπου.
53
Παράδειγµα
Για να διαχειριστούµε τις ηµερήσιες ϑερµοκρασίες µιας εβδοµάδας
ΚΥ ∆Ε ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ
16 18 14 12 19 21 15
Χρησιµοποιείται ο 1-διάστατος πίνακας T
16 18 14 12 19 21 15
όπου η ϑερµοκρασία της Κυριακής είναι η T (1), της ∆ευτέρας η T (2), ...
Τα στοιχεία του πίνακα αποθηκεύονται σε ...
... δiaδοχiκές κai sυnεχόmεnες ϑέσεις µνήµης.
54
Είσοδος/έξοδος µονοδιάστατων πινάκων
Ενα-ενα τα στοιχεία Ολόκληρος ο πίνακας
for i =1:7
t ( i )=input( ’∆ώσε στοιχείο ’); t = input( ’∆ώσε τον πίνακα t ’);
end
Ο χρήστης περιµένει το µήνυµα
και εισάγει ολόκληρο τον
Ο χρήστης περιµένει το µήνυµα πίνακα :
και εισάγει ένα-ένα τα στοιχεία
[16 18, 14, 12 19 21 15]
του t
Τα στοιχεία του πίνακα διαχωρί-
Ϲονται µε κενά ή κόµµα.
Εξοδος του στοιχείου t ( i ): Εξοδος ολόκληρου του πίνακα :
disp( t ( i )) disp( t )
55
56
Μέγιστο και ελάχιστο στοιχείο πίνακα 100 στοιχείων
for i =1:100,
list ( i ) = input( ’∆ώσε στοιχείο της λίστας ’);
end
small = list (1); % το ελάχιστο στοιχείο της λίστας
large = list (1); % το µέγιστο στοιχείο της λίστας
for i =2:100,
if list ( i ) < small ,
small = list ( i );
else,
if list ( i ) > large ,
large = list ( i );
end
end
end
57
∆ισδιάστατοι πίνακες
Μαθήµατα Πληροφορικής
ΑΜ Φοιτητή Πληροφορική I Πληροφορική II Γλώσσες Προγ/σµού
201000 5 9 2
222222 10 8 0
250001 7 2 5
... ... ... ...
230712 6 6 6
πληροφορικής, τότε τα παραπάνω δεδοµένα παριστάνονται σαν ένας
πίνακας n (n γραµµών και 3 στηλών).
Κάθε γραµµή του πίνακα έχει τον ίδιο αριθµό στηλών : ο ϕοιτητής 222222
ή έχει πάρει 0 στο µάθηµα ‘Γλώσσες Προγ/σµού’ δεν έχει εξεταστεί σε αυτό.
58
Αναθέσεις τιµών σε µεταβλητές πινάκων
Μονοδιάστατοι πίνακες
x = [1 2 3];
y = [5, 5, 6, 7, 8, 9];
∆ισδιάστατοι πίνακες
A = [1 2 3
4 5 6];
B = [1 2 3; 4, 5 6];
x (1) = 8.5;
A (2,1) = 11
59
60
Επεξεργασία µε δισδιάστατους πίνακες
∆ίνονται οι ϐαθµολογίες 100 ϕοιτητώς που εξετάστηκαν σε 6 µαθήµατα
πληροφορικής. Να ϐρεθει :
61
62
% Αριθµός επιτυχόντων σε κάθε µάθηµα
for j =1:6,
numpass(j ) = 0;
for i =1:100,
if M(i, j ) >= 5,
numpass(j) = numpass(j ) + 1;
end
end
end
student_friendly = 1;
for i =2:6,
if numpass(i) > numpass(student_friendly),
student_friendly = i ;
end
end
disp( student_friendly );
63
Η εντολή size
Χρησιµοποιείται για την εύρεση του αριθµού των στηλών ή των
γραµµών ενός πίνακα.
64
Μέγιστο και ελάχιστο στοιχείο µονοδιάστατου πίνακα
Ο αλγόριθµος στη γενικότερη µορφή του :
65
Αρχικοποίηση πινάκων
for i =1:100,
x( i ) = i ;
% εντολές που δεσµεύουν µνήµη
end
x
{
66
Αρχικοποίηση πινάκων (συνεχ.)
x = zeros (1,100); % δηµιουργεί µηδενικό διάνυσµα 100 ϑέσεων
for i =1:100,
x( i ) = i ;
% εντολές που δεσµεύουν µνήµη
end
x
1 2 3 0 ..... 0 0 0
i=3; x(i)=i;
67
80
40
plot (x, y) 20
ενώνει γραφικά, µε ευθύγραµµα 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
80
x , y , ..., το σηµείο x , y
60
n n 40
µε το x , y n n
20
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
68
Γραφική παράσταση πολυωνύµου
Εστω η : y x
x x , x , .
20
15
10
−5
−2 −1 0 1 2 3 4
... χρειάζεται ο υπολογισµός τιµών xi , yi σε διακριτά σηµεία.
69
70
Υπολογισµός τιµών πολυωνύµου II
Για δεδοµένο h και x
, x
x h, x
x h, . . .
h = input( ’ϐήµα αύξησης του x ? ’);
xleft = 2;
xright = 4;
n = fix (( xright xleft )/h ) + 1; % αριθµός σηµείων
x = zeros (1, n ); % αρχικοποίηση x
y = x; % αρχικοποίηση y
i = 1;
for t= xleft : h: xright , % δεν υπολογίζεται πάντα το xright
x( i ) = t ;
y( i ) = t^3
2 t^2
5 t + 6;
i = i + 1;
end
plot (x , y );
71
y( i ) = t^3
2 t^2
5 t + 6;
y( i ) = (( t 2) t
5) t + 6;
72
Υπολογισµός ϱητών συναρτήσεων
Για h .
, υπολογισµός : y
x
x x
/ x x
, στο ,
h = 0.25; xleft = 4; xright = 3;
n = fix (( xright xleft)/h ) + 1; % αριθµός σηµείων
x = zeros (1, n ); y = x ; i = 1;
for t= xleft :h: xright ,
x( i ) = t ;
denom = t^2 t 2; % υπολογισµός παρανοµαστή
if denom == 0,
disp(’η συνάρτηση δεν ορίζεται στο : ’); disp( t );
else ,
y( i ) = ( t^3 2 t^2 5 t + 6) / denom;
disp(x( i )); disp(y( i ));
end
i = i + 1;
end
73
Συναρτήσεις
74
Ροή ελέγχου
Είναι η σειρά µε την οποία εκτελούνται οι εντολές. Μέχρι τώρα,
«σειριακή», «επαναληπτική» και εκτέλεση «υπό συνθήκη».
75
Μια άλλη µορφή ϱοής ελέγχου
76
77
Συναρτήσεις
Σύνολο συγκεντρωµένων εντολών µε χαρακτηριστικό όνοµα. Αυτοτελής
κώδικας για συγκεκριµένη υπολογιστική εργασία, που «αποκρύπτει»
προγραµµατιστικές λεπτοµέρειες.
Γιατί συναρτήσεις?
Λογική σχεδίαση προγραµµάτος.
«Μαύρα κουτιά».
Επαναχρησιµοποίηση κώδικα σε άλλα προγράµµατα.
Αποφυγή επανάληψης κώδικα στο ίδιο πρόγραµµα.
Είδη συναρτήσεων :
78
79
Προγραµµατισµός συναρτήσεων
Ορισµός συνάρτησης
Κλήση συνάρτησης
80
Υπολογισµός N N
function p = Factorial (n)
%FACTORIAL(N) Υpολοgίzει το Ν !
p = 1;
for i =1:n , p = p i ; end
return
function c = Combinations(n, k)
%COMBINATIONS(N,K) Συνδυασµοί Ν αντιkειµένων ανά Κ
c = Factorial (n ) / ( Factorial (k ) Factorial (n k));
return
81
Εµβαδόν κύκλου και δακτυλίου
function E = circle_area( r )
E = pi r r ;
return
82
Τοπικές µεταβλητές
Μια συνάρτηση µπορεί να ορίσει δικές της tοπiκές mεtabλhtές.
Οι τοπικές µεταβλητές έχουν νόηµα ΜΟΝΟ µέσα στη συνάρτηση
– ∆hmiουργούntai όταν καλείται η συνάρτηση.
– Πaύουn na υπάρχουn όταν η συνάρτηση επιστρέψει.
Οι παράµετροι µιας συνάρτησης είναι επίσης τοπικές.
Οι παράµετροι aρχiκοποiούntai antiγράfοntaς την τιµή του
ορίσµατος.
83
Ενα πρόγραµµα µε συναρτήσεις
r1 = input( ’Εσωτερική ακτίνα δακτυλίου ’);
r2 = input( ’Εξωτερική ακτίνα δακτυλίου ’);
disp(ring_area( r1 , r2 ));
84
FUNCTION
1
FUNCTION FUNCTION
2 3
85
Ροή ελέγχου συνάρτησης
Οταν καλείται µια συνάρτηση :
1. ∆εσµεύεται χώρος στη µνήµη για τις παραµέτρους
και τις τοπικές µεταβλητές της συνάρτησης.
2. Οι τιµές των ορισµάτων αντιγράφονται στις αντίστοι-
χες µεταβλητές των παραµέτρων.
3. Ο έλεγχος µεταφέρεται στο σώµα της συνάρτησης.
4. Εκτελούνται οι εντολές της συνάρτησης
5. Ο έλεγχος και τα δεδοµένα εξόδου επιστρέφονται
στην καλούσα συνάρτηση.
6. Αποδεσµεύεται ο χώρος στη µνήµη για τις παραµέ-
τρους και τις τοπικές µεταβλητές της συνάρτησης.
86
87
Ζεύγη πρώτων αριθµών
Πρόβληµα Να ϐρεθούν όλα τα Ϲεύγη πρώτων αριθµών p και q στο
διάστηµα , για τα οποία q p
.
for p = 3:2:99,
if isPrime (p),
if isPrime (2 p+1),
disp(p ); disp(2 p+1);
end
end
end
88
∆ιάταξη 3 αριθµών
Πρόβληµα
89
∆ιάταξη 3 αριθµών
function [ x , y ] = sort2 (x , y)
temp
%∆ιάταxη 2 αριθµών 3. x = temp 1. temp = y
if y<x,
temp = y;
x y
y = x;
x = temp;
end
2. y = x
return
function [ a , b , c ] = sort3 (a , b , c)
%∆ιάταxη 3 αριθµών
[a , b ] = sort2 (a , b);
[b , c ] = sort2 (b , c);
[a , b ] = sort2 (a , b);
return
90
Μαθηµατικές εφαρµογές
91
function g = MKD(x, y)
g = x;
92
Παρατηρήσεις στον αλγόριθµο ∆1
Νόµοι De Morgan
Το while εκτελείται όσο η συνθήκη : Γιa τιc λογικέc προτά-
93
94
Αριθµητικοί Αλγόριθµοι
Παράδειγµα για τον υπολογισµό µαθηµατικών συναρτήσεων όπως η
sqrt για την τετραγωνική ϱίζα.
∆ιαδοχικές προσεγγίσεις.
Ανάπτυγµα σειράς.
95
∆ιαδοχικές προσεγγίσεις
1. Εστω οτι η αυθαίρετη τιµή x είναι η απάντηση.
96
Ελεγχος ’ισότητας’ δυο πραγµατικών αριθµών
Πρόβληµα ακρίβειας στις συγκρίσεις πραγµατικών.
x ψ
x , ψ
<"
97
Βοηθητικές συναρτήσεις
function bool = approxEqual(x, y)
epsilon = 0.000001;
num = abs(x y);
den = minF(abs(x), abs(y ));
if ( num+den == num),
bool = ( x==y);
else,
bool = ( num/den < epsilon);
end
return
function y = minF(x , y)
if x<y , y = x ; end
return
98
Η µέθοδος Newton για τετραγωνική ϱίζα
x
a ισοδ. µε εύρεση της ϑετικής ϱίζας της συνάρτησης f x x a.
f(x0)
f x
f x f x
f x
x x
x x
xi
f(x) = x*x - a
a
xi
sqrt(a) x2 x1 x0
xi
xi
(0,-a)
99
100
Ανάπτυγµα σειράς
Το παράδοξο του Ζήνωνα :
s
...
ή
s s
Αρα η σειρά συγκλίνει στο s .
i
Γενικός όρος της σειράς : ti / (δυναµοσειρά)
Οι δυναµοσειρές σηµαντικές για τα υπολογιστικά µαθηµατικά.
101
Υπολογισµός της s i
ti i
i
ti
sum = 0;
term = 0.5;
while 1,
sum = sum + term;
term = term/2;
end
Αλλά από κάποιο σηµείο και µετά το άθροισµα για τον υπολογιστή
παραµένει σταθερό (ακρίβεια αναπαράστασης δεκαδικών ψηφίων).
Τερµατισµός των επαναλήψεων µε τον έλεγχο :
sum == sum + term
102
Το πρόγραµµα για τη σειρά του Ζήνωνα
sum = 0;
term = 0.5;
while sum ˜= sum + term,
sum = sum + term;
term = term/2;
end
disp ("Αθροισµα της σειράς του Ζήνωνα ");
disp(sum);
103
n
Γιa τηn τeτρaγωnική ϱίζa : f x x /
κaι :
f x f
x f
x ...
/
x / x x /
...
Ο τύποc Taylor υπολογίζeι πaρaγώγουc sτο θ. Γιa eυκολίa έsτω θ , τότe
f f f
f ...
...
οπότe :
x (& % '
x #
x
x ! " $
ti
104
Προγραµµατισµός της µεθόδου Taylor για x
Οι διαδοχικοί όροι της σειράς είναι :
t
t t
t ...
x x
x
...
η γενικά της µορφής :
coeff
( xpower / factorial )
Η σχέσεις που δίνουν τα νέα coeff, xpower, factorial για τον όρο i
από τις αντίστοιχες προηγούµενες τιµές για τον όρο i ειναι :
coeff = coeff
(0.5 i );
xpower = xpower
(x 1);
factorial = factorial
( i + 1);
105
106
Ορια σύγκλισης σειράς Taylor
Προβληµα
Για ,η x από τον τύπο του Taylor στην περιοχή του συγκλίνει
ΜΟΝΟ για :
<x<
Λυση
Παρατηρηση
x x
δηλ. µετά από διαδοχικές διαιρέσεις του x µε το 4, υπολογίζεται η x
στο διάστηµα , και ακολουθεί διόρθωση του αποτελέσµατος µε
αντίστοιχο αριθµό πολλαπλασιασµών
.
107
108
Εύρεση ϱιζών συνάρτησης : γραφική µέθοδος
20
f(x)
15
5
2. εκτίµηση «καλύτερου» , .
0
-10
4. επανάληψη 2 και 3 µέχρι ...
-15
-20
-2 -1 0 1 2 3 4 5
0.5 0.15
f(x) f(x)
0
0.1
-0.5
-1 0.05
-1.5
0
-2
-2.5 -0.05
-3
-0.1
-3.5
-4 -0.15
-2.1 -2.08 -2.06 -2.04 -2.02 -2 -1.98 -1.96 -1.962-1.961 -1.96 -1.959-1.958-1.957-1.956-1.955-1.954-1.953
109
f(b) > 0
ρ
a b
xl xr x
f(a} < 0
110
Αναζήτηση υποδιαστηµάτων µε ϱίζες
xfirst = input( ’Αριστερό άκρο αρχικού διαστήµατος ’);
xlast = input( ’∆εξί άκρο αρχικού διαστήµατος ’);
nsteps = input( ’Αριθµός υποδιαστηµάτων ’);
% Ελεγξε αν το αρχικό διάστηµα περιέχει κάποια ϱίζα
if f ( xfirst ) f ( xlast ) > 0,
disp( ’∆εν υπάρχει αλλαγή προσήµου στο διάστηµα ’);
else,
xstep = ( xlast xfirst )/nsteps;
xl = xfirst ; xr = xl + xstep;
while f ( xl ) f ( xr ) > 0
xl = xr ; xr = xr + step;
end
disp( ’Υπάρχει ϱίζα µεταξύ των ’); disp( xl ); disp( xr );
end
111
xl = xr ; xr = xr + step;
end
xfirst = xl ; xlast = xr ;
end
disp(’Υπάρχει ϱίζα µεταξύ των ’); disp( xl ); disp( xr );
end
112
Η µέθοδος της διχοτόµησης
y 1ο διαστηµα
x
l
x x x
m r
y 2ο διαστηµα
x x
l m
x x
r
y 3ο διαστηµα
x
l
x x x
m r
113
Αλγόριθµος διχοτόµησης
% xλ , xρ άκρα διαστηµάτων
% φλ , φρ οι τιµές της συνάρτησης στα άκρα
% xµ µέσον διαστηµάτων
% φµ η τιµή της συνάρτησης στο µέσον κάθε διαστήµατος
%
% αρχικό διάστηµα
xl = input( ’Αριστερό άκρο ? ’);
xr = input( ’∆εξί άκρο ? ’);
% υπολογισµός φ (x ) στα άκρα του διαστήµατος
fl = f ( xl );
fr = f ( xr );
if fl fr > 0,
disp( ’∆εν υπάρχει αλλαγή προσήµου στο διάστηµα ’);
else , % αλλαγή προσήµου, υπάρχει ϱίζα
114
xm = ( xl + xr )/2;
while ˜approxEqual(xl, xm),
fm = f (xm);
if fl fm <= 0, % επιλογή αριστερού υποδιαστήµατος
xr = xm;
else , % επιλογή δεξιού υποδιαστήµατος
xl = xm;
fl = fm;
end
xm = ( xl + xr )/2;
end
disp( ’Η ϱίζα είναι : ’);
disp(xm);
disp( ’Η τιµή της συνάρτησης στη ϱίζα είναι : ’);
disp( f (xm));
end
115
Παρατηρήσεις
Η µ. της διχοτόµησης ανεξάρτητη της f (εφαρµόζεται σε οποιαδήποτε
συνάρτηση).
Π.χ. για να ϐρούµε τις ϱίζες της f x x x x
αρκεί να
γράψουµε την παρακάτω συνάρτηση f του Matlab
function y = f (x)
y = x^3 4 x^2 4 x + 12;
116
Ο µηχανισµός feval
Ιδανικά, ϑα ϑέλαµε η µ. της διχοτόµησης να γραφεί σαν συνάρτηση και
να ϐρίσκει τις ϱίζες µιας οποιασδήποτε συνάρτησης ανεξάρτητα από το
όνοµά της.
a = feval( ’matlab_fun’, z );
a = matlab_fun(z);
Π.χ. τόσο η sin (pi/4) όσο και η feval( ’ sin ’ , pi/4) υπολογίζουν το
π/ .
117
118
else , % επιλογή δεξιού υποδιαστήµατος
xl = xm; fl = fm;
end
xm = ( xl + xr )/2;
end
root = xm;
end
119
x ^
x
l
xm xr x
µ. της χορδής
y f(x) y f(x)
x4 x3 x2 x x x4 x3 x2 x x
1 1
120
Αριθµητική ολοκλήρωση
Σηµαντικό υποπρόβληµα σε πολλές εφαρµογές σε διάφορα
επιστηµονικά πεδία :
b
S f x dx
n
Sn
y
a
Εξ΄ ορισµού είναι το άθροισµα των
f(x)
εµβαδών απείρων ορθογωνίων µηδε-
νικού πλάτους.
n
f xi
xi
Sn xi a
b x
121
%#
%# %%#
&# %& &#
&# %& &%%&
)) *#
*#
*# )) *#
*#
)) *#
)) *#
)) *#
)) **)) %%#
# %&& %#
&# %& %#
&# %& &%%&
&#
"$#
$# "$# "$# )*#
*#
)*#
)) $""$" *#
*#
)) *#
*#
)) *#
)) *)*)
*# #%#
%%# %& %#
&# %& %#
&# %& &%%&
&#
" $# ""$#
$#
""$# *# *# )) **))
*# %%# %#
%%#
&# %#
% #
& %#
%& &%%&
&#
$"#
$$""#
#
$#
"" $#
#
$ "" *#
#
$
)) $$"" *#
*#
#
* ) $"" *#
*# $
)) *#
*#
#
* ) *#
*#
)) *#
*#
#
* ) *#
*#
)) **))
*#
) **))
#
#%#
%%# &&#
%& %# #
% %& %#
&&# %& &%%&
&#
%#
Προσέγγιση µε ικανό αριθµό ορθογωνί- "" $#
$#
$# " $#
$#
" " *#
$#
" ) $ ) ) )) *# )*# %%#
# %%#
&# % #
& #
% %& &%%&
&# '#
'#(# '(# '(#
(# '(#
(# ('('
$$""#
# "" $#
$#
#
$ "" *#
#
$
)) $"" *#
#
* ) "$" *#
*# $
)) *#
#
* ) *#
*# #
* ) *#
*#
)) **))
*#
) **)) #%#
%%# &&#
%& %# %& %#
&&# %& &%%&
&#
%# '# ''(#
(#
'' (# ''(#
'' (# ''(#
'' ('((''
$""#$#
$# " $#
$#
" " *#
$#
" ) $ ) ) )) *# )*# %%#
# %%#
&# % #
& #
% %& &%%&
&# ''#
#
'#(# ' (# ' (#
$$""#
# "" $#
$#
#
$ "" *#
#
$
)) $"" *#
#
* $
)) *#
#
* #
* ) *#
)) **))
*# #%#
%%# &&#
%& %# %& %#
&&# %& &%%&
&#
%# '# (#
' #
( (#
' #
( ' ('('
(#
' #
(
ων, ή καλύτερα από ϑ. µέσης τιµής ολο- $""#$#
$# " $#
$#
" " *#
$#
" "" *#
) "$" *#
*#
) )) $"" *# $
) *#
*#
) )) *#
*#
) )) *#
) **))
)*#
)) **))
*# %%#
# %%#
&#
&&# % #
& #
% %& %#
&&# %& &%%&
&# ''#
#
'#(#
'' (#
(#
' (#
'' (#
' (#
'' ((''
' ('('
f(x)
$$""#
# "" $#
$#
#
$ #
$ #
* ) "$" *#
*# $ #
* ) *#
*# #
* ) *#
*# ) **)) #%#
%%# %& %# %& &%%&
&#
%# '# '(#
(#
'' (# '(#
'' (# '(#
$""#$#
$# " $#
$#
" " *#
$#
" ) $ ) ) )) *# )*# %%#
# %%#
&# % #
& #
% %& &%%&
&# ''#
#
'#(#
(#
' (#
(#
' (#
'' ((''
(#
κληρωτικού λογισµού : $$""#
# "" $#
$#
#
$ "" *#
#
$
)) $"" *#
#
* ) "$" *#
*# $
)) *#
#
* ) *#
*# #
* ) *#
*#
)) **))
*#
) **)) #%#
%%# &&#
%& %# %& %#
&&# %& &%%&
&#
%# '# (#
' #
( (#
' #
( '' (#
' ('('
'(#
$""#$#
$# " $#
$#
" " *#
$#
" ) $ ) ) )) *# )*# %%#
# %%#
&# % #
& #
% %& &%%&
&# ''#
# '' (#
(#
#
( #
( ' (#
'' ((''
(#
$$""#
# "" $#
$#
#
$ "" *#
#
$
)) $"" *#
#
* ) "$" *#
*# $
)) *#
#
* ) *#
*# #
* ) *#
*#
)) **))
*#
) **)) #%#
%%# &&#
%& %# %& %#
&&# %& &%%&
&#
%#
'#(#
'# ' (#
(#
' (#
' '' (#
' ('('
'(#
$""#$#
$# " $#
$#
" " *#
$#
" ) $ ) ) )) *# )*# %%#
# %%#
&# % #
& #
% %& &%%&
&# ''#
# '' (#
(#
#
( #
( ' (#
'' ((''
(#
$$""#
# "" $#
$#
#
$ "" *#
#
$
)) $"" *#
#
* ) "$" *# $
)) *#
#
* ) *# #
* ) *#
)) **))
*#
) **)) #%#
%%# &&#
%& %# %& %#
&&# %& &%%&
&#
%#
'#(#
'# ' (#
(#
' (#
' '' (#
' ('('
'(#
$""#$#
$# " $#
"$# " *#
"$# )*#
$*#
) *#
*#
) ) *#
*#
) ) *# )*#
) *)
*# %%#
#&# %%#
& & &# % #
& #
% %%#
& &%%&
''#
#
'#(#
'' (#
(#
#
( ' (# #
( ' (#
'' ((''
(#
' ('
(#
x S b
a f x S a=x1 x2 x3 xi x i+1 x n xn+1 = b x
x’i
Και επειδή το x δεν είναι γνωστό ϑεω- x’1 x’2 x’n
y
ϱούµε
+,
,
++, , +,
++ , +,
++ , +,
++ , +,
++ , +,
++ , +,
++ , +,
++ , +,
++ , +,
++ ,+,,++
n
n -
-- - .. - - .. - - .. --.. +, ,
+ ,
, + ,
, + ,
, + ,
, + ,
, + ,
, + ,
, + ,
, + ,+
,
-
-
- .
- .
- . - .
f x ωi f xi , µε ωi --
- -
-
.. -
.. -
-
-
.. -
.. -
-
-
.. --..
.. -.. -
- - f(x)
-
-- - .. - .. - .. --..
i i - - . - - . - - . -.
για διάφορα xi ! a, b .
a x’ b x
122
Ο κανόνας του ορθογωνίου (συνεχ.)
Στην απλούστερη µορφή :
xi a i b a /n, i
y
και οι αντίστοιχοι τύποι του ορθογωνίου :
b a
n
f(x)
R
f xi ,
n
i
b a n
R f xi
n
a=x
x x =b x
0 1 2
123
R R b a
n
b a n
Τ f xi f xi
n n
i i
b a
n
f x f xi f xn
n
f a i
i
h
n
b a
f a h f b , µέ h
n
i
y
f(x)
a (a+b)/2 b x
124
Συνάρτηση για ολοκλήρωση µε κανόνα του τραπεζίου
function area = trapezoid( f , a , b , n)
% α, b όρια ολοκλήρωσης
%ν αριθµός υποδιαστηµάτων
h = ( b a)/n;
sum = 0;
for i =1:n 1
x = a + i h;
sum = sum + feval(f , x );
end
fa = feval( f , a ); fb = feval( f , b);
area = h ((fa+fb )/2 + sum);
return
125
y
n Tn σφάλµα e Tn Tn/
f(x)
2 5.195313 0.804687
4 5.785767 0.214233 0.599454
8 5.945597 0.054403 0.159828
a (a+b)/2 b x
16 5.986347 0.013653 0.040750
Για µικρά διαστήµατα
32 5.996584 0.003416 0.010237
και οµαλές συναρτήσεις,
Για διπλάσιο n το σφάλµα διαιρείται µε το
µια εκτίµηση (άνω ϕράγ-
4, άρα : e
c/n
µα) του σφάλµατος ολο-
Μιά ακριβέστερη εκτίµηση του σφάλµατος
κλήρωσης δίνεται από
ολοκλήρωσης δίνεται από Tn Tn/ /
T
n Tn .
126
Αποτελεσµατικότητα αλγορίθµων
127
Αποτελεσµατικότητα αλγορίθµων
Ενας sωstός αλγόριθµος δεν είναι κατ΄ ανάγκη και aποtελεsmatiκός.
128
Μέτρηση της αποτελεσµατικότητας
Η αποτελεσµατικότητα εκφράζεται από τον ϱυθµό αύξησης των
απαιτήσεων του αλγορίθµου σε χrόnο (πράξεις) και χώrο (µνήµη) σαν
συνάρτηση του µεγέθους του προβλήµατος.
129
Πολυπλοκότητα αλγορίθµου O
t 1
Γραµµικός αλγόριθµος O n
t a b n 2
t a b n c n
130
Παρατηρήσεις
Ο ταχύτερος αλγόριθµος συχνά
t
A2
εξαρτάται από το µέγεθος του προ- A1
A3
ϐλήµατος.
Αλλοι παράγοντες, π.χ. η είσοδος
δεδοµένων, µπορεί να επιβαρύνουν
ένα αλγόριθµο καθώς αυξάνεται το
a b n
µέγεθος του.
Η αποτελεσµατικότητα ενός αλγορίθµου σε χρόνο/χώρο εξετάζεται σε 2
επίπεδα :
131
Παρατηρήσεις (συνεχ.)
Συχνά οι ϐελτιώσεις σε χρόνο και χώρο είναι αsυmβίβαstεc. Π.χ. για
τον έλεγχο ενός πρώτου αριθµού µπορούµε να ελέγξουµε σαν πιθανούς
διαιρέτες :
132
Ανάλυση παραγόντων
Αναζήτηση των παραγόντων (όχι
Για κάθε n (n
) εκτελούνται n
κατ΄ ανάγκη πρώτων) ακεραίου
επαναλήψεις.
n.
Αν P
P P P , Q Q Q εί-
% Αλγόριθµος A ναι ο χρόνος που απαιτείται για την
n = input( ’ ? ’ ); % Q1 εκτέλεση των εντός και εκτός του for
m = 2; % Q2 εντολών αντίστοιχα, τότε ο συνολι-
while m <= n 1, κός χρόνος είναι
if rem(n, m ) == 0, % P1
P
n
Q P n
Q
P
disp(m); % P2
end και επειδή, τα P, Q ανεξάρτητα του
m = m + 1; % P3 n συµπεραίνουµε ότι πρόκειται για
end grαmmικό αλγόριθµο O n .
133
ϱίπτωση) κατά P P που είναι ανε- m = m + 1; % P3
ξάρτητα του n. end
Στη χειρότερη περίπτωση :
P P P P
n Q Q
Q και εποµένως ο νέος
αλγόριθµος είναι O n ως προς το χρόνο.
134
Κανονικοποιηµένες µονάδες χρόνου
Το κόστος των αριθµητικών πράξεων ενός αλγορίθµου εκφράζεται
παίρνοντας σαν µονάδα µέτρησης το χρόνο που χρειάζεται ο
υπολογιστής για να κάνει µια πρόσθεση. Ενδεικτικές τιµές (εξαρτώνται
από την αρχιτεκτονική του επεξεργαστή):
135
end
p n p g
p n
p g
136
Παρατηρήσεις
Ο αλγόριθµος που προκύπτει από τον B αντικαθιστώντας τις γραµµές
από την
p g
«προσθέσεις» (πράξεις).
137
n
p n
Αλγόριθµος A Αλγόριθµος B
n
p p
n p n g g
p
4 g g
pp
p
10 g g
p
100 g g
pp
p
500 g g
1000 g g
138
«Πυθαγόρειες τριάδες»
Να ϐρεθούν όλοι οι ακέραιοι a, b, c για τους οποίους ισχύει
a b c
και
a b c p
139
140
Παρατηρήσεις στον αλγόριθµο 1
Εστω c ο µεγαλύτερος από τους 3 ακεραίους. Από τριγωνική
ανισότητα :
c a b
c a b c c p/
Ο αλγόριθµος 1 ϑα υπολογίσει π.χ. για τους αριθµούς
141
142
Παρατηρήσεις στον αλγόριθµο 2
Μια λεπτοµερής καταµέτρηση των πράξεων του αλγορίθµου 2, δίνει
p
p p
if hyp^2==side1^2+side2^2
143
144
Αναζήτηση και ταξινόµηση
148
Αναζήτηση (search)
Πρόβληµα : αναζήτηση της καταχώρησης key στη λίστα LIST
Μορφές αναζήτησης :
Πλήθος αναζητήσεων.
149
Γραµµική (linear) αναζήτηση
Τα στοιχεία της λίστας ελέγχονται το ένα µετά το άλλο στη σειρά.
150
151
∆υαδική binary αναζήτηση
Προυπόθεση η δiάtaxh της λίστας. Η σύγκριση του key µε το µεσαίο
στοιχείο της λίστας κατατάσσει την αναζητούµενη καταχώρηση σε ένα
από τα δύο (αριστερό, δεξιό) τµήµατα (υπολίστες) της LIST. Η διαδικασία
επαναλαµβάνεται για το νέο τµήµα, που περιέχει τα misά στοιχεία του
προηγούµενου.
Ο µέγιστος αριθµός συγκρίσεων για τη δυαδική αναζήτηση εκφράζει
ουσιαστικά πόsες ϕορές tο mέγεθος thς λίstaς n δiaiρείtai mε tο 2:
n
152
153
Ταξινόµηση (sort)
∆ιάταξη των στοιχείων µιας λίστας µε ϐάση κάποια σχέση µεγέθους
µεταξύ τους.
154
4. Η ϑέση του small στην OLD ‘αδειάζει (αντικαθίσταται από ένα πολύ
µεγάλο αριθµό).
155
Αλγόριθµος selection sort
Η ταξινόµηση µε επιλογή πραγµατοποιείται σε n ϐήµατα (περάσµατα)
µε n συγκρίσεις σε κάθε πέρασµα.
156
157
Ταξινόµηση µε εναλλαγή (exchange)
Κατηγορία αλγορίθµων ταξινόµησης : συγκρίσεις anά Ϲεύγh και
εναλλαγή των τιµών τους για mερiκή διάταξη. Η ολiκή διάταξη
επιτυγχάνεται µετά από µια σειρά κατάλληλων mερiκώn διατάξεων.
∆ιαφοροποιούνται στη συστηµατοποίηση του ελέγχου των Ϲευγών.
Ο αλγόριθµος της ϕυσαλίδας (bubble sort). Σε κάθε πέρασµα το
max στοιχείο που αποµένει στη λίστα ‘αναδύεται στη ϑέση n i
.
Π.χ. το πρώτο πέρασµα για τη λίστα : 7, 9, 8, 3, 4 είναι :
ϐήµα 1ο : 7 9 8 3 4
ϐήµα 2ο : 7 9 8 3 4
ϐήµα 3ο : 7 8 9 3 4
ϐήµα 4ο : 7 8 3 9 4
ϐήµα 5ο : 7 8 3 4 9
158
for z = 1: maxz
if LIST (z ) > LIST (z +1),
temp = LIST(z );
LIST (z ) = LIST (z +1);
LIST (z +1) = temp;
end
end
end
159
Πρόβληµα µε τον αλγόριθµο I
... είναι δυνατό να έχει επιτευχθεί διάταξη προtού ολοκληρωθούν όλα
τα περάσµατα. STOP µετά από το πρώτο πέρασµα στο οποίο ∆ΕΝ έγινε
καµµία εναλλαγή...
160
161
Ανάλυση του αλγορίθµου II
Σε κάθε πέρασµα απαιτείται µια σύγκριση λiγόtερh από το
προηγούµενο πέρασµα.
n n
n n
162
163
Ταξινόµηση µε εισαγωγή (insertion) (συνεχ.)
Παράδειγµα :
164
165
Ανάλυση αλγορίθµου εισαγωγής
Σε κάθε ϐήµα i απαιτούνται κατά µ.ο. i / συγκρίσεις κατά τη
γρammiκή anaζήthsh στη NEW. Εποµένως ο µ.ο. του αριθµού
συγκρίσεων για όλa τα ϐήµατα είναι :
n n
n /
n n
166
Αλγόριθµοι γραµµικής άλγεβρας
167
Εσωτερικό γινόµενο
Υπολογισµός x T ψ µε x, ψ
n
Ο αλγόριθµος είναι O n .
168
Πολλαπλασιασµός πίνακα µε διάνυσµα
Υπολογισµός ψ Ax µε A
m n
,x
n
,ψ
m
Ο αλγόριθµος είναι O m n .
169
έχουν xA και xB πελάτες αντίστοιχα, µετά από 1 µήνα οι πελάτες είναι :
tAA tAB xA
Tx
tBA tBB xB
170
Γινόµενο πινάκων
Υπολογισµός : C AB µε A
m n
,B
n k
,C
m k
171
T12 = Τ
T12 = matmat(T,T);
for p = 3:12
T12 = matmat(T12,T);
end
172
Προσοµοίωση
173
Προσοµοίωση
Κατάστρωση µοντέλων συστηµάτων και διεξαγωγή υπολογιστικών
πειραµάτων µε τα µοντέλα αυτά για :
174
Προσοµοίωση (συνεχ.)
Βασικό πρόβληµα προσοµοίωσης : πως οι µεταβλητές κατάστασεις
µεταβάλλονται µε το χρόνο.
175
176
Παράδειγµα επένδυσης
Μισθωτός µε ετήσιο εισόδηµα s και ετήσια αύξηση µισθού
επενδύει κάθε χρόνο το του προηγούµενου µισθού του µε
ετήσιο επιτόκιο ϸ . Ποιά η κατάσταση της επένδυσης σε 5, 10, 15,
..., 30 χρόνια?
Ο µισθός µε το χρόνο :
s t
s t s t
και η αποταµίευση p:
p t
p t ϸp t s t
177
Επένδυση (συνεχ.)
s = input( ’Αρχικός µισθός ?’);
p = input( ’Αρχική αποταµίευση ?’);
alpha = input( ’Ετήσια αύξηση ?’);
beta = input( ’Ποσοστό επένδυσης ?’);
epsilon = input( ’Ετήσιο επιτόκιο ?’);
for t = 0:30
p = p + epsilon p + beta s;
s = s + alpha s;
if rem(t,5)==0,
disp( t ); disp(s ); disp(p);
end
end
178
Παράδειγµα καταδίωξης
Πεζοπόρος (Π) κινείται προς ϕράχτη (Φ) σε απόσταση 400m και
καταδιώκεται από ταύρο (Τ) µε αρχική κατάσταση όπως στο σχήµα :
y
Τ(50,100)
Φ
Π
x
100 200 300
179
Καταδίωξη (συνεχ.)
Η ϑέση του Τ εξαρτάται από τη ϑέση του Π. Για µικρά δt ϑεωρούµε ότι
ο Τ κινείται σε ευθεία προς τον Π. Οι κινήσεις τους καθορίζονται από
τις συντεταγµένες τους. Σε κάθε χρονική στιγµή η µεταξύ τους
απόσταση είναι :
s t
xT t
x t
yT t
η κίνηση του Π:
x t
δt
x t
v δt
και η κίνηση του Τ:
x t xT t
xT t δt xT t δt vT
xT t δt vT
s t
yT t δt yT t δt vT
yT t δt vT
yT t
s t
180
Αλγόριθµος καταδίωξης
% Αρχικές ϑέσεις ταύρου, οδοιπόρου και ϕράχτη
xb = input( ’x ταύρου ?’); yb = input (’ y ταύρου ?’);
xh = input( ’x πεζοπόρου ?’); xf = input (’ x ϕράχτη ?’);
dt = input( ’dt?’ ); vb = input( ’v ταύρου ?’); vh = input (’ v πεζοπόρου ?’);
t = 0; s = sqrt ((xb xh)^2+yb^2);
while xh<xf & s>1
t = t + dt;
xb = xb + ( xh xb) vb dt/s; yb = yb yb vb dt/s;
xh = xh + vh dt;
181
90
80
70
60
y (bull)
50
40
30
20
10
0
0 50 100 150 200 250 300 350 400
x (bull)
182
Η απόσταση ταύρου - πεζοπόρου
Για ταχύτητες και αρχικές ϑέσεις όπως προηγουµένως :
Distance between bull and hiker
120
100
80
60
s
40
20
0
0 10 20 30 40 50 60
t (sec)
183
Παράδειγµα δυναµικής
Κίνηση αντικειµένων υπό την επίδραση εξωτερικών δράσεων.
Επιλέγεται σύστηµα συντεταγµένων, χαράσεται το δiάγρamma
ελευθέρου sώmatος που έχει µάζα m, ταχύτητα v, επιτάχυνση
και
πάνω του ασκείται συνολική δύναµη F . Για την περιγραφή του
µοντέλου χρησιµοποιούνται γia κάθε κatεύθυnsh x, y οι σχέσεις :
Fx m
x , Fy m
y
dvx
x dt, dvy
y dt
dx vx dt, dy vy dt.
184
∆υναµική (συνεχ.)
Αναπήδηση µπάλλας σε επίπεδο δάπεδο, µε αρχική ταχύτητα v στη
ϑέση x , y και επιτάχυνση ϐαρύτητας g . m/sec .
y
vy
v
x0 x
185
∆υναµική (συνεχ.)
Εξισώσεις κίνησης :
vx t
σταθ.
vy t
δt
vy t g δt
x t
δt
x t
vx t δt
vy t vy t δt
y t δt y t δt
if y t
δt ,
vy t
δt . vy t
δt
end
186
Αλγόριθµος αναπήδησης
x = input( ’αρχικό x ? ’);
y = input( ’αρχικό y ? ’);
v = input( ’αρχική ταχύτητα (µέτρο) ? ’);
theta = input( ’γωνία ϐολής ? ’);
dt = input( ’dt?’ );
nmax = input(’µέγιστος αριθµός αναπηδήσεων ? ’);
g= 9.8;
vx = v cos(theta);
vy_old = v sin(theta );
187
188
Γραφική παράσταση αναπήδησης
Για x y ,v m/sec, / , nmax και δt . :
3
2.5
1.5
y
0.5
0
0 5 10 15 20 25 30 35 40 45
x
189
∆υναµική πληθυσµών
Αλληλεπίδραση πληθυσµών µεταξύ τους και µε το περιβάλλον.
Εna είδος - staθερός ϱυθmός anάπtυxhς
Ο πληθυσµός P σε χρόνο t:
δt P t c P t
δt
P t
c δt
P t
και για isaπέχοnta χρνικά διαστήµατα :
P(0) c=0
c<0
190
Πληθυσµός µε περιορισµένα αποθέµατα τροφής
Το περιβάλλον µπορεί να υποστηρίξει µέχρι P άτοµα. Ο ϱυθµός
ανάπτυξης προσεγγίζεται από :
P P t
c c
P
που για P t , P t P δίνει αντίστοιχα c c και c .
p t δt
p t c p t p t δt
191
192
Γραφική παράσταση
Για c ,p . , δt .
,t limit :
1
0.9
0.8
0.7
0.6
p(t)
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10
t
193
Λαγοί R t : αναπαράγονται 4 λαγοί το µήνα από κάθε Ϲεύγος (c ).
R t δt R t δt R R R t R t (1)
Αλεπούδες F t : αυξάνουν κατά 4 το χρόνο ανά Ϲεύγος (για ένα µήνα
c /
.
) όtan R t R κai F t <<<. Ελαττώνονται
ανάλογα. ΄Οταν αντιστοιχούν 15 λαγοί ανά αλεπού, τότε οι
αλεπούδες δεν αυξάνονται πλέον (c ):
R t
F t
c
R
και για τον πληθυσµό των αλεπούδων :
R t δt
Rt
R
R t
δt
R
R t δt
R t
R
F t
f t F t /R οι λαγοί :
r t δt r t
δt r t r t
δt r t f t
και οι αλεπούδες :
f t δt f t . δt f t r t f t
195
Αλγόριθµος αρπακτικών-λείας
function [ r , f , t ] = foxrabbit (tmax, nsteps , r0 , f0)
% τµαx διάρκεια παρατήρησης (σε µήνες)
% νστεpσ ϐήµατα χρόνου ανά µήνα
% ρ0 , φ0 αρχικοί πληθυσµοί
t = zeros (1, tmax nsteps+1);
196
Γραφικές παραστάσεις
Για tmax = 60 µήνες και nsteps = 10:
1 0.7
0.9 rabbits
0.6
0.8
rabbits
0.5
0.7
0.6
0.4
population
population
0.5
0.3
0.4
0.3
0.2
0.2
0.1
foxes foxes
0.1
0 0
0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70
t (months) t (months)
197