6 Ασκήσεις Αριθμητικής Ανάλυσης

32
ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Αριθμητική Ανάλυση με χρήση Matlab ΑΝΑΣΤΑΣΙΟΣ ΛΑΖΑΡΙΔΗΣ [email protected] ΝΙΚΟΛΑΟΣ ΤΣΕΛΕΠΙΔΗΣ [email protected]

Transcript of 6 Ασκήσεις Αριθμητικής Ανάλυσης

ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ

ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ

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

ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Αριθμητική Ανάλυση με χρήση Matlab

ΑΝΑΣΤΑΣΙΟΣ ΛΑΖΑΡΙΔΗΣ

[email protected]

ΝΙΚΟΛΑΟΣ ΤΣΕΛΕΠΙΔΗΣ

[email protected]

Υποεργασία 1

Ερώτημα Α

Τα σημεία 0 0,x y , 1 1,x y , 2 2,x y , 3 3,x y , όπου τα ix είναι ισαπέχοντα,

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

2 3 4

0 0 0 0 0

1 1 1 1( ) ...

2 3 4f x f f f f

h

(1)

οδηγεί στη σχέση 3 2 1 0

16 3 2

6y y y y

h , όπως οι τιμές

dy

dx στο 1 1,x y .

Τι συμπεραίνετε;

Ερώτημα Β

Να δειχθεί ότι :

i) 2

ii) 1

2

2

iii) 2 iv)

1

n n n n n

n n n

f g f f g

g g g

.

Λύση

Ερώτημα Α

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

ανώτερης τάξης θα είναι ίσες με μηδέν, οπότε η παραπάνω σχέση γράφεται

2 3

0 0 0 0

1 1 1( )

2 3f x f f f

h

(1.1)

Υπολογίζουμε πρώτα τις διαφορές

0 1 0f y y

2

0 1 0 2 1 1 0 2 1 02f f f y y y y y y y

3 2 2

0 1 0 2 1 1 0 2 1 02f f f f f f f f f f

3 2 2 1 1 0 3 2 1 02 3 3y y y y y y y y y y

Κάνοντας αντικατάσταση στην (1.1) έχουμε

2 3

0 0 0 0

1 1 1( )

2 3f x f f f

h

1 0 2 1 0 3 2 1 0

1 1 12 3 3

2 3y y y y y y y y y

h

1 0 2 1 0 3 2 1 0

16 6 3 2 2 3 3

6y y y y y y y y y

h

3 2 1 0

12 9 18 11

6y y y y

h

0 3 2 1 0

12 9 18 11

6f x y y y y

h (1.2)

Για να βρούμε την παράγωγο στο σημείο 1 1,x y παίρνουμε τον προσεγγιστικό

τύπο των Newton-Gregory

2 3

0 0 0 0 0...1 2 3

n

n

i i i if x p x f x f f f f

n

, 0ix x ih

Όπως και προηγουμένως, οι διαφορές 4ης και ανώτερης τάξης είναι μηδέν.

Παραγωγίζοντας τώρα την παραπάνω σχέση έχουμε

2 3

0 0 0 0

1

1 2 3

n

n

i i idp x di df x p x f x f f f

di dx h di

2

2 3

0 0 0

1 1 3 6 2

2 3!

i if x f i f f

h

(1.3)

Στην τελευταία σχέση για 0i παίρνουμε την σχέση (1.1), ενώ για 1i έχουμε

2 3

0 1 0 0 0

1 1 1

2 6f x h f x f f f

h

1 1 0 2 1 0 3 2 1 0

1 1 12 3 3

2 6f x y y y y y y y y y

h

1 1 0 2 1 0 3 2 1 0

16 6 3 6 3 3 3

6f x y y y y y y y y y

h

1 3 2 1 0

16 3 2

6f x y y y y

h

η οποία είναι και η ζητούμενη σχέση.

Συμπεραίνουμε, λοιπόν, ότι από τον τύπο των Newton-Gregory, μπορούμε να

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

σημεία που δίνονται, για 0ix x ih , 0,1,2,3i .

Ερώτημα Β

i) Για να αποδείξουμε την σχέση τελεστών 2

θα κάνουμε τις πράξεις

στα δύο μέλη και θα δείξουμε ότι αυτά είναι ίσα.

Έτσι, στο πρώτο μέλος έχουμε

1 1 1 1

1 1 1 1

2 2 2 2 2n n n n n n n n n nf f f f f f f f f f

και στο δεύτερο μέλος

1 1 1 1 1 12 2

1 1 1

2 2 2n n n n n n nn n

f f f f f f f f f

Παρατηρούμε ότι αυτά είναι ίσα, άρα αποδείχτηκε και η αρχική σχέση.

ii) Για να δείξουμε την σχέση 1

2

2

θα ξεκινήσουμε από το πρώτο μέλος

και θα καταλήξουμε στο δεύτερο. Έτσι έχουμε

1 1 1 12 2 2 2

1 1 1

2 2 2 2n n n n n n n

f f f f f f f

12

1 12 2

12

2nn n

f f E f

iii) Για να δείξουμε την σχέση τελεστών 2 θα κάνουμε τις πράξεις και

στα δύο μέλη, όπως στο ερώτημα (i), και θα δείξουμε ότι αυτά είναι ίσα. Δηλαδή,

1 1 1 1

2

1 1 1 1 1 12 2

( ) 2

2

n n n n n n n n n n

n n n n n n n n nn n

f f f f f f f f f f

f f f f f f f f f f f

2

iv) Τέλος, θα αποδείξουμε τη σχέση 1

n n n n n

n n n

f g f f g

g g g

ξεκινώντας από το

πρώτο μέλος για να καταλήξουμε στο δεύτερο.

1 1 1 1 1

1 1 1

n n n n n n n n n n n n n n n

n n n n n n n

f f f g f f g g f f g f g f g

g g g g g g g

1 1

1 1

( ) ( )n n n n n n n n n n

n n n n

g f f f g g g f f g

g g g g

Υποεργασία 2

Ερώτημα Α

Τα πολυώνυμα Legendre ορίζονται από την αναδρομική σχέση

2 1

2 3 1

2 2k k k

k kP x xP x P x

k k

0 1P x και 1P x x . Να υπολογισθούν τα πολυώνυμα 2P x , 3P x , 4P x ,

5P x και 6P x , καθώς επίσης και οι προσεγγιστικές ρίζες του πολυωνύμου

6P x με ακρίβεια 610 .

Ερώτημα Β

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

1 1n

iA P

i

όπου A είναι το ποσό του δανείου, P είναι το ποσό κάθε πληρωμής και i είναι η τιμή του τόκου για κάθε περίοδο για τις n περιόδους πληρωμής. Υποθέστε ότι το δάνειο με υποθήκη ενός σπιτιού για 30 χρόνια είναι 14673.51€ και ότι ο δανειζόμενος μπορεί να πληρώσει κάθε μήνα το πολύ 132.06€. Ποια είναι η μέγιστη τιμή τόκου που μπορεί να πληρώσει ο δανειζόμενος;

Λύση

Ερώτημα Α

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

συνάρτηση Legendre(k)η οποία είναι η εξής

Legendre.m

function P=Legendre(k)

syms P(x);

if(k==0)

P(x)=1;

elseif(k==1)

P(x)=x;

else

A=(2*(k-2)+3)/((k-2)+2);

B=((k-2)+1)/((k-2)+2);

P(x)=collect(A*Legendre(k-1)*x-B*Legendre(k-2));

end

end

Αρχικά, δηλώνουμε το πολυώνυμο P(x) ως συμβολική συνάρτηση, που παίρνει ως όρισμα τη συμβολική μεταβλητή x και στη συνέχεια ορίζουμε τον τύπο του σύμφωνα με το k, αναδρομικά. Η εντολή collect, "συλλέγει" τις ομοβάθμιες δυνάμεις τις συμβολικής μεταβλητής x και ξαναγράφει τη συνάρτηση σε μορφή πολυωνύμου. Έτσι, το πρόγραμμα για την εμφάνιση των ζητούμενων πολυωνύμων είναι το παρακάτω LegendrePolynomials.m

clear;

clc;

for i=0:6

fprintf(['\nP' num2str(i) '(x) = ' char(Legendre(i)) '\n']);

end

Για i από 0 μέχρι 6 εμφανίζουμε τα αντίστοιχα πολυώνυμα Legendre, καλώντας την αναδρομική συνάρτηση Legendre(k). Καλώντας το παραπάνω πρόγραμμα, παίρνουμε τα ζητούμενα πολυώνυμα P0(x) = 1

P1(x) = x

P2(x) = (3*x^2)/2 - 1/2

P3(x) = (5*x^3)/2 - (3*x)/2

P4(x) = (35*x^4)/8 - (15*x^2)/4 + 3/8

P5(x) = (63*x^5)/8 - (35*x^3)/4 + (15*x)/8

P6(x) = (231*x^6)/16 - (315*x^4)/16 + (105*x^2)/16 - 5/16

Στη συνέχεια, για να βρούμε τις ρίζες του 6P x , χρησιμοποιούμε τη μέθοδο

Newton-Raphson. Γράφουμε, λοιπόν, τη συνάρτηση Newton_Raphson.m

function x=Newton_Raphson(f,df,x0,tol,n_max)

for i=1:n_max

x=x0-f(x0)/df(x0);

fprintf('%3.0f%20.14f%20.14f\n', i,x,abs(x-x0));

if abs(x-x0)<tol

break;

end

x0=x;

end

if i==n_max

fprintf('Η μέθοδος Newton-Raphson δεν κατάφερε να

συγκλίνει μέσα σε %3.0f επαναλήψεις', n_max);

end

end

Επίσης, δημιουργούμε το πρόγραμμα L6_roots.m

clear; clc; format long;

% P6(x)

f=inline('(231*x^6)/16 - (315*x^4)/16 + (105*x^2)/16 - 5/16');

% η παράγωγος του P6(x)

df=inline('(693*x^5)/8 - (315*x^3)/4 + (105*x)/8');

x0=[-0.95 -0.7 -0.25 0.2 0.65 0.9]; % αρχικές προσεγγίσεις

tol=1e-6; % ακρίβεια

n_max=50; % μέγιστος αριθμός επαναλήψεων

% προσεγγίσεις των ριζών του P6(x)

for i=1:length(x0)

fprintf('Προσέγγιση του x%1.0f\n',i);

Newton_Raphson(f,df,x0(i),tol,n_max);

end

Δηλώνουμε το 6P x , και την παράγωγό του ως inline συναρτήσεις, f και df

αντίστοιχα. Αμέσως μετά, ορίζουμε τον x0 ως τον πίνακα με τις αρχικές

προσεγγίσεις των ριζών του 6P x , εκχωρούμε στη μεταβλητή tol την

επιθυμητή ακρίβεια και στη μεταβλητή n_max τον μέγιστο αριθμό των επαναλήψεων και στη συνέχεια, καλούμε την συνάρτηση Newton_Raphson, με τα αντίστοιχα ορίσματα για να προσεγγίσουμε τις ζητούμενες ρίζες. Καλώντας το παραπάνω πρόγραμμα, έχουμε Προσέγγιση του x1

1 -0.93435179648173 0.01564820351827

2 -0.93249438379747 0.00185741268426

3 -0.93246951862147 0.00002486517600

4 -0.93246951420315 0.00000000441831

Προσέγγιση του x2

1 -0.66162378161148 0.03837621838852

2 -0.66120958659591 0.00041419501557

3 -0.66120938646631 0.00000020012960

Προσέγγιση του x3

1 -0.23863116675242 0.01136883324758

2 -0.23861918611949 0.00001198063292

3 -0.23861918608320 0.00000000003629

Προσέγγιση του x4

1 0.23983546907135 0.03983546907135

2 0.23861953503766 0.00121593403369

3 0.23861918608323 0.00000034895443

Προσέγγιση του x5

1 0.66138947025949 0.01138947025949

2 0.66120942443396 0.00018004582553

3 0.66120938646627 0.00000003796769

Προσέγγιση του x6

1 0.94341433771749 0.04341433771749

2 0.93324471352305 0.01016962419443

3 0.93247377657111 0.00077093695194

4 0.93246951433296 0.00000426223815

5 0.93246951420315 0.00000000012981

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

1 1 1 10

n ni i

A P A Pi i

Θέτοντας

1 1

ni

f i A Pi

(1)

το πρόβλημα ανάγεται στην εύρεση της λύσης της εξίσωσης 0f i .

Κάνοντας τις αντικαταστάσεις των μεταβλητών A=14673.51, P=132.06 και

n=30*12 η σχέση (1) γράφεται ως εξής

3601 1

14673.51 132.06i

f ii

Για την εύρεση της ρίζας της f, χρησιμοποιούμε τη μέθοδο της Διχοτόμησης. ex2b.m

clear;

clc;

format long;

f=inline('14673.51-(132.06*(1-(1+x)^(-360)))/x');

a=eps;

b=0.1;

tol=10^-6;

if(f(a)*f(b)<0) % Bolzano για να ελέγξουμε αν όντως υπάρχει

% ρίζα στο [a,b]

N=ceil(log2((b-a)/tol));

disp([blanks(2) 'Αριθμός επαναλήψεων' blanks(5)...

'Προσέγγιση' blanks(12) 'Σφάλμα']);

for i=1:N

x=(a+b)/2; % Εύρεση του μέσου του [a,b] και προσέγγιση

% της ρίζας

if (f(a)*f(x)<0) % Έλεγχος διαστήματος στο οποίο

% υπάρχει η ρίζα

b=x;

else

a=x;

end

if (abs(b-a)<tol) % Ελεγχος σφάλματος

disp([i,x,abs(b-a)]);

break;

end

end

else

fprintf('Η μέθοδος της διχοτόμησης απέτυχε, επείδη δεν

υπάρχει ρίζα στο διάστημα [%f, %f]', a,b);

end

Το [a,b] είναι το διάστημα στο οποίο ψάχνουμε τη ρίζα της f, στη μεταβλητή tol αποθηκεύεται η επιθυμητή ακρίβεια με την οποία θέλουμε να προσεγγίσουμε τη ρίζα, και N είναι ο μέγιστος αριθμός επαναλήψεων που χρειάζονται για να πετύχουμε την επιθυμητή ακρίβεια στην προσέγγιση της ρίζας με τη μέθοδο της διχοτόμησης. *Ο τελεστής "..." δεν είναι τίποτα παραπάνω από την ένδειξη συνέχειας στην επόμενη γραμμή. Η εντολή εκτελείται κανονικά, σαν να είχε γραφτεί σε μία γραμμή. Καλώντας το παραπάνω πρόγραμμα, εμφανίζεται στο παράθυρο εντολών του MATLAB Αριθμός επαναλήψεων Προσέγγιση Σφάλμα

17.000000000000000 0.008585357666016 0.000000762939453

Τελικά, για i = 0.008585357666016, έχουμε τη μεγιστοποίηση του τόκου.

Υποεργασία 3

Ερώτημα Α

Υποθέστε ότι για τα γραμμικά συστήματα Au s και Au s , ισχύει

1

1A A

A , όπου A και A είναι μη ιδιότυποι πίνακες (με A να αποτελεί

έναν «ελαφρά-διαταραγμένο» πίνακα του A ). Να δειχθεί ότι, αν 0u ισχύει

1

A Au u I k A

u Ak A A A A

(3.1)

Ερώτημα Β

Έστω A ένας n n τετραγωνικός πίνακας με 1A , όπου είναι μία νόρμα

πινάκων. Να δειχθεί ότι

11 1

1 1I A

A A

(3.2)

Λύση

Πριν απαντήσουμε στα ερωτήματα Α και Β θα αποδείξουμε κάποιες σχέσεις που

θα μας φάνουν χρήσιμες παρακάτω.

Γνωρίζουμε ότι νόρμα ονομάζεται μια απεικόνιση : n nM αν για κάθε

, n nA B M ισχύουν τα ακόλουθα:

0A (3.i)

0A αν και μόνο αν 0A (3.ii)

cA c A , c M (3.iii)

A B A B (3.iv)

AB A B (3.v)

Ειδικότερα τώρα για κάθε μοναδιαίο πίνακα I έχουμε (3. )

1v

I I I I I I I I I (3.3)

Ενώ για τον 1A που είναι ο αντίστροφος του A , 1AA I έχουμε

1 1 1 1 11 1I AA A A A A A

A

(3.4)

Λήμμα

Αν n nA M και 1A τότε ο I A είναι αντιστρέψιμος και ισχύει

11

1I A A

(3.5)

Απόδειξη

Έχουμε

x I A x Ax x I A x Ax I A x Ax

x I A x A x 1I A x A x

από αυτό συνεπάγεται ότι 0I A x για κάθε 0x , έτσι ο πίνακας I A

είναι αντιστρέψιμος.

Έστω τώρα ότι 0b και 1

x I A b

, τότε

1

1

1

I A b x

b AI A x

αφού η παραπάνω σχέση ισχύει για κάθε 0b έχουμε

1

1

0

1sup

1b

I A bI A

b A

το οποίο θέλαμε να αποδείξουμε.

Ερώτημα Α

Έχουμε τα γραμμικά συστήματα

u s και u s , με και u u u

η ανισότητα 1

1

γράφεται και k όπου

1k

είναι ο αριθμός ευαισθησίας, έτσι έχουμε

1 1 1k

(3.6)

Εδώ ο πίνακας 1I είναι αντιστρέψιμος, οπότε έχουμε

1 1u u I u u

Από το παραπάνω Λήμμα μπορούμε να γράψουμε

1

1 1u I u

και παίρνουμε

1

11 1

11u I u u

Επομένως η παραπάνω σχέση σύμφωνα με την (3.6) γράφεται

1

u k A

uk A

1

A Au u k A

u Ak A A A A

(3.7)

Τέλος, πολλαπλασιάζοντας κατά μέλη τις (3.7) και (3.3) έχουμε την ζητούμενη

σχέση

1

A Au u I k A

u Ak A A A A

Ερώτημα B

Με βάση το παραπάνω Λήμμα, θέτοντας όπου Α το –Α, η εξίσωση (3.5) γράφεται

1 11 1 1 11 1

1I A A I A A I A

A

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

αποδείξουμε.

Υποεργασία 4

Ερώτημα Α

Να επιλύσετε το κάτωθι γραμμικό σύστημα

1

2

3

4

1 5 0 1 2

0 1 2 4 1

8 1 1 0 1

1 0 4 2 0

x

x

x

x

με τη μέθοδο Jacobi, Gauss-Seidel και SOR και αρχική προσέγγιση x(0)=[0 0 0 0]T Να σχολιάσετε τη συμπεριφορά των μεθόδων.

Ερώτημα Β

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

1

2

3

1 1 1112 3 16

10 5 6553 2 6

100 23525 203 3

x

x

x

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

Ερώτημα Γ

Θεωρήστε το παρακάτω κύκλωμα

για το οποίο με χρήση της μεθόδου Kirchoff, ο υπολογισμός του δυναμικού γίνεται με την επίλυση γραμμικού συστήματος με LU παραγοντοποίηση. Να υπολογισθεί το δυναμικό στα διάφορα σημεία.

Λύση

Ερώτημα Α

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

1 5 0 1

0 1 2 4

8 1 1 0

1 0 4 2

A

και

2

1

1

0

b

Οι μέθοδοι Jacobi, Gauss-Seidel και SOR είναι επαναληπτικές, άρα για να τις

χρησιμοποιήσουμε πρέπει ο πίνακας Α να είναι διαγώνια υπέρτερος. Για να γίνει

αυτό θεωρούμε τον επαυξημένο πίνακα A b και κάνουμε τις ακόλουθες

γραμμοπράξεις

1 3 2 3

1 5 0 1 2 8 1 1 0 1

0 1 2 4 1 0 1 2 4 2

8 1 1 0 1 1 5 0 1 1

1 0 4 2 0 1 0 4 2 0

R R R RA b

3 4

8 1 1 0 1 8 1 1 0 1

1 5 0 1 2 1 5 0 1 2

0 1 2 4 1 1 0 4 2 0

1 0 4 2 0 0 1 2 4 1

R R

Έτσι το σύστημα τώρα γράφεται 1 1A x b , όπου

1

8 1 1 0

1 5 0 1

1 0 4 2

0 1 2 4

A

και 1

1

2

0

1

b

Ο πίνακας Α1 τώρα είναι διαγώνια υπέρτερος αφού ισχύει , ,

1,

n

i i i j

j j i

a a

για

κάθε 1,2,3,4i .

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

συναρτήσεις

jacobi.m

function [x,k]=jacobi(a,b,x0,N,tol)

% Επαναληπτική μέθοδος jacobi

n=length(a);

x(1,:)=x0';

err=10;

k=1;

while ((k<=N)&&(err>=tol))

for i=1:n

sum=0;

for j=1:i-1

sum=sum+a(i,j)*x(k,j);

end

for j=i+1:n

sum=sum+a(i,j)*x(k,j);

end

x(k+1,i)=(b(i)-sum)/a(i,i);

end

err=norm((x(k+1,:)-x(k,:)),Inf);

k=k+1;

end

k=k-1;

x=x(k+1,:)';

end

gauss_seidel.m

function [x,k]=gauss_seidel(a,b,x0,N,tol)

% Επαναληπτική μέθοδος Gauss-Seidel

n=length(a);

x(1,:)=x0';

err=10;

k=1;

while ((k<=N)&&(err>=tol))

for i=1:n

sum=0;

for j=1:i-1

sum=sum+a(i,j)*x(k+1,j); % η μόνη διαφοροποίηση

% από την Jacobi

end

for j=i+1:n

sum=sum+a(i,j)*x(k,j);

end

x(k+1,i)=(b(i)-sum)/a(i,i);

end

err=norm((x(k+1,:)-x(k,:)),Inf);

k=k+1;

end

k=k-1;

x=x(k+1,:)';

end

SOR.m

function [x,k]=SOR(a,b,x0,omega,N,tol)

% Επαναληπτική μέθοδος S.O.R. (Successive Over Relaxation)

n=length(a);

x(1,:)=x0';

err=10;

k=1;

while ((k<=N)&&(err>=tol))

for i=1:n

sum=0;

for j=1:i-1

sum=sum+a(i,j)*x(k+1,j);

end

for j=i+1:n

sum=sum+a(i,j)*x(k,j);

end

x(k+1,i)=(1-omega)*x(k,i)+omega*(b(i)-sum)/a(i,i);

% Σταθμισμένος Μ.Ο. χρησιμοποιώντας τις προσεγγίσεις

% των Gauss-Seidel και Jacobi

end

err=norm((x(k+1,:)-x(k,:)),Inf);

k=k+1;

end

k=k-1;

x=x(k+1,:)';

end

'Ολες οι παραπάνω συναρτήσεις δέχονται ως είσοδο τους πίνακες a και b, τον πίνακα x0 ο οποίος περιέχει τις αρχικές προσεγγίσεις, τον μέγιστο αριθμό επαναλήψεων N της μεθόδου και την επιθυμητή ακρίβεια. Η S.O.R. δέχεται, επίσης, ως είσοδο και το ω, από το οποίο εξαρτάται η ταχύτητα σύγκλισης στη λύση και η ακρίβεια των προσεγγίσεων. Η κάθε συνάρτηση επιστρέφει την προσέγγιση της λύσης με την αντίστοιχη μέθοδο και τον αριθμό των επαναλήψεων που χρειάστηκαν. Για την επίλυση, λοιπόν, του συστήματος με όλες τις παραπάνω μεθόδους συντάσσουμε τον παρακάτω κώδικα ex4a.m

clear; clc; format long;

a=[8 -1 1 0; -1 5 0 1; 1 0 4 -2; 0 -1 -2 4];

b=[1 2 0 1]';

x0=[0 0 0 0]'; % αρχική προσέγγιση

N=50; % μέγιστος αριθμός επαναλήψεων

tol=1e-6; % ακρίβεια

omega=1.1; % ω ( μόνο για την S.O.R. )

disp('Λύση μεθόδου Jacobi')

[x1,k1]=jacobi(a,b,x0,N,tol) % κλήση συνάρτησης jacobi

disp('Λύση μεθόδου Gauss-Seidel')

[x2,k2]=gauss_seidel(a,b,x0,N,tol) % κλήση συνάρτησης

% gauss_seidel

disp('Λύση μεθόδου S.O.R.')

[x3,k3]=SOR(a,b,x0,omega,N,tol) % κλήση συνάρτησης SOR

Με την εκτέλεση του προγράμματος αυτού, παίρνουμε Λύση μεθόδου Jacobi

x1 =

0.146138125460885

0.344468039017405

0.175364511889264

0.423798885646905

k1 =

18

Λύση μεθόδου Gauss-Seidel

x2 =

0.146137878532443

0.344467696885896

0.175365227418371

0.423799537930660

k2 =

11

Λύση μεθόδου S.O.R.

x3 =

0.146137783427389

0.344467644338358

0.175365339000735

0.423799585079401

k3 =

8

Ερώτημα Β

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

επιλέγουμε την μέθοδο απαλοιφής κατά Gauss, με μερική οδήγηση. Για να μη

χάνονται σημαντικά ψηφία κατά τη διαίρεση με τα στοιχεία οδήγησης, είναι

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

στήλης. Σε αυτήν την περίπτωση, το μέτρο των τιμών των πολλαπλασιαστών

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

μετασχηματίσουμε τον πίνακα A, έτσι, ώστε τα μεγαλύτερα στοιχεία του πίνακα

να βρίσκονται στη διαγώνιο.

2 21 1

2 23 3

3 3

1

6 516

6 10

1 1 111 332 3 16 6 3 2 8

10 5 655 30 20 15 653 2 6

200 150 120 470100 23525 203 3

R RR RR R

R RR R

3 1 32 1 220

6

333386 3 2 6 3 28

716 4 3 13 0 1 18

20 15 12 47 20 15 12 47

R R RR R R

1

2

3

33 338 86 3 2 6 3 2

71 710 1 1 0 1 18 8

16 160 5 0 5133 1333 34 4

x

x

x

Έτσι το σύστημα τώρα γράφεται 2 2A x b , όπου

2

6 3 2

0 1 1

160 53

A

και 2

338

718

1334

b

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

είναι η παρακάτω

gauss_el.m

function x=gauss_el(a,b)

% Gauss elimination - Απαλοιφή κατά Gauss

n=length(a);

for k=1:n-1

for i=k+1:n

a(i,k)=a(i,k)/a(k,k);

for j=k+1:n

a(i,j)=a(i,j)-a(i,k)*a(k,j);

end

b(i)=b(i)-a(i,k)*b(k);

end

end

for i=n:-1:1

sum=0;

for j=i+1:n

sum=sum+a(i,j)*x(j);

end

x(i)=(b(i)-sum)/a(i,i);

end

x=x';

end

Επειδή, ο A είναι διαγώνια υπέρτερος, επιχειρούμε τη επίλυση του συστήματος

και με την S.O.R.

Έτσι, το πρόγραμμα είναι

ex4b.m

clear; clc; format long;

a=[6 3 2; 0 1 1; 0 5 16/3];

b=[33/8 71/8 133/4]';

x0=[0 0 0]'; % αρχική προσέγγιση ( μόνο για S.O.R )

tol=1e-14; % ακρίβεια ( μόνο για S.O.R )

N=100; % μέγιστος αριθμός επαναλήψεων ( μόνο για S.O.R )

omega=1.625; % ω ( μόνο για S.O.R. )

disp('Λύση μεθόδου S.O.R.')

[x_sor,k]=SOR(a,b,x0,omega,N,tol) % κλήση συνάρτησης SOR

disp('Λύση μεθόδου απαλοιφής Gauss')

x_gsp=gauss_el(a,b) % κλήση συνάρτησης gauss_el (gauss

% elimination)

Η εκτέλεση του παραπάνω κώδικα δίνει

Λύση μεθόδου S.O.R.

x_sor =

-9.312500000000007

42.250000000000007

-33.375000000000014

k =

76

Λύση μεθόδου απαλοιφής Gauss

x_gsp =

-9.312500000000005

42.250000000000028

-33.375000000000028

Ερώτημα Γ

Για να λύσουμε το παραπάνω κύκλωμα επιλέγουμε την μέθοδο των βρόχων. Το

κύκλωμα έχει τους τρεις βρόχους ABFGA, BCEFB, CDEC. Έστω ότι από αυτούς

διέρχονται τα ρεύματα J1, J2 και J3 αντίστοιχα.

Για τον βρόχο ABFGA έχουμε

1 1 2 12 5 3 15 0J J J J 1 210 5 15J J (5.3.1)

Για τον βρόχο BCEFB έχουμε

2 2 3 2 2 13 2 4 5 0J J J J J J 1 2 35 14 2 0J J J (5.3.2)

Για τον βρόχο ABFGA έχουμε

3 3 3 22 2 0J J J J 2 32 5 0J J (5.3.2)

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

J B

1

2

3

10 5 0 15

5 14 2 0

0 2 5 0

J

J

J

Παρατηρούμε ότι ο πίνακας Α είναι συμμετρικός, επομένως αν εφαρμόζαμε την

LU παραγοντοποίηση, θα συμπεραίναμε ότι ο πίνακας U είναι ο ανάστροφος του

πίνακα L. Για το λόγο αυτό, επιλύουμε το παραπάνω σύστημα με τη μέθοδο

Choleski ( LLT ) .

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

ex4c.m

clear; clc;

format short;

% Μέθοδος choleski ( A=LL' )

a=[10 -5 0; -5 14 -2; 0 -2 5];

b=[15 0 0]';

n=length(a);

l(1,1)=sqrt(a(1,1)); % 1ο στοιχείο 1ης στήλης

for j=2:n

l(j,1)=a(j,1)/l(1,1); % στοιχεία 1ης στήλης ( από γραμμή 2

% μέχρι n )

end

for i=2:(n-1)

sum=0;

for k=1:(i-1)

sum=sum+l(i,k)^2; % βοηθητικά αθροίσματα διαγώνιων

% στοιχείων

end

l(i,i)=sqrt(a(i,i)-sum); % διαγώνια στοιχεία

for j=(i+1):n

sum2=0;

for k=1:(i-1)

sum2=sum2+l(j,k)*l(i,k); % βοηθητικά αθροίσματα

% των υποδιαγώνιων στοιχείων

end

l(j,i)=(1/l(i,i))*(a(j,i)-sum2); % υποδιαγώνια

% στοιχεία

end

end

sum3=0;

for k=1:(n-1)

sum3=sum3+l(n,k)^2; % βοηθητικό άθροισμα τελευταίου

% στοιχείου

end

l(n,n)=sqrt(a(n,n)-sum3); % τελευταίο στοιχείο

l

% προς τα εμπρός αντικατάσταση Ly=b

y(1)=b(1)/l(1,1);

for i=2:n

sum=0;

for j=1:(i-1)

sum=sum+l(i,j)*y(j); % βοηθητικό άθροισμα για προς τα

% εμπρός αντικατάσταση

end

y(i)=(b(i)-sum)/l(i,i); % υπολογισμός των στοιχείων του y

end

% προς τα πίσω αντικατάσταση L'x=y

x(n)=y(n)/l(n,n);

for i=(n-1):-1:1

sum=0;

for j=(i+1):n

sum=sum+l(j,i)*x(j); % βοηθητικό άθροισμα για προς τα

% πίσω αντικατάσταση

end

x(i)=(y(i)-sum)/l(i,i); % υπολογισμός των στοιχείων του x

end

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

l =

3.1623 0 0

-1.5811 3.3912 0

0 -0.5898 2.1569

x =

1.8505 0.7009 0.2804

Έχουμε βρει ότι 1 1.8505J A , 2 0.7009J A , 3 0.2804J A , επομένως τα

ρεύματα σε κάθε κλάδο είναι

1 1.8505ABI J A

2 0.7009BCI J A

3 0.2804CDI J A

3 0.2804DFI J A

2 3 0.4206CEI J J A

2 0.7009EFI J A

1 2 1.1495BFI J J A

1 1.8505FGI J A

Θεωρώντας ως γείωση τον κόμβο F, 0FV , έχουμε

5 5.74775

BBF B BF B

VI V I V V

3 3.64493

B CBC C B BC C

V VI V V I V V

4 2.80374

EEF E EF E

VI V I V V

2 3.08422

C DCD D C CD D

V VI V V I V V

3 5.55143

GFG G FG G

VI V I V V

2 9.44862

A BAB A B AB A

V VI V V I V V

Υποεργασία 5

Ερώτημα Α

Να υπολογισθούν με τη μέθοδο προσδιοριστέων συντελεστών οι τιμές των

παραμέτρων 0 1 0 1, , ,a a b b του προσεγγιστικού τύπου

0

1

2

0 0 1 1 0 0 1 1

x

x

f x dx h a f a f h b f b f (5.1)

όπου ( )i if f x είναι η τιμή της παραγώγου της συνάρτησης f x στο σημείο x

και 0ix x ih , 0,1h .

Ερώτημα Β

Να υπολογισθεί το ολοκλήρωμα 3

2

0

sin( )

1

xe xI dx

x

με ακρίβεια εs=0.5% χρησιμοποιώντας τη μέθοδο ολοκλήρωσης Romberg. Τα αποτελέσματα να παρασταθούν γραφικά σε ένα σύστημα ορθογωνίων συντεταγμένων με κάθετο άξονα το αληθές ποσοστιαίο σχετικό σφάλμα και οριζόντιο άξονα τον αριθμό των διαστημάτων για τον υπολογισμό των ολοκληρωμάτων. Να υπολογισθεί η αναλυτική λύση και να χρησιμοποιηθεί για τον υπολογισμό του αληθούς σφάλματος εt του αποτελέσματος που προκύπτει από την ολοκλήρωση Romberg. Να ελεγχθεί αν το σφάλμα εt είναι μικρότερο από το κριτήριο τερματισμού εs.

Λύση Ερώτημα Α

Για 1f x , έχουμε 0f x , οπότε η (5.1) γράφεται

0

1

0 1

x

x

dx h a a 1 0 1ox x h a a (5.1.1)

Για f x x , έχουμε 1f x , οπότε η (5.1) γράφεται

0

1

2

0 0 1 1 0 1

x

x

xdx h x a x a h b b 2 2

20 10 0 1 1 0 1

2

x xh x a x a h b b

(5.1.2)

Για 2f x x , έχουμε 2f x x , οπότε η (5.1) γράφεται

0

1

2 2 2 2

0 0 1 1 0 0 1 12 2

x

x

x dx h x a x a h x b x b

3 3

2 2 20 10 0 1 1 0 0 1 12 2

3

x xh x a x a h x b x b

(5.1.3)

Για 3f x x , έχουμε 23f x x , οπότε η (5.1) γράφεται

0

1

3 3 3 2 2 2

0 0 1 1 0 0 0 13 3

x

x

x dx h x a x a h x b x b

4 4

3 3 2 2 20 10 0 1 1 0 0 0 13 3

4

x xh x a x a h x b x b

(5.1.4)

Για να βρούμε τώρα τους συντελεστές 0 1 0 1, , ,a a b b αρκεί να λύσουμε το σύστημα

των εξισώσεων (5.1.1), (5.1.2), (5.1.3), (5.1.4).

Κάνοντας την αντικατάσταση 1 0x x h και μετά από πράξεις καταλήγουμε στο

σύστημα

0 1

0 0 1

0 1

1 1

1

1

2

3 6 2

13

4

a a

a b b

a b

a b

0

1

0

1

1

2

1

2

1

12

1

12

a

a

b

b

Έτσι ο προσεγγιστικός τύπος κάνοντας αντικατάσταση γράφεται

0

1

2

0 1 0 12 12

x

x

h hf x dx f f f f

Ερώτημα Β

Η έκφραση της μεθόδου Romberg σε κώδικα MATLAB είναι η παρακάτω

ex5b.m

clear; clc;

format long;

f = @(x) (exp(x).*sin(x))./(1+(x.^2));

I = integral(f,0,3);

% I = 2.881637273055190

% fun=inline('(exp(x)*sin(x))/(1+(x^2))');

a=0.0;

b=3.0;

n=4; % αριθμός διαστημάτων

m=zeros(1,n);

err=zeros(1,n);

Q=zeros(n,n);

R=zeros(n,n);

h=b-a;

Q(1,1)=h*(f(a)+f(b))/2; % 1η προσέγγιση τραπεζίου ||

% m = 1 = 2^(i-1) || i = 1

R(1,1)=Q(1,1);

m(1)=1;

err(1)=abs((I-Q(1,1))/I);

for i=2:n % αριθμός προσέγγισης

sum=0.0;

m(i)=2^(i-1); % αριθμός διαστημάτων ||

% i = 2,...,n προσέγγιση

for k=1:2^(i-2)

sum=sum+f(a+(k-0.5)*h);

end

Q(2,1)=0.5*(Q(1,1)+h*sum); % 2η προσέγγιση τραπεζίου

for j=2:i

Q(2,j)=((4^(j-1))*Q(2,j-1)-Q(1,j-1))/((4^(j-1))-1);

% Εφαρμογή προεκβολής Richardson

end

h=h/2;

for j=1:i

R(i,j)=Q(2,j);

Q(1,j)=Q(2,j);

end

err(i)= abs((I - R(i,i))/I);

if ( err(i) < 0.5/100 )

break;

end

end

R

plot (m(1:i),100*err(1:i));

xlabel('Αριθμός διαστημάτων ( m )');

ylabel('Ποσοστιαίο Σχετικό Σφάλμα ( 100*err )');

Αρχικά, δηλώνουμε την ολοκληρωτέα συνάρτηση

2

sin( )

1

xe xf x

x

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

συνάρτηση integral ( ) του MATLAB, έτσι ώστε να υπολογίσουμε την

αναλυτική λύση του ολοκληρώματος

3

0

I f x dx

Στη συνέχεια, δημιουργούμε τους πίνακες (1 x n) err και m, στους οποίους θα

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

την κάθε προσέγγιση, έτσι ώστε να μπορούμε να τα αναπαραστήσουμε γραφικά

μετά την εφαρμογή της μεθόδου.

Καλώντας το πρόγραμμα ex5b.m παίρνουμε

R =

0.425170669873051 0 0 0

2.275875663789020 2.892777328427676 0 0

0 0 0 0

0 0 0 0

και εμφανίζεται και το παρακάτω γράφημα

Υποεργασία 6

Ερώτημα Α

Να μελετηθεί η ευστάθεια της μεθόδου

1 1 1 14 5 2 , 2 ,i i i i i i iy y y h f x y hf x y , 1,2,..., 1i n

με αρχικές τιμές 0y , 1y .

Ερώτημα B

Ένα σώμα μάζας m=0.11kg που έχει εκτοξευθεί κατακόρυφα (προς τα άνω) με αρχική ταχύτητα v(0)=8m/sec χάνει ταχύτητα εξαιτίας της δύναμης βαρύτητας Fg=-mg και της αντίστασης του αέρα Fr=-kv2, όπου g=9.81m/sec2 και k=0.002kg/m. Η διαφορική εξίσωση της ταχύτητας ορίζεται ως

2mv mg kv (6.2)

Να υπολογισθεί η ταχύτητα μετά από 0.1, 0.2, …, 1.0 sec χρησιμοποιώντας τη μέθοδο Taylor δευτέρας και τετάρτης τάξης. Να υπολογισθεί επίσης με ακρίβεια δεκάτου του sec ο χρόνος στον οποίο το σώμα φθάνει στο μέγιστο ύψος και αρχίζει να κατέρχεται χρησιμοποιώντας τη μέθοδο Taylor τετάρτης τάξης.

Ερώτημα Γ

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

2 2 sinxy y y e x , 0 1x , (0) 0.4y , (0) 0.6y (6.3)

με χρήση της μεθόδου Runge-Kutta τετάρτης τάξης με βήμα h=0.1. Να

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

συστήματος.

1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 20

10

20

30

40

50

60

70

80

90

Αριθμός διαστημάτων ( m )

Ποσ

οσ

τια

ίο Σ

χετ

ικό Σ

φά

λμ

α (

100*e

rr )

Λύση

Ερώτημα Α

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

χαρακτηριστικό της πολυώνυμο

2 4 5 0 1 5 0z z z z

το οποίο έχει δύο απλές ρίζες, 1 1z και 2 5z .

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

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

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

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

Ερώτημα Β

Για ευκολία, θέτουμε k

Am

, έτσι η σχέση (6.2) γράφεται

2dvg Av f v

dt (6.2.1)

Υπολογίζουμε τις παραγώγους της f

2dv

f v Avdt

(6.2.1)

2 32 2f v Avg A v (6.2.2)

2 22 6dv dv

f v Ag A vdt dt

(6.2.1)

2 2 2 3 42 8 6f v Ag A gv A v (6.2.3)

2 3 316 24dv dv

f v A gv A vdt dt

(6.2.1)

2 2 3 3 4 516 40 24f v A g v A gv A v (6.2.4)

Γνωρίζουμε ότι για την μέθοδο Taylor δευτέρας και τετάρτης τάξης οι τελεστές

είναι αντίστοιχα

22

i i

hT f f

42 3! 4!

i i i i

h h hT f f f f

Αντικαθιστώντας τις παραγώγους από τις σχέσεις (6.2.2), (6.2.3), (6.2.4) οι

τελεστές γράφονται 2 2 3

2 i i iT g Ahgv Av A hv

2 2 2 2 2 2 2 3 3 3 3 3 2 4 4 3 5

4 2

14 2 5

3T T Ah g A h v g A g vh A gv h A h v A h v

Στη συνέχεια, καλούμε το πρόγραμμα T2_T4.m

clear;

clc;

syms T2(v,h,g,A)

syms T4(v,h,g,A)

T2(v,h,g,A)=-g-h*A*g*v+A*(v^2)+h*(A^2)*(v^3);

T4(v,h,g,A)=T2(v,h,g,A)+(1/3)*(h^2)*A*(g^2)

+(2/3)*(h^3)*(A^2)*(g^2)*v

-(4/3)*(h^2)*(A^2)*g*(v^2)

-(5/3)*(h^3)*(A^3)*g*(v^3)

+(h^2)*(A^3)*(v^4)

+(A^4)*(h^3)*(v^5);

k=0.002;

m=0.11;

A=-k/m;

h=0.1;

g=9.81;

T2(v,h,g,A)

T4(v,h,g,A)

και παίρνουμε πολυώνυμα T2(v) και T4(v) ans =

v^3/30250 - v^2/55 + (981*v)/55000 - 981/100

ans =

v^5/9150625000 - v^4/16637500 + (110327*v^3)/3327500000 -

(137827*v^2)/7562500 + (270095787*v)/15125000000 -

539870787/55000000

Έτσι ο κώδικας για το ερώτημα Β είναι

ex6b.m

clear; clc; format long;

a=0.0; b=1.0;

h=0.1; t=a:h:b; N=(b-a)/h;

v2=zeros(N+1,1);

v4=zeros(N+1,1);

v0=8.0;

v2(1)=v0;

v4(1)=v0;

for i=1:N

v2(i+1)=v2(i)+h*(-981/100+(981/55000)*v2(i)

-(1/55)*(v2(i)^2)

+(1/30250)*(v2(i)^3));

v4(i+1)=v4(i)+h*(-539870787/55000000

+(270095787/15125000000)*v4(i)

-(137827/7562500)*(v4(i)^2)

+(110327/3327500000)*(v4(i)^3)

-(1/16637500)*(v4(i)^4)

+(1/9150625000)*(v4(i)^5));

end

disp('Προσεγγίσεις με μέθοδο Taylor 2ης τάξης');

disp('v2=');

disp(v2);

disp('Προσεγγίσεις με μέθοδο Taylor 4ης τάξης');

disp('v4=');

disp(v4);

[k,l]=min(v4(v4>0));

disp(['Ο χρόνος (με ακρίβεια δεκάτου του sec) στον οποίο το

σώμα φτάνει στο μέγιστο ύψος είναι t=' num2str(t(l)) '

seconds.']);

Εκτελώντας το παραπάνω πρόγραμμα, εμφανίζονται στο παραθύρο εντολών του MATLAB τα παρακάτω αποτελέσματα Προσεγγίσεις με μέθοδο Taylor 2ης τάξης

v2=

8.000000000000000

6.918598016528925

5.864002158340236

4.831607045208235

3.817153326285394

2.816653494168475

1.826326638362889

0.842539789599583

-0.138246127337295

-1.119527465967416

-2.104807737556353

Προσεγγίσεις με μέθοδο Taylor 4ης τάξης

v4=

8.000000000000000

6.917735771337531

5.862373818143200

4.829285500113885

3.814191897858181

2.813088663503036

1.822180002369149

0.837819379938648

-0.143545072253839

-1.125422220884309

-2.111328277312810

Ο χρόνος (με ακρίβεια δεκάτου του sec) στον οποίο το σώμα

φτάνει στο μέγιστο ύψος είναι t=0.7 seconds.

Ερώτημα Γ Για να λύσουμε την διαφορική εξίσωση (6.3), αρχικά θέτουμε

y z

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

2 2 sinxz z y e x 2 2 sinxz z y e x

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

, ,

y z

z f x y z

, όπου , , 2 sin 2xf x y z y e x z

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

πρόγραμμα, που χρησιμοποιεί την μέθοδο Runge –Kutta τετάρτης τάξης.

ex6c.m

clear; clc; format long;

% 0 <= x <= 1

a=0; b=1;

h=0.1;

N=(b-a)/h;

% Αρχικοποίηση πινάκων x,y,z

x=zeros(N+1,1);

y=zeros(N+1,1);

z=zeros(N+1,1);

% Αρχικές τιμές

x(1)=a;

y(1)=-0.4;

z(1)=-0.6;

% z' = f(x,y,z)

f=inline('exp(2*x).*sin(x)-2*y+2*z','x','y','z');

% Αναλυτική λύση

an=inline('exp(-x).*((-0.275-0.125*exp(2*x)).*cos(x)+

(-0.875+0.125*exp(2*x)).*sin(x))','x');

% Εφαρμογή Runge-Kutta 4ης τάξης και στις δύο διαφορικές

% εξισώσεις, ταυτόχρονα.

for i=1:N

k1=z(i);

l1=f(x(i),y(i),z(i));

k2=z(i)+0.5*h*l1;

l2=f(x(i)+0.5*h,y(i)+0.5*k1*h,z(i)+0.5*l1*h);

k3=z(i)+0.5*h*l2;

l3=f(x(i)+0.5*h,y(i)+0.5*k2*h,z(i)+0.5*l2*h);

k4=z(i)+h*l3;

l4=f(x(i)+h,y(i)+k3*h,z(i)+l3*h);

y(i+1)=y(i)+1/6*h*(k1+2*k2+2*k3+k4);

z(i+1)=z(i)+1/6*h*(l1+2*l2+2*l3+l4);

x(i+1)=x(i)+h;

end

% Υπολογισμός απόλυτου σφάλματος σε όλες τις προσεγγίσεις

err(1:N+1,1)=abs(y(1:length(y))-an(x(1:length(x))));

% Εμφάνιση των προσεγγίσεων και των αντίστοιχων σφαλμάτων

disp([blanks(11) 'y' blanks(16) 'Σφάλμα']);

disp([y err]);

Καλώντας το πρόγραμμα ex6c.m έχουμε τις ζητούμενες προσεγγιστικές λύσεις μαζί με το σφάλμα για την κάθε μια y Σφάλμα

-0.400000000000000 0

-0.461733342331310 0.011440198028110

-0.525559883217461 0.043272256639725

-0.588601435615746 0.091082237160140

-0.646612306037991 0.149280492099894

-0.693566655301434 0.210695208134700

-0.721151899069588 0.266065808090714

-0.718152951796747 0.303421473938629

-0.669711326630554 0.307329182929746

-0.556442902505388 0.257995371137531

-0.353398860447972 0.130205957314105