ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος...

25
ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων: Γιώργος Γεωργίου Ενδιάμεση εξέταση Θεωρία 26 Μαρτίου 2007 ΟΝΟΜΑ: ………………………………………………………………………… ΑΤ: ………………………………. Πρόβλημα 1 Να συμπληρωθούν οι δύο εντολές της MATLAB που λείπουν: >> A=[1 1+i; -i 2]; >> Εντολή 1 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >> Εντολή 2 A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >> 2 μ. ------------------------------------------------------------------------------------------------------- Λύση >> A=[1 1+i; -i 2]; >> disp(A) 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >> A A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 Σημείωση: Αντί της >> A μπορούμε ισοδύναμα να χρησιμοποιήσουμε την >> display(A) A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 Στην πραγματικότητα, το m-file display.m καλεί την εντολή disp. Για περισσότερες πληροφορίες δοκιμάστε την help display. 1

Transcript of ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος...

Page 1: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων: Γιώργος Γεωργίου Ενδιάμεση εξέταση – Θεωρία

26 Μαρτίου 2007 ΟΝΟΜΑ: ………………………………………………………………………… ΑΤ: ………………………………. Πρόβλημα 1 Να συμπληρωθούν οι δύο εντολές της MATLAB που λείπουν:

>> A=[1 1+i; -i 2]; >> Εντολή 1 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >> Εντολή 2 A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >>

2 μ. ------------------------------------------------------------------------------------------------------- Λύση

>> A=[1 1+i; -i 2]; >> disp(A) 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000 >> A A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000

Σημείωση: Αντί της

>> A μπορούμε ισοδύναμα να χρησιμοποιήσουμε την

>> display(A) A = 1.0000 1.0000 + 1.0000i 0 - 1.0000i 2.0000

Στην πραγματικότητα, το m-file display.m καλεί την εντολή disp. Για περισσότερες πληροφορίες δοκιμάστε την help display.

1

Page 2: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 2 Να συμπληρωθούν οι τρεις εντολές της MATLAB που λείπουν:

>> Εντολή 1 Your variables are: A1 A2 A3 AB Bas u >> Εντολή 2 Name Size Bytes Class Attributes A1 1x1 8 double A2 1x1 8 double A3 1x1 8 double AB 3x3 72 double Bas 1x1 8 double u 1x4 32 double >> Εντολή 3 Your variables are: A1 A2 A3 AB

2 μ. ------------------------------------------------------------------------------------------------------- Λύση

>> who Your variables are: A1 A2 A3 AB Bas u >> whos Name Size Bytes Class Attributes A1 1x1 8 double A2 1x1 8 double A3 1x1 8 double AB 3x3 72 double Bas 1x1 8 double u 1x4 32 double >> who A* Your variables are: A1 A2 A3 AB

2

Page 3: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 3 Με δεδομένο ότι η τιμή του x δεν αλλάζει, συμπληρώστε τις τέσσερις εντολές ΜΑΤLAB που λείπουν:

>> x=exp(-2) x = 0.1353 >> Εντολή 1 >> x x = 0.135335283236613 >> Εντολή 2 >> x x = 1.353352832366127e-001 >> Εντολή 3 >> x x = 329/2431 >> Εντολή 4 >> x x = 0.14

2 μ. ------------------------------------------------------------------------------------------------------- Λύση

>> x=exp(-2) x = 0.1353 >> format long >> x x = 0.135335283236613 >> format long e >> x x = 1.353352832366127e-001 >> format rat >> x x = 329/2431 >> format bank >> x x = 0.14

3

Page 4: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 4 (α) Ορίστε στη MATLAB τα εξής:

1 1 1 11 2 1 1

4 3 0 01 2 3 4

A

⎡ ⎤⎢ ⎥−⎢ ⎥=⎢ ⎥⎢ ⎥⎣ ⎦

και

1113

b

⎡ ⎤⎢ ⎥⎢ ⎥=⎢ ⎥⎢ ⎥⎣ ⎦

1 μ. Γράψτε τις εντολές της MATLAB που υπολογίζουν τα ακόλουθα: (β) Την ορίζουσα και τον βαθμό του Α. 1 μ. (γ) Τον ανάστροφο και τον αντίστροφο του Α. 1 μ. (δ) Τις ιδιοτιμές και τα ιδιοδιανύσματα του Α. 2 μ. (ε) Τη λύση του συστήματος Ax=b 1 μ. ------------------------------------------------------------------------------------------------------- Λύση (α)

>> A=[1 1 1 1; -1 2 1 1; 4 3 0 0; 1 2 3 4] A = 1 1 1 1 -1 2 1 1 4 3 0 0 1 2 3 4 >> b=[1; 1; 1; 3] b = 1 1 1 3

(β)

>> det(A) ans = -10 >> rank(A) ans = 4

(γ)

>> A' ans = 1 -1 4 1 1 2 3 2 1 1 0 3 1 1 0 4 >> inv(A) ans = 0.3000 -0.3000 0.1000 -0.0000 -0.4000 0.4000 0.2000 -0.0000 3.9000 0.1000 -0.7000 -1.0000 -2.8000 -0.2000 0.4000 1.0000

(δ)

>> [V,D]=eig(A) V = Columns 1 through 3 0.2881 0.1285 -0.0214 + 0.0760i 0.2295 0.1865 -0.2051 - 0.1088i 0.3111 -0.8828 -0.5837 + 0.1145i 0.8761 0.4116 0.7656

4

Page 5: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Column 4 -0.0214 - 0.0760i -0.2051 + 0.1088i -0.5837 - 0.1145i 0.7656 D = Columns 1 through 3 5.9178 0 0 0 -1.2159 0 0 0 1.1490 + 0.2637i 0 0 0 Column 4 0 0 0 1.1490 - 0.2637i

(ε)

>> A\b ans = 0.1000 0.2000 0.3000 0.4000

5

Page 6: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 5 (α) Κατασκευάστε με απλό τρόπο (και όχι με απευθείας εκχώρηση τιμών) τον πίνακα:

1 1 1 1 0 01 1 1 0 1 01 1 1 0 0 1

A⎡ ⎤⎢ ⎥= ⎢ ⎥⎢ ⎥⎣ ⎦

1 μ. (β) Κατασκευάστε με απλό τρόπο (και όχι με απευθείας εκχώρηση τιμών) τον πίνακα:

1 1 1 1 11 2 2 2 21 2 2 2 21 2 2 2 2

B

⎡ ⎤⎢ ⎥⎢ ⎥=⎢ ⎥⎢ ⎥⎣ ⎦

2 μ. (γ) Κατασκευάστε τους κάτωθι υποπίνακες ενός πίνακα Α: (i) το διάνυσμα που περιέχει το 1ο, το 4ο, το 7ο και το 10ο στοιχείο της τελευταίας γραμμής του Α (δεδομένου ότι ο Α έχει τουλάχιστον 10 στήλες) 1 μ. (ii) το διάνυσμα που περιέχει το 9ο, το 7ο, το 5ο και το 3ο στοιχείο της τελευταίας στήλης του Α (δεδομένου ότι ο Α έχει τουλάχιστον 9 γραμμές) 1 μ. (iii) τον υποπίνακα που προκύπτει από την τομή των γραμμών 1, 4, 7 και 10 και τον στηλών 3, 5, 7 και 9 του Α 1 μ. (iv) τον υποπίνακα που περιέχει το 1ο, 2ο, 3ο και 7ο στοιχείο της τελευταίας γραμμής του Α. 1 μ. ------------------------------------------------------------------------------------------------------- Λύση (α)

>> A=[ones(3) eye(3)] A = 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1

(β)

>> A=ones(4,5); >> A(2:4,2:5)=2 A = 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2

(γ) (i) >> A(end,1:3:10) (ii) >> A(9:-2:3,end) (iii) >> A(1:3:10,3:2:9) (iv) >> A(end,[1 2 3 7]) ή >> A(end,[1:3 7])

6

Page 7: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 6 Ορίστε τη συνάρτηση

( )2 2( ) ln 1 x xf x e −= + όπου το x να μπορεί να είναι διάνυσμα με τους εξής τρόπους: (α) Με function m-file. 1 μ. (β) Με ανώνυμη συνάρτηση. 1 μ. (γ) Με την εντολή inline. 1 μ. (δ) Σχεδιάστε το γράφημα της f στο [0,5] με 3 διαφορετικές εντολές. 3 μ. ------------------------------------------------------------------------------------------------------- Λύση (α)

function y=f(x) % F y=log(1+exp(x.^2-2*x)); % End of F

(β)

>> f=@(x) log(1+exp(x.^2-2*x)) f = @(x) log(1+exp(x.^2-2*x))

(γ)

>> f=inline('log(1+exp(x.^2-2*x))','x') f = Inline function: f(x) = log(1+exp(x.^2-2*x))

(δ) 1ος τρόπος – Εντολή plot Με τις εντολές

x=0:0.1:5; plot(x,f(x))

παίρνουμε το γράφημα:

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

2

4

6

8

10

12

14

16

2ος τρόπος – Εντολή fplot Εφόσον έχουμε ορίσει ανώνυμη συνάρτηση ή συνάρτηση inline, με την εντολή

>> fplot(f,[0,5])

παίρνουμε το γράφημα

7

Page 8: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

2

4

6

8

10

12

14

16

3ος τρόπος– Εντολή ezplot Χρησιμοποιούμε τη συνάρτηση ezplot:

>> ezplot(f,0,5)

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

0

2

4

6

8

10

12

14

16

x

log(1+exp(x2-2 x))

8

Page 9: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 7 (α) Πως κατασκευάζεται στη ΜΑΤLAB το πιο κάτω γράφημα;

-5 0 5

-5

0

5

x

sin(x) - x cos(x)

0 2 4 6

0

10

20

30

40

x

log(x)+x2

-5 0 50

50

100

150

x

exp(x)-x

-5 0 5

-500

0

500

x

3 x3-2 x2+x-1

4 μ. (β) Σχεδιάστε το γράφημα της καμπύλης 2 2( 1) (1 )x y x y 0+ − + + = 2 μ. ------------------------------------------------------------------------------------------------------- Λύση (α) Με τις εντολές

>> subplot(2,2,1), ezplot('sin(x) - x*cos(x)') >> subplot(2,2,2), ezplot('log(x)+x^2') >> subplot(2,2,3), ezplot('exp(x)-x') >> subplot(2,2,4), ezplot('3*x^3-2*x^2+x-1')

(β) Με την εντολή

>> ezplot('x^2+(y^2-1)*(1+x+y)',[-3,3]) παίρνουμε το γράφημα

-3 -2 -1 0 1 2 3-3

-2

-1

0

1

2

3

x

y

x2+(y2-1) (1+x+y) = 0

9

Page 10: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 8 (α) Γράψτε μια m-συνάρτηση με όνομα prodfun.m που υπολογίζει το γινόμενο δύο συναρτήσεων f(x) και g(x) στο x. Τα ονόματα των f και g πρέπει να είναι μεταβλητές εισόδου για την prodfun. 4 μ. (β) Πως μπορούμε να σχεδιάσουμε το γράφημα της sinx ex χρησιμοποιώντας το πιο πάνω m-file; 2 μ. ------------------------------------------------------------------------------------------------------- Λύση (α) Το ζητούμενο m-file έχει ως εξής:

function y=prodfun(fname, gname, x) % PRODFUN % Calculates the product f(x)g(x) % y=feval(fname,x).*feval(gname,x); % End of PRODFUN

Πιο κάτω βλέπουμε κάποια αποτελέσματα που πήραμε με την prodfun:

>> prodfun(@exp,@cos,0) ans = 1 >> prodfun(@exp,@cos,pi/4) ans = 1.5509

Υπενθυμίζουμε ότι αντί του συμβόλου @, μπορούμε επίσης να δώσουμε τα ονόματα των συναρτήσεων μέσα σε εισαγωγικά:

>> prodfun('sin','cos',pi/4) ans = 0.5000 >> prodfun('cosh','tan',1.2) ans = 4.6573

(β) Με τις εντολές

>> x=linspace(-3,3); >> plot(x,prodfun(@sin,@exp,x))

παίρνουμε το γράφημα της sinx ex:

-3 -2 -1 0 1 2 3-1

0

1

2

3

4

5

6

7

8

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

>> ezplot(@(x) prodfun(@sin, @exp, x))

10

Page 11: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

η οποία παράγει το πιο κάτω γράφημα της sinx ex (μη βιαστείτε να σκεφθείτε ότι έχει γίνει λάθος!):

-3 -2 -1 0 1 2 3 4 5 6

-180

-160

-140

-120

-100

-80

-60

-40

-20

0

20

x

prodfun(@sin, @exp, x)

11

Page 12: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 9 Βρείτε το λάθος σε κάθε μια από τις πιο κάτω εντολές της MATLAB: (α) x=0:0.1:pi; f(x)=1+x.^2 1 μ. (β) if m=n 1 μ. (γ) f=2*x^2-3x+5 1 μ. και (δ) εξηγήστε τη διαφορά μεταξύ της 2+3 < 1+1 και της 2 +(3<1)+1. 1 μ. ------------------------------------------------------------------------------------------------------- Λύση (α) Στο αριστερό μέρος μιας εντολής εκχώρησης δεν μπορούμε να έχουμε εκφράσεις της μορφής f(x) εκτός αν η f είναι διάνυσμα (και όχι συνάρτηση) και το x είναι ακέραιος. Η MATLAB μας δίνει μήνυμα λάθους:

>> x=0:0.1:pi; f(x)=1+x.^2 ??? Subscript indices must either be real positive integers or logicals.

(β) Το if ακολουθείται από λογική πρόταση και όχι εντολή εκχώρησης. Μπορούμε να έχουμε

if m==n ή

if m <=n κλπ. Η MATLAB μας δίνει μήνυμα λάθους:

>> if m=n ??? if m=n | Error: The expression to the left of the equals sign is not a valid target for an assignment.

(γ) Λείπει το σύμβολο * του πολλαπλασιασμού στον όρο 3x. Η MATLAB μας δίνει μήνυμα λάθους:

>> f=2*x^2-3x+5 ??? f=2*x^2-3x+5 | Error: Unexpected MATLAB expression.

(δ) Η 2+3 < 1+1 είναι μια λογική παράσταση με λογική τιμή 0. Η 2 +(3<1)+1 είναι ένα άθροισμα που περιλαμβάνει και ένα λογικό 0 (αυτή είναι η τιμή της πρότασης 3<1). Η τιμή του είναι φυσικά 3. Πιο κάτω φαίνονται τα αποτελέσματα της MATLAB:

>> 2+3 < 1+1 ans = 0 >> whos Name Size Bytes Class Attributes ans 1x1 1 logical >> >> 2 +(3<1)+1 ans = 3 >> whos Name Size Bytes Class Attributes ans 1x1 8 double

12

Page 13: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 10 Γράψτε με διαφορετικό τρόπο τις πιο κάτω παραστάσεις στη ΜΑΤLΑΒ: (α) 1+ cos(pi) >= 2 (β) eye(3) < ones(3) (γ) or(x>=y, x==round(x)) (δ) le(2*rand(3),ones(3)) (ε) gt(delta, 1e-8)

3 μ. ------------------------------------------------------------------------------------------------------- Λύση (α)

>> ge(1+cos(pi), 2) ans = 0

(β)

>> lt(eye(3),ones(3)) ans = 0 1 1 1 0 1 1 1 0 >>

(γ)

x>=y | x==round(x) ή ge(x,y) | eq(x, round(x)) (δ)

>> 2*rand(3) <= ones(3) ans = 1 0 0 0 1 0 0 0 0

(ε) delta >= 1e-08

13

Page 14: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 11 Γράψτε ένα function m-file με το όνομα series1.m και δεδομένo εισόδου ένα φυσικό αριθμό n για τον υπολογισμό του αθροίσματος

21 1

n

k

kk= +∑

(α) με τη χρήση βρόχου for. 2 μ. (β) χωρίς τη χρήση βρόχου for. 3 μ. (γ) Με δοσμένο το m-file series1.m πως θα κατασκευάζατε το πιο κάτω γράφημα του αθροίσματος συναρτήσει του n στο διάστημα [0,20]; 3 μ.

0 2 4 6 8 10 12 14 16 18 200.5

1

1.5

2

2.5

3

n

Σ k/

(1+k

2 )

------------------------------------------------------------------------------------------------------- Λύση (α)

function sum1=series1(n) % SERIES1 % Ypologizei to athroisma k/(1=k^2) % sum1=0; for k=1:n sum1=sum1+k/(1+k^2); end % End of SERIES1

(β)

function sum1=series1(n) k=0; sum1=0; while k <= n k=k+1; sum1=sum1+k/(1+k^2); end

ή

function sum1=series1(n) x=1:n; sum1=sum(x./(1+x.^2));

14

Page 15: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

ή ακόμα

function sum1=series1(n) sum1=sum( (1:n)./(1+(1:n).^2) );

(γ)

>> x=1:20; >> for k=1:20, y(k)=series1(k); end >> plot(x,y,'o'), xlabel('n'), ylabel('Σ k/(1+k^2)')

15

Page 16: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 12 Γράψτε ένα function m-file με το όνομα issymmetric.m και δεδομένο εισόδου ένα πραγματικό πίνακα Α που • θα ελέγχει αν ο Α είναι τετραγωνικός και αν όχι θα επιστρέφει σχετικό μήνυμα λάθους και θα σταματά. • Στην περίπτωση που ο Α είναι τετραγωνικός θα επιστρέφει τη λογική τιμή 1 αν ο Α είναι συμμετρικός και τη λογική τιμή 0 διαφορετικά.

5 μ. ------------------------------------------------------------------------------------------------------- Λύση Το ζητούμενο m-file έχει ως εξής:

function yn=issymmetric(A) % ISSYMMETRIC % Checks whether a matrix A is symmetric % [m,n]=size(A); if m~=n disp('Matrix A is not square!') else if A==A' yn=true; else yn=false; end end %End of ISSYMMETRIC

Ακολουθούν μερικά αποτελέσματα που πήραμε με το πρόγραμμα issymmetric.m.

>> issymmetric(ones(2,3)) Matrix A is not square! >> issymmetric(ones(3,3)) ans = 1 >> issymmetric(eye(4)) ans = 1 >> issymmetric(rand(5)) ans = 0 >> >> whos Name Size Bytes Class Attributes ans 1x1 1 logical

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

16

Page 17: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 13 Γράψτε ένα function m-file με το όνομα lowsol.m που θα επιλύει το γραμμικό σύστημα Ax=b με εμπρός αντικατάσταση όταν ο Α είναι κάτω τριγωνικός πίνακας.

1 1 11/x b a=

1

1

/ , 2, ,i

i i ik k iik

x b a x a i−

=

⎛ ⎞= − =⎜ ⎟⎝ ⎠

∑ n

To m-file πρέπει να ελέγχει τα εξής: • αν ο Α είναι τετραγωνικός και αν όχι να επιστρέφει σχετικό μήνυμα λάθους. • αν ο Α είναι κάτω τριγωνικός και αν όχι να επιστρέφει σχετικό μήνυμα λάθους. • αν οι Α και b έχουν το ίδιο πλήθος στηλών και αν όχι να επιστρέφει σχετικό

μήνυμα λάθους. • αν ο Α είναι αντιστρέψιμος και αν όχι να επιστρέφει σχετικό μήνυμα λάθους.

15 μ ------------------------------------------------------------------------------------------------------- Λύση To function m-file είναι το εξής:

function [x]=lowsol(A,b) % LOWSOL % Solves AX=b where A is a lower % triangular matrix % % Checks [m,n]=size(A); [mb,nb]=size(b); if m~=n % Check if A is nXn disp('Matrix A is not square!') return elseif mb ~= 1 ^ nb ~=1 % Check if b is a vector disp('b is not a vector!') return elseif mb*nb~=n % Check if b is a nx1 vector fprintf('b is not a %3.0fx1 vector! \n',n) return elseif det(A) == 0 % Check if A is invertible disp('A is not invertible!') return else % Check if A is lower triangular if ~all(all(A==tril(A))) disp('A is not lower triangular!') return end end % Solution of the lower triangular system n=max(size(A)); x=zeros(n,1); x(1)=b(1)/A(1,1); for j=2:n x(j)=(b(j)-A(j,1:j-1)*x(1:j-1))/A(j,j); end % End of LOWSOL

17

Page 18: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Ένας πιο δύσκολος τρόπος για να ελέγξουμε αν ο Α είναι συμμετρικός είναι ο πιο κάτω που χρησιμοποιεί λογική άλλων γλωσσών προγραμματισμού και όχι τη λογική της MATLAB:

for k=1:n-1 for j=k+1:n if A(k,j) ~= 0 disp('A is not lower triangular!') return end end end

Πιο κάτω φαίνονται μερικά ενδεικτικά αποτελέσματα που πήραμε με το lowsol.m:

>> A=[1 0 0 0; 2 -1 0 0; 1 2 -1 0; 1 4 3 -2] A = 1 0 0 0 2 -1 0 0 1 2 -1 0 1 4 3 -2 >> b=[4 6 15 1]' b = 4 6 15 1 >> lowsol(A,b) ans = 4 2 -7 -5 >> lowsol(ones(4),b) A is not invertible! >> lowsol(eye(4),b) ans = 4 6 15 1 >> lowsol(eye(3),b) b is not a 3x1 vector! >> >> A(1,2)=2 A = 1 2 0 0 2 -1 0 0 1 2 -1 0 1 4 3 -2 >> lowsol(A,b) A is not lower triangular! >>

Θα λύσουμε επίσης ένα τυχαίο σύστημα, ως εξής:

>> b=rand(5,1) b = 0.6813 0.3795 0.8318 0.5028 0.7095 >> A=tril(rand(5)) A =

18

Page 19: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

0.4289 0 0 0 0 0.3046 0.5417 0 0 0 0.1897 0.1509 0.5936 0 0 0.1934 0.6979 0.4966 0.6602 0 0.6822 0.3784 0.8998 0.3420 0.3093 >> lowsol(A,b) ans = 1.5885 -0.1927 0.9428 -0.2092 -3.4856

19

Page 20: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 14 Γράψτε ένα function m-file με όνομα nnns.m, μεταβλητή εισόδου τον φυσικό αριθμό m και μεταβλητή εξόδου το διάνυσμα u που περιέχει τους αριθμούς της μορφής

( 1) ( 2)2

n n n+ + που είναι μικρότεροι ή ίσοι του m. Tο πρόγραμμα πρέπει να επιστρέφει μήνυμα λάθους αν ο m δεν είναι φυσικός αριθμός. 6 μ. ------------------------------------------------------------------------------------------------------- Λύση Το ζητούμενο m-file είναι:

function u=nnns(m) % NNNS % if m~=round(m) | m<=0 disp('m is not a natural number!'), return end % if m < 3, u(1)=0; return else, u(1)=3; end k=1; while(k+1)*(k+2)*(k+3)/2<=m k=k+1; u(k)= k*(k+1)*(k+2)/2; end %End of NNNS

Ακολουθούν κάποια αποτελέσματα που πήραμε με το nnns.m:

>> nnns(10.123) m is not a natural number! >> nnns(500) ans = 3 12 30 60 105 168 252 360 495

Εναλλακτική λύση. Το πρόγραμμα που ακολουθεί φαίνεται πιο κομψό και σύντομο αλλά κάνει επιπλέον και αχρείαστους υπολογισμούς:

function u=nnns1(m) % NNNS1 % if m~=round(m) | m<=0 disp('m is not a natural number!') return end % if m < 3 u(1)=0; else n=1:m; w=n.*(n+1).*(n+2)/2; v=find(w<=m); u=w(1:length(v)); end %End of NNNS1

Η εντολή find(w<=m) βρίσκει τους δείκτες που αντιστοιχούν σε μη μηδενικά στοιχεία του λογικού διανύσματος (w<=m). Για περισσότερες πληροφορίες δοκιμάστε την help find.

20

Page 21: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 15 Έστω το πιο κάτω πρόγραμμα:

>> x=1; >> while x+x>x x=2*x pause(.02) end

(α) Τι κάνει το πρόγραμμα; 1 μ. (β) Πόσες γραμμές αποτελεσμάτων παράγονται; 1 μ. (γ) Ποιες είναι οι τελευταίες δύο τιμές του x που τυπώνονται; 1 μ. ------------------------------------------------------------------------------------------------------- Λύση (α) Το πρόγραμμα διπλασιάζει την τιμή του x μέχρι που ο υπολογιστής δεν μπορεί να διακρίνει αν το 2x είναι μεγαλύτερο του x. Αυτό συμβαίνει όταν

x+x> realmax. (β) Εφόσον realmax=2^1024 παράγονται 1024 γραμμές αποτελεσμάτων. (γ) Οι δύο τελευταίες γραμμές που τυπώνονται είναι οι

x = 8.988465674311580e+307 x = Inf >>

Σημειώνουμε ότι ο αριθμός 8.988465674311580e+307 είναι (πρακτικά) ο realmax/2. Πραγματικά

>> realmax/2 ans = 8.988465674311579e+307 >>

Άρα οι δύο τελευταίες τιμές του x που τυπώνονται είναι οι realmax/2 και Inf.

21

Page 22: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 16 (α) Ένας αριθμός μηχανής γράφεται γενικά στη μορφή

( )1 2. etx a a a

βσ β=

Εξηγήστε τι αντιπροσωπεύουν τα σ, t, β e. 2 μ. (β) Τι καλούμε υπερχείλιση (overflow) και τι υπεκχείλιση (underflow). 1 μ (γ) Αν μια δυαδική μηχανή αποθηκεύει μέχρι 5 σημαντικά ψηφία και χρησιμοποιεί στρογγύλευση, πως θα αποθηκεύσει το δυαδικό αριθμό 11.01110101; 2 μ (δ) Ποιος από τους πιο κάτω αριθμούς δεν είναι NaN στη MATLAB;

0/0, inf-inf, realmax/realmin, 0*NaN 1 μ ------------------------------------------------------------------------------------------------------- Λύση (α) Το σ είναι το πρόσημο του αριθμού. Το β είναι η βάση του αριθμητικού συστήματος. Το t είναι το πλήθος των σημαντικών ψηφίων που αποθηκεύει το σύστημα. Το e είναι ο εκθέτης. (β) Υπερχείλιση (overflow) συμβαίνει όταν το αποτέλεσμα μιας πράξης στον υπολογιστή είναι κατ’απόλυτη τιμή μεγαλύτερο από τον απόλυτα μέγιστο αριθμό μηχανής:

max| |x x> Στην περίπτωση αυτή η MATLAB θέτει τον x ίσο με Inf ή –Inf..

Υπεχείλιση (underflow) συμβαίνει όταν το αποτέλεσμα μιας πράξης στον υπολογιστή είναι κατ’απόλυτη τιμή μικρότερο από τον απόλυτα ελάχιστο αριθμό μηχανής:

min| |x x< Στην περίπτωση αυτή η MATLAB θέτει τον x ίσο με 0.

Και στις δυο περιπτώσεις χάνεται κάθε πληροφορία για τον αριθμό x. (γ) Αν x=11.01110101 και t=5, τότε με στρογγύλευση

fl(x)=0.11100 22. (δ) Ο realmax/realmin. Πράγματι

>> realmax/realmin ans = Inf

Στις άλλες περιπτώσεις έχουμε ΝaΝ:

>> 0/0 Warning: Divide by zero. ans = NaN >> inf/inf ans = NaN >> 0*NaN ans = NaN

22

Page 23: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 17 (α) Αν

>> x=rand(2) x = 0.444703364353194 0.791937037427035 0.615432348100095 0.921812970744803

τι θα μας δώσει η εντολή

>> y=num2str(x) 2 μ.

(β) Πως θα σχεδιάσετε το πιο κάτω γράφημα στη MATLAB (με κόκκινο χρώμα);

0 0.5 1 1.5 2 2.5 3 3.50

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

x

y=si

n(x)

3 μ.

------------------------------------------------------------------------------------------------------- Λύση (α) Θα μας δώσει τον πιο κάτω αλφαριθμητικό πίνακα:

y = 0.4447 0.79194 0.61543 0.92181

Πράγματι, αν χρησιμοποιήσουμε την εντολή whos y βλέπουμε ότι:

>> whos y Name Size Bytes Class Attributes y 2x19 76 char

(β)

>> x=0:0.01:pi; >> fill(x,sin(x),'r') >> xlabel('x'), ylabel('y=sin(x)')

23

Page 24: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

Πρόβλημα 18 Ορίστε τη συνάρτηση

2 21( , ) x yg x y xy e + += έτσι ώστε το x να μπορεί να είναι διάνυσμα με τους εξής τρόπους: (α) Με function m-file. 1 μ. (β) Με ανώνυμη συνάρτηση. 1 μ. (γ) Με την εντολή inline. 1 μ. (δ) Πως μπορούμε να σχεδιάσουμε το γράφημα της g στο [-2,2]×[-2,2] με 2 διαφορετικούς τρόπους; 2 μ. (ε) Σχεδιάστε το γράφημα και τις ισοϋψείς της g όπως φαίνεται στο σχήμα. 3 μ.

-1

0

1

-1

0

1-30

-20

-10

0

10

20

30

x

x y exp(1+x2+y2)

yx

y

x y exp(1+x2+y2)

-1 -0.5 0 0.5 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

------------------------------------------------------------------------------------------------------- Λύση (α)

function z=g1(x,y) % G z=x.*y.*exp(1+x.^2+y.^2); % End of G

(β)

>> g=@(x,y) x.*y.*exp(1+x.^2+y.^2) g = @(x,y) x.*y.*exp(1+x.^2+y.^2)

(γ)

>> g=inline('x.*y.*exp(1+x.^2+y.^2)','x','y') g = Inline function: g(x,y) = x.*y.*exp(1+x.^2+y.^2)

(δ) 1ος τρόπος – Εντολή surf Με τις εντολές

>> [x,y]=meshgrid(-2:0.1:2,-2:0.1:2);

24

Page 25: ΜΑΣ 191. Μαθηματικά με Υπολογιστές Διδάσκων Γιώργος ...euclid.mas.ucy.ac.cy/~georgios/courses/mas191/exam07a.pdf · Πρόβλημα 3 Με

>> surf(x,y,g(x,y))

παίρνουμε το γράφημα:

-2-1

01

2

-2-1

0

12

-4

-2

0

2

4

x 104

2ος τρόπος– Εντολή ezsurf Εφόσον έχουμε ορίσει ανώνυμη συνάρτηση ή συνάρτηση inline, με την εντολή

>> ezsurf(g, [-2, 2, -2, 2])

παίρνουμε το γράφημα

-2-1

01

2

-2-1

0

12

-4

-2

0

2

4

x 104

x

x y exp(1+x2+y2)

y

(ε) Τα γραφήματα έγιναν στο χωρίο [-1,1]×[-1,1] με τις εντολές

>> subplot(1,2,1), ezsurf(g,[-1,1,-1,1]) >> subplot(1,2,2), ezcontourf(g,[-1,1,-1,1])

25