T = 425 K P = 1, 10, 20, 30, 40 atm A = , B = , a = , b = , c =

Σχετικά έγγραφα
T = 425 K P = 1, 10, 20, 30, 40 atm A = , B = , a = , b = , c =

i. Επιλύστε με απαλοιφή Gauss μερικής οδήγησης το σύστημα:

Παράδειγμα #3 ΡΙΖΕΣ ΕΞΙΣΩΣΕΩΝ ΕΠΙΜΕΛΕΙΑ: ΓΙΑΝΝΗΣ ΛΥΧΝΑΡΟΠΟΥΛΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

Παράδειγμα #4 EΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΜΕΘΟΔΟΥΣ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

Παράδειγμα #4 ΑΛΓΕΒΡΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΞΙΣΩΣΕΩΝ

ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ. Σταυράκης

ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, , 3 ο ΕΞΑΜΗΝΟ ΑΠΑΝΤΗΣΕΙΣ ΕΡΓΑΣΙΑΣ #1: ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟ ΙΑΣΤΟΛΗΣ ΚΑΙ ΡΙΖΕΣ ΕΞΙΣΩΣΕΩΝ ΕΠΙΜΕΛΕΙΑ: Σ.

Παράδειγμα #5 EΠΙΛΥΣΗ ΜΗ ΓΡΑΜΜΙΚΩΝ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΜΕΘΟΔΟ NEWTON ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης. ( k ) ( k)

Παράδειγμα #5 ΕΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ & ΜΗ ΓΡΑΜΜΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΠΙΜΕΛΕΙΑ: Σ. Βαρούτης

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, , 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #5: ΥΠΕΡΒΟΛΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: ΕΠΙΜΕΛΕΙΑ: Ιωάννης Λυχναρόπουλος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

πεπερασμένη ή Η αναλυτική λύση της διαφορικής εξίσωσης δίνεται με τη βοήθεια του Mathematica: DSolve u'' r 1 u' r 1, u 1 0, u' 0 0,u r,r

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

Παράδειγμα #9 ΠΡΟΒΛΗΜΑΤΑ ΔΥΟ ΟΡΙΑΚΩΝ ΤΙΜΩΝ ΕΛΛΕΙΠΤΙΚΕΣ ΣΔΕ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης

Παράδειγμα #3 EΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΑΠΕΥΘΕΙΑΣ ΜΕΘΟΔΟΥΣ Επιμέλεια: Ν. Βασιλειάδης

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Επιλύστε αριθμητικά το με τη μέθοδο των πεπερασμένων διαφορών το παρακάτω πρόβλημα δύο οριακών τιμών:

Εργαστήριο 2 - Απαντήσεις. Επίλυση Γραμμικών Συστημάτων

Ειδικά θέματα στην επίλυση

Αριθμητική Ανάλυση Εργασία #1

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

5269: Υπολογιστικές Μέθοδοι για Μηχανικούς. Εύρεση Ριζών.

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Oι εντολές COMMON και PARAMETER

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 6)

Άσκηση εφαρμογής της μεθόδου Newton Raphson

ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ. Σταυράκης

Εφαρµόζοντας τη µέθοδο αριθµητικής ολοκλήρωσης Euler και Runge-Kutta 2 ης, συστηµατική σύγκριση των πέντε µεθόδων. Η επιλογή των σταθερών

ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 2004, 3 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #5: ΑΡΙΘΜΗΤΙΚΗ ΟΛΟΚΛΗΡΩΣΗ

Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος

Matrix Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι. Αλγόριθμοι» Γ. Καούρη Β. Μήτσου

Μάθημα Επιλογής 8 ου εξαμήνου

ΘΕΜΑ 2ο. Άσκηση εφαρµογής της µεθόδου Newton Raphson

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

Β ΜΕΡΟΣ: ΕΦΑΡΜΟΓΗ ΤΟΥ MATLAB ΣΤΗΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ

Κεφ. 2: Επίλυση συστημάτων αλγεβρικών εξισώσεων. 2.1 Επίλυση απλών εξισώσεων

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ

Κεφ. 2: Επίλυση συστημάτων εξισώσεων. 2.1 Επίλυση εξισώσεων

Άσκηση 1. Δίδεται η διαφορική εξίσωση dy. Λύση. Έχουμε dy

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

(συνθήκη συμμετρίας) (4) Το παραπάνω πρόβλημα μπορεί να περιγράψει τη μεταβατική πλήρως ανεπτυγμένη ροή σε κυλινδρικό αγωγό.

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 5)

ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 2004, 3 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #4: ΠΑΡΕΜΒΟΛΗ

x από το κεντρικό σημείο i: Ξεκινάμε από το ανάπτυγμα Taylor στην x κατεύθυνση για απόσταση i j. Υπολογίζουμε το άθροισμα:

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Πίνακες. FORTRAN και Αντικειμενοστραφής Προγραμματισμός

5269: Υπολογιστικές Μέθοδοι για Μηχανικούς Συστήματα Γραμμικών Αλγεβρικών Εξισώσεων

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

5269: Υπολογιστικές Μέθοδοι για Μηχανικούς Συστήματα Γραμμικών Αλγεβρικών Εξισώσεων

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

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

ΜΕΜ251 Αριθμητική Ανάλυση

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Μορφοποίηση της εξόδου

Εισαγωγή στη Fortran. Μάθημα 3 ο. Ελευθερία Λιούκα

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Ενότητα 1 Διάλεξη 4. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Ασκήσεις Γενικά Μαθηµατικά Ι Οµάδα 5 (λύσεις)

Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος

Εισαγωγή στον Προγραμματισμό Η/Υ (Fortran 90/95/2003)

Υπολογιστικά Μαθηματικά

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

ΚΩ ΙΚΑΣ ΕΠΙΛΥΣΗΣ ΜΕΤΑΦΟΡΑΣ ΘΕΡΜΟΤΗΤΑΣ ΜΕ ΑΚΤΙΝΟΒΟΛΙΑ ΣΕ ΚΛΕΙΣΤΕΣ ΚΟΙΛΟΤΗΤΕΣ ΜΕ ΙΑΧΥΤΙΚΕΣ ΚΑΙ ΓΚΡΙΖΕΣ ΕΠΙΦΑΝΕΙΕΣ

Κεφ. 2: Επίλυση συστημάτων αλγεβρικών εξισώσεων. 2.1 Επίλυση απλών εξισώσεων

Παράδειγμα #10 ΠΡΟΒΛΗΜΑΤΑ ΟΡΙΑΚΩΝ ΤΙΜΩΝ ΕΛΛΕΙΠΤΙΚΕΣ ΜΔΕ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης

Οι παρακάτω ασκήσεις είναι από το βιβλίο των S. C. Chapra και R. P. Canale με τίτλο Numerical Methods for Engineers, 6 th edition.

ΚΕΦΑΛΑΙΟ 3 ΑΡΙΘΜΗΤΙΚΗ ΕΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. nn n n

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

διακριτοποίηση αριθµητική παραγώγιση

Παρουσίαση 3ης Άσκησης

την κεντρώα έκφραση πεπερασμένων διαφορών 2 ης τάξης και για τη παράγωγο f την ανάδρομη έκφραση πεπερασμένων διαφορών 2 ης τάξης xxx

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

0.5, Μεταφορά θερμότητας ανάμεσα σε κυλίνδρους μεγάλου μήκους (χωρίς ασπίδα):

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

ΦΥΣ 145 Λύσεις Ενδιάμεσης Εξέτασης Χ. Παναγόπουλος 12/3/2015

Κεφ. 6Α: Συνήθεις διαφορικές εξισώσεις - προβλήματα δύο οριακών τιμών

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, , 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #3: ΕΛΛΕΙΠΤΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: ΔΙΔΑΣΚΩΝ: Δ.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας

Παράδειγμα #1 ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης

Τμήμα Φυσικής Πανεπιστημίου Κύπρου Εαρινό Εξάμηνο 2015/2016. ΦΥΣ145 Υπολογιστικές Μέθοδοι στην Φυσική

y 1 και με οριακές συνθήκες w

8 FORTRAN 77/90/95/2003

Αριθμητική Ανάλυση και Εφαρμογές

1. ΕΙΣΑΓΩΓΗ. 1.1 Τι είναι η αριθµητική ανάλυση

ιαφάνειες παρουσίασης #6

ΦΥΣ 145 Υπολογιστικές Μέθοδοι στη Φυσική. Πρόοδος 26 Μαρτίου 2007 Ομάδα 1 η

Παράδειγμα #1 ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ ΕΠΙΜΕΛΕΙΑ: Ι. Λυχναρόπουλος

Ενότητα 4. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Κεφάλαιο 5ο: Εντολές Επανάληψης

w 1, z = 2 και r = 1

Αριθμητική Λύση Μη Γραμμικών Εξισώσεων Η ΜΕΘΟ ΟΣ ΤΗΣ ΙΧΟΤΟΜΙΣΗΣ 01/25/05 ΜΜΕ 203 ΙΑΛ 2 1

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

f στον κόμβο i ενός πλέγματος ( i = 1, 2,,N

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Transcript:

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, 2012-2013, 5 Ο ΕΞΑΜΗΝΟ Απαντήσεις ΕΡΓΑΣΙΑΣ #1: ΡΙΖΕΣ ΕΞΙΣΩΣΕΩΝ και ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΩΝ ΕΞΙΣΩΣΕΩΝ Ημερομηνία παράδοσης 30-10-2012 Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος ΑΣΚΗΣΗ 1 Να υπολογισθεί με τις μεθόδους α) διχοτόμησης, β) απλών επαναλήψεων και γ) Newton ο ειδικός όγκος του n-βουτανίου σε δεδομένη θερμοκρασία και πίεση με την καταστατική εξίσωση πραγματικών αερίων Beattie Bridgeman: PV = RT + β/v + γ/(v 2 ) + δ/(v 3 ) (1) όπου β = RTB A Rc/(T 2 ), γ = -RTBb + aa RBc/(T 2 ), δ = RBbc/(T 2 ) και A, B, a, b, c καθορίζονται πειραματικά για κάθε αέριο. T = 425 K P = 1, 10, 20, 30, 40 atm A = 17.7940, B = 0.2462, a = 0.12161, b = 0.09423, c = 3.500.000 Οι μονάδες των σταθερών είναι P = atm, V = lt/mol, T = Kelvin και R = 0.08206 (lt.atm)/(mol.k) Να σχολιασθούν τα αποτελέσματα σε σχέση με τη σύγκλιση και την αποτελεσματικότητα των τριών διαφορετικών μεθόδων. Λύση Με το Mathematica κάνουμε τις γραφικές παραστάσεις της εξίσωσης (1) για κάθε περίπτωση της πίεσης P με σκοπό να προσδιορίσουμε περίπου το διάστημα εντός του οποίου βρίσκονται οι ρίζες της (1): T=425; P=40; A=17.7940; B=0.2462; a=0.12161; b=0.09423; c=3500000; R=0.08206; beta=r T B - A -R c / T 2 ; gama=-r T B b + a A - R B c/t 2 ; delta=r B b c/t 2 ; Plot[ R T + beta/v+gama/v 2 +delta/v 3 -P V,{V,0.1,1},AxesOrigin{0,0}] Στα γραφήματα που ακολουθούν ο οριζόντιος άξονας είναι το V και ο κάθετος το P. 1

60 50 40 30 20 10 10 20 30 40 P=1 atm: Βλέπουμε ότι η ρίζα βρίσκεται ανάμεσα στο 30 και 40. 60 40 20-20 2 4 6 8 10-40 -60 P=10 atm: Βλέπουμε ότι η ρίζα βρίσκεται ανάμεσα στο 2 και 4. 60 40 20-20 1 2 3 4 5-40 -60 P=20 atm: Βλέπουμε ότι η ρίζα βρίσκεται ανάμεσα στο 1 και 2. 2

40 20 0.5 1.0 1.5 2.0-20 P=30 atm: Βλέπουμε ότι η ρίζα βρίσκεται ανάμεσα στο 0.5 και 1. 10 5 0.2 0.4 0.6 0.8 1.0-5 -10-15 P=40 atm: Βλέπουμε ότι η ρίζα βρίσκεται ανάμεσα στο 0.2 και 0.4. Α. Μέθοδος Διχοτόμησης Πρόγραμμα FORTRAN που επιλύει με την μέθοδο της διχοτόμησης το συγκεκριμένο πρόβλημα: program askhsh1_bisection implicit none real::t,p(5),aa,bb,a,b,c,beta,gama,delta,r,x,xl,xr integer::k T=425 P=(/1,10,20,30,40/) R=0.08206 AA=17.7940 BB=0.2462 a=0.12161 b=0.09423 c=3500000 beta=r*t*bb-aa-r*c/t**2 gama=-r*t*bb*b+a*aa-r*bb*c/t**2 delta=r*bb*b*c/t**2!print*,beta,gama,delta print*, 'Enter k=1-5 for item of the Pressure array' 3

read*,k print*, ' Enter xl:' read*, xl print*, ' Enter xr:' read*, xr x=bisection(xl,xr,1e-4) print*,'root Found: ', x contains real function bisection(xl,xr,err) real::xl,xr,err real::xm integer::i,maxi=10000 if (f(xl)*f(xr) > 0) then print*, 'Not valid values for xl and xr' stop else open(10,file='results.txt') i=0 do while (i<maxi) i=i+1 xm=(xl+xr)/2. write(10,'(i3,",",3(f9.6,","),3(e12.3,:,","))') i,xl,xm,xr,f(xl),f(xm),f(xr) write(*,'(i3,2x,3(f9.6,2x),3(e12.3,2x))') i,xl,xm,xr,f(xl),f(xm),f(xr) if (abs(f(xm))<err) then bisection=xm return else if (f(xl)*f(xm)<0) then xr=xm else xl=xm end if end if close(10) end if end function real function f(x) real::x f= R*T+beta/x+gama/x**2+delta/x**3-P(k)*x end function end program 4

Πίνακες αποτελεσμάτων με τερματισμό διχοτομήσεων όταν το απόλυτο σφάλμα είναι μικρότερο του 10-4 P=1, 30< V<40: n xl xm xr f(xl) f(xm) f(xr) 1 30 35 40 4.52E+00 4.32E 01 5.39E+00 2 30 32.5 35 4.52E+00 2.04E+00 4.32E 01 3 32.5 33.75 35 2.04E+00 8.06E 01 4.32E 01 4 33.75 34.375 35 8.06E 01 1.87E 01 4.32E 01 5 34.375 34.6875 35 1.87E 01 1.22E 01 4.32E 01 6 34.375 34.53125 34.6875 1.87E 01 3.24E 02 1.22E 01 7 34.53125 34.60938 34.6875 3.24E 02 4.51E 02 1.22E 01 8 34.53125 34.57031 34.60938 3.24E 02 6.35E 03 4.51E 02 9 34.53125 34.55078 34.57031 3.24E 02 1.30E 02 6.35E 03 10 34.55078 34.56055 34.57031 1.30E 02 3.33E 03 6.35E 03 11 34.56055 34.56543 34.57031 3.33E 03 1.51E 03 6.35E 03 12 34.56055 34.56299 34.56543 3.33E 03 9.12E 04 1.51E 03 13 34.56299 34.56421 34.56543 9.12E 04 2.98E 04 1.51E 03 14 34.56299 34.5636 34.56421 9.12E 04 3.07E 04 2.98E 04 15 34.5636 34.5639 34.56421 3.07E 04 4.84E 06 2.98E 04 Μετά από 15 διχοτομήσεις προκύπτει V =34.5639 lt/mol P=10, 2<V<4: n xl xm xr f(xl) f(xm) f(xr) 1 2 3 4 9.72E+00 1.38E+00 7.76E+00 2 3 3.5 4 1.38E+00 3.13E+00 7.76E+00 3 3 3.25 3.5 1.38E+00 8.55E 01 3.13E+00 4 3 3.125 3.25 1.38E+00 2.70E 01 8.55E 01 5 3.125 3.1875 3.25 2.70E 01 2.91E 01 8.55E 01 6 3.125 3.15625 3.1875 2.70E 01 1.02E 02 2.91E 01 7 3.125 3.140625 3.15625 2.70E 01 1.30E 01 1.02E 02 8 3.140625 3.148438 3.15625 1.30E 01 5.99E 02 1.02E 02 9 3.148438 3.152344 3.15625 5.99E 02 2.49E 02 1.02E 02 10 3.152344 3.154297 3.15625 2.49E 02 7.35E 03 1.02E 02 11 3.154297 3.155273 3.15625 7.35E 03 1.42E 03 1.02E 02 12 3.154297 3.154785 3.155273 7.35E 03 2.96E 03 1.42E 03 13 3.154785 3.155029 3.155273 2.96E 03 7.71E 04 1.42E 03 14 3.155029 3.155151 3.155273 7.71E 04 3.25E 04 1.42E 03 15 3.155029 3.15509 3.155151 7.71E 04 2.23E 04 3.25E 04 16 3.15509 3.155121 3.155151 2.23E 04 5.13E 05 3.25E 04 Μετά από 16 διχοτομήσεις προκύπτει V =3.155121 lt/mol 5

P=20, 1<V<2: n xl xm xr f(xl) f(xm) f(xr) 1 1 1.5 2 5.08E+00 1.88E+00 1.03E+01 2 1 1.25 1.5 5.08E+00 1.87E+00 1.88E+00 3 1.25 1.375 1.5 1.87E+00 4.63E 02 1.88E+00 4 1.375 1.4375 1.5 4.63E 02 9.07E 01 1.88E+00 5 1.375 1.40625 1.4375 4.63E 02 4.27E 01 9.07E 01 6 1.375 1.390625 1.40625 4.63E 02 1.90E 01 4.27E 01 7 1.375 1.382813 1.390625 4.63E 02 7.15E 02 1.90E 01 8 1.375 1.378906 1.382813 4.63E 02 1.26E 02 7.15E 02 9 1.375 1.376953 1.378906 4.63E 02 1.69E 02 1.26E 02 10 1.376953 1.37793 1.378906 1.69E 02 2.18E 03 1.26E 02 11 1.37793 1.378418 1.378906 2.18E 03 5.19E 03 1.26E 02 12 1.37793 1.378174 1.378418 2.18E 03 1.50E 03 5.19E 03 13 1.37793 1.378052 1.378174 2.18E 03 3.38E 04 1.50E 03 14 1.378052 1.378113 1.378174 3.38E 04 5.82E 04 1.50E 03 15 1.378052 1.378082 1.378113 3.38E 04 1.22E 04 5.82E 04 16 1.378052 1.378067 1.378082 3.38E 04 1.08E 04 1.22E 04 17 1.378067 1.378075 1.378082 1.08E 04 6.75E 06 1.22E 04 Μετά από 17 διχοτομήσεις προκύπτει V =1.378075 lt/mol P=30, 0.5<V<1: n xl xm xr f(xl) f(xm) f(xr) 1 0.5 0.75 1 2.43E+00 2.21E 01 4.92E+00 2 0.5 0.625 0.75 2.43E+00 1.47E+00 2.21E 01 3 0.625 0.6875 0.75 1.47E+00 6.96E 01 2.21E 01 4 0.6875 0.71875 0.75 6.96E 01 2.54E 01 2.21E 01 5 0.71875 0.734375 0.75 2.54E 01 2.04E 02 2.21E 01 6 0.734375 0.742188 0.75 2.04E 02 9.96E 02 2.21E 01 7 0.734375 0.738281 0.742188 2.04E 02 3.93E 02 9.96E 02 8 0.734375 0.736328 0.738281 2.04E 02 9.43E 03 3.93E 02 9 0.734375 0.735352 0.736328 2.04E 02 5.49E 03 9.43E 03 10 0.735352 0.73584 0.736328 5.49E 03 1.97E 03 9.43E 03 11 0.735352 0.735596 0.73584 5.49E 03 1.76E 03 1.97E 03 12 0.735596 0.735718 0.73584 1.76E 03 1.01E 04 1.97E 03 13 0.735596 0.735657 0.735718 1.76E 03 8.32E 04 1.01E 04 14 0.735657 0.735687 0.735718 8.32E 04 3.65E 04 1.01E 04 15 0.735687 0.735703 0.735718 3.65E 04 1.32E 04 1.01E 04 16 0.735703 0.73571 0.735718 1.32E 04 1.60E 05 1.01E 04 Μετά από 16 διχοτομήσεις προκύπτει V =0.73571 lt/mol 6

P=40, 0.2<V<0.4: n xl xm xr f(xl) f(xm) f(xr) 1 0.2 0.3 0.4 1.58E+00 1.05E+00 1.52E+00 2 0.2 0.25 0.3 1.58E+00 5.41E 01 1.05E+00 3 0.2 0.225 0.25 1.58E+00 1.53E 01 5.41E 01 4 0.225 0.2375 0.25 1.53E 01 2.56E 01 5.41E 01 5 0.225 0.23125 0.2375 1.53E 01 6.99E 02 2.56E 01 6 0.225 0.228125 0.23125 1.53E 01 3.67E 02 6.99E 02 7 0.228125 0.229687 0.23125 3.67E 02 1.78E 02 6.99E 02 8 0.228125 0.228906 0.229687 3.67E 02 9.14E 03 1.78E 02 9 0.228906 0.229297 0.229687 9.14E 03 4.40E 03 1.78E 02 10 0.228906 0.229102 0.229297 9.14E 03 2.35E 03 4.40E 03 11 0.229102 0.229199 0.229297 2.35E 03 1.03E 03 4.40E 03 12 0.229102 0.22915 0.229199 2.35E 03 6.60E 04 1.03E 03 13 0.22915 0.229175 0.229199 6.60E 04 1.88E 04 1.03E 03 14 0.22915 0.229163 0.229175 6.60E 04 2.35E 04 1.88E 04 15 0.229163 0.229169 0.229175 2.35E 04 2.61E 05 1.88E 04 Μετά από 15 διχοτομήσεις προκύπτει V =0.229169 lt/mol B. Μέθοδος Απλών Επαναλήψεων Γράφουμε την αρχική εξίσωση PV = RT + β/v + γ/(v 2 ) + δ/(v 3 ) στη μορφή 2 3 V RT / V / V / V / P f( V), 2 3 4 f '( V) / V 2 / V 3 / V / P Επαναληπτικός αλγόριθμος: n 1 n n n 2 3 V RT / V / / V V / P f( V), n 1,2,... Πρόγραμμα FORTRAN που επιλύει με την μέθοδο των απλών επαναλήψεων το συγκεκριμένο πρόβλημα: program Askhsh1_2!Aplh epanaliptikh implicit none real::t,p(5),aa,bb,a,b,c,beta,gama,delta,r,x0 integer::k T=425 P=(/1,10,20,30,40/) R=0.08206 AA=17.7940 BB=0.2462 a=0.12161 b=0.09423 c=3500000 7

beta=r*t*bb-aa-r*c/t**2 gama=-r*t*bb*b+a*aa-r*bb*c/t**2 delta=r*bb*b*c/t**2!print*,beta,gama,delta print*, 'Enter k=1-5 for item of the Pressure array' read*,k print*, 'Enter initial guess x0:' read*, x0 call aplh_epanaliptikh(x0,1e-6) contains subroutine aplh_epanaliptikh(x0,err) real,intent(in)::x0,err real::x,abserr,xold integer:: i,maxi=10000 open(10,file='results2.txt') abserr = 100. i=0 x=x0 write(10,'(i3,",",f12.4,",",3(e15.4,:,","))') 0,x,F(x),DER(x),abserr print '(i3,2x,f12.4,2x,3(e15.4,2x))', 0,x,F(x),DER(x),abserr do while ((i<maxi).and.(abserr>=err)) i=i+1 xold=x if (DER(x)>=1.) then print*,'no convergence. Derivate of current x is >= 1' stop else x = F(xold) abserr = abs(x - xold) write(10,'(i3,",",f12.4,",",3(e15.4,:,","))') i,x,f(x),der(x),abserr print '(i3,2x,f12.4,2x,3(e15.4,2x))', i,x,f(x),der(x),abserr end if if (abserr<err) then print*, 'The root within the prescribed error limit is:',x print*, 'The percentage relative error =',err print*,'the number of iteration performed before achieving' print*,'acceptable error limit is:',i else print*, 'The root is not reached within the error limit after prescribed number of iteration.' print*, 'The approximate root =',xold print*, 'The percentage relative error =',err endif close(10) end subroutine real function f(v) real::v f= (R*T+beta/V+gama/V**2+delta/V**3)/P(k) end function 8

real function der(v) real::v der=((-3*delta)/v**4 - (2*gama)/V**3 - beta/v**2)/p(k) end function end program Πίνακες αποτελεσμάτων: 0 P=1 (αρχική εκτίμηση V =28) Αριθμός επανάληψης V f(v ) f'(v ) Απόλυτο σφάλμα 0 28 3.45E+01 1.37E 02 1.00E+02 1 34.4911 3.46E+01 9.03E 03 6.49E+00 2 34.5633 3.46E+01 8.99E 03 7.22E 02 3 34.5639 3.46E+01 8.99E 03 6.52E 04 4 34.5639 3.46E+01 8.99E 03 3.82E 06 5 34.5639 3.46E+01 8.99E 03 0.00E+00 0 P=10 (αρχική εκτίμηση V =2) Αριθμός επανάληψης V f(v ) f'(v ) Απόλυτο σφάλμα 0 2 2.97E+00 2.45E 01 1.00E+02 1 2.9722 3.14E+00 1.15E 01 9.72E 01 2 3.1353 3.15E+00 1.04E 01 1.63E 01 3 3.1531 3.16E+00 1.02E 01 1.78E 02 4 3.1549 3.16E+00 1.02E 01 1.83E 03 5 3.1551 3.16E+00 1.02E 01 1.87E 04 6 3.1551 3.16E+00 1.02E 01 1.91E 05 7 3.1551 3.16E+00 1.02E 01 1.91E 06 8 3.1551 3.16E+00 1.02E 01 2.38E 07 0 P=20 (αρχική εκτίμηση V =1) Αριθμός επανάληψης V f(v ) f'(v ) Απόλυτο σφάλμα 0 1 1.25E+00 4.38E 01 1.00E+02 1 1.2539 1.35E+00 2.92E 01 2.54E 01 2 1.3448 1.37E+00 2.57E 01 9.09E 02 3 1.3697 1.38E+00 2.49E 01 2.49E 02 4 1.376 1.38E+00 2.47E 01 6.30E 03 5 1.3776 1.38E+00 2.46E 01 1.56E 03 6 1.3779 1.38E+00 2.46E 01 3.85E 04 7 1.378 1.38E+00 2.46E 01 9.47E 05 8 1.3781 1.38E+00 2.46E 01 2.33E 05 9 1.3781 1.38E+00 2.46E 01 5.72E 06 10 1.3781 1.38E+00 2.46E 01 1.43E 06 11 1.3781 1.38E+00 2.46E 01 3.58E 07 9

0 P=30 (αρχική εκτίμηση V =1) Αριθμός επανάληψης V f(v ) f'(v ) Απόλυτο σφάλμα 0 1 8.36E 01 2.92E 01 1.00E+02 1 0.8359 7.80E 01 3.98E 01 1.64E 01 2 0.78 7.57E 01 4.46E 01 5.59E 02 3 0.7565 7.46E 01 4.69E 01 2.36E 02 4 0.7457 7.41E 01 4.81E 01 1.08E 02 5 0.7405 7.38E 01 4.86E 01 5.12E 03 6 0.7381 7.37E 01 4.89E 01 2.47E 03 7 0.7369 7.36E 01 4.90E 01 1.21E 03 8 0.7363 7.36E 01 4.91E 01 5.90E 04 9 0.736 7.36E 01 4.91E 01 2.89E 04 10 0.7358 7.36E 01 4.91E 01 1.42E 04 11 0.7358 7.36E 01 4.91E 01 6.96E 05 12 0.7357 7.36E 01 4.91E 01 3.42E 05 13 0.7357 7.36E 01 4.91E 01 1.68E 05 14 0.7357 7.36E 01 4.91E 01 8.23E 06 15 0.7357 7.36E 01 4.91E 01 4.05E 06 16 0.7357 7.36E 01 4.91E 01 2.03E 06 17 0.7357 7.36E 01 4.91E 01 9.54E 07 0 P=40 (αρχική εκτίμηση V =0.5) Αριθμός επανάληψης V f(v ) f'(v ) Απόλυτο σφάλμα 0 0.5 4.36E 01 6.50E 01 1.00E+02 1 0.4357 3.90E 01 7.63E 01 6.43E 02 2 0.3904 3.54E 01 8.43E 01 4.54E 02 3 0.3539 3.22E 01 8.92E 01 3.64E 02 4 0.3222 2.94E 01 9.04E 01 3.17E 02 5 0.2937 2.68E 01 8.56E 01 2.86E 02 6 0.2684 2.48E 01 7.23E 01 2.53E 02 7 0.2481 2.36E 01 5.01E 01 2.02E 02 8 0.2355 2.31E 01 2.80E 01 1.26E 02 9 0.2305 2.29E 01 1.68E 01 5.01E 03 10 0.2294 2.29E 01 1.40E 01 1.13E 03 11 0.2292 2.29E 01 1.36E 01 1.73E 04 12 0.2292 2.29E 01 1.35E 01 2.39E 05 13 0.2292 2.29E 01 1.35E 01 3.29E 06 14 0.2292 2.29E 01 1.35E 01 3.73E 07 10

3. Μέθοδος Νewton Γράφουμε την αρχική εξίσωση PV = RT + β/v + γ/(v 2 ) + δ/(v 3 ) στη μορφή 2 3 f( V) RT / V / V / V PV 0 με 2 3 4 f '( V) / V 2 / V 3 / V P n n1 n f( V ) Αλγόριθμος Newton: V V, n n 0,1,... f '( V ) Πρόγραμμα FORTRAN που επιλύει την εξίσωση με την μέθοδο Newton: program Askshsh1_3!Newton. implicit none real::t,p(5),aa,bb,a,b,c,beta,gama,delta,r real::x,x0,xnew,rel,err,xold integer i,maxi,k T=425 P=(/1,10,20,30,40/) R=0.08206 AA=17.7940 BB=0.2462 a=0.12161 b=0.09423 c=3500000 beta=r*t*bb-aa-r*c/t**2 gama=-r*t*bb*b+a*aa-r*bb*c/t**2 delta=r*bb*b*c/t**2 print*,beta,gama,delta print*, 'Enter k=1-5 for item of the Pressure array' read*,k print*, 'Enter initial guess x0:' read*, x0 rel=1e-6 maxi=10000 err = 100. i = 1 xold=x0 print*, 0,xold,F(xold),DER(xold),err do while ((i/=maxi).and.(err>=rel).and.(der(xold)/=0.)) xnew = xold - (F(xold)/DER(xold)) if (xnew/=0.) then err = abs((xnew - xold)/xnew) * 100. endif print*, i,xnew,f(xnew),der(xnew),err xold = xnew i = i + 1 11

if ((err<rel).and.(der(xold)/=0.)) then print*, 'The root within the prescribed error limit is:',xold print*, 'The percentage relative error =',err print*,'the number of iteration performed before achieving' print*,'acceptable error limit is:',i - 1 elseif((err>rel).and.(der(xold)/=0.)) then print*, 'The root is not reached within the error limit after prescribed number of iteration.' print*, 'The approximate root =',xold print*, 'The percentage relative error =',err elseif(der(xold)==0.) then print*, 'Newton''s method fails...derivative equal to zero.' endif contains real function f(v) real::v f= R*T+beta/V+gama/V**2+delta/V**3-P(k)*V end function real function der(v) real::v der=-p(k) - (3*delta)/V**4 - (2*gama)/V**3 - beta/v**2 end function end program Πίνακες αποτελεσμάτων (οι αρχικές εκτιμήσεις είναι οι ίδιες με αυτές της μεθόδου των απλών επαναλήψεων): 0 P=1 (αρχική εκτίμηση V =28) Αριθμός x f(x) f'(x) επανάληψης Απόλυτο σφάλμα 0 28 6.49E+00 9.86E 01 1.00E+02 1 34.5812 1.71E 02 9.91E 01 6.58E+00 2 34.5639 1.06E 06 9.91E 01 1.73E 02 3 34.5639 1.06E 06 9.91E 01 0.00E+00 0 P=10 (αρχική εκτίμηση V =2) Αριθμός x f(x) f'(x) επανάληψης Απόλυτο σφάλμα 0 2 9.72E+00 7.55E+00 1.00E+02 1 3.288 1.20E+00 9.06E+00 1.29E+00 2 3.1557 5.07E 03 8.98E+00 1.32E 01 3 3.1551 5.84E 08 8.98E+00 5.65E 04 4 3.1551 5.84E 08 8.98E+00 0.00E+00 0 P=20 (αρχική εκτίμηση V =1) Αριθμός x f(x) f'(x) επανάληψης Απόλυτο σφάλμα 0 1 5.08E+00 1.12E+01 1.00E+02 1 1.4518 1.13E+00 1.55E+01 4.52E 01 12

2 1.3791 1.57E 02 1.51E+01 7.27E 02 3 1.3781 4.18E 06 1.51E+01 1.04E 03 4 1.3781 2.98E 07 1.51E+01 2.38E 07 0 P=30 (αρχική εκτίμηση V =1) Αριθμός x f(x) f'(x) επανάληψης Απόλυτο σφάλμα 0 1 4.92E+00 2.12E+01 1.00E+02 1 0.7683 5.14E 01 1.63E+01 2.32E 01 2 0.7367 1.51E 02 1.53E+01 3.16E 02 3 0.7357 1.57E 05 1.53E+01 9.88E 04 4 0.7357 1.99E 07 1.53E+01 1.01E 06 5 0.7357 1.99E 07 1.53E+01 0.00E+00 0 P=40 (αρχική εκτίμηση V =0.5) Αριθμός x f(x) f'(x) επανάληψης Απόλυτο σφάλμα 0 0.5 2.57E+00 1.40E+01 1.00E+02 1 0.3162 1.12E+00 4.02E+00 1.84E 01 2 0.0377 1.12E+03 8.35E+04 2.79E 01 3 0.051 4.69E+02 2.67E+04 1.34E 02 4 0.0686 1.94E+02 8.72E+03 1.76E 02 5 0.0908 7.84E+01 2.93E+03 2.22E 02 6 0.1176 3.07E+01 1.02E+03 2.68E 02 7 0.1476 1.15E+01 3.77E+02 3.00E 02 8 0.1782 4.02E+00 1.50E+02 3.06E 02 9 0.2049 1.22E+00 6.97E+01 2.67E 02 10 0.2224 2.61E 01 4.21E+01 1.75E 02 11 0.2285 2.19E 02 3.52E+01 6.19E 03 12 0.2292 1.97E 04 3.46E+01 6.22E 04 13 0.2292 7.23E 07 3.46E+01 5.68E 06 14 0.2292 1.78E 06 3.46E+01 1.49E 08 Συγκριτικά έχουμε για όλες τις μεθόδους: Αριθμός διχοτομήσεων/επαναλήψεων P Διχοτόμησης Απλή Επαναληπτική Newton 1 15 5 3 10 16 8 4 20 17 11 4 30 16 17 5 40 15 14 14 Με εξαίρεση την περίπτωση P=40 η μέθοδος Newton είναι η πλέον υπολογιστικά αποδοτική. 13

ΑΣΚΗΣΗ 2 Να λυθεί με τις μεθόδους απαλοιφή Gauss, παραγοντοποίηση LU, Jacobi, Gauss-Seidel και S.O.R. το σύστημα Ax=b όπου: 5 1 2 0 0 3 1 1 A 1 2 6 2 1 2 1 4 Λύση και 15 9 B 21 3 Αρχικά παίρνουμε τη λύση με Mathematica ώστε στη συνέχεια νε ελέγξουμε τα αποτελέσματα: A={ {5, 1, 2, 0}, {0, 3, 1, 1}, {-1, 2, 6, -2}, {1, -2, 1, 4} }; B={15,9,21,-3}; LinearSolve[A,B]//N Αποτελέσματα: Χ1= 1.43764, Χ2= 2.29759, Χ3= 2.75711, Χ4= -0.649891 Α) Απαλοιφή Gauss Επαυξημένο πίνακας γραμμικού συστήματος: 5 1 2 0 15 0 3 1 1 9 1 2 6 2 21 1 2 1 4 3 Για τον μηδενισμό των στοιχείων της πρώτης στήλης κάτω από την κύρια διαγώνιο χρησιμοποιούνται οι πολλαπλασιαστές m 21 =0.000, m 31 = -0.200, m 41 = 0.200: 5.000 1.000 2.000 0.000 15.000 0.000 3.000 1.000 1.000 9.000 0.000 2.200 6.400 2.000 24.000 0.000 2.200 0.600 4.000 6.000 Για τον μηδενισμό των στοιχείων της δεύτερης στήλης κάτω από την κύρια διαγώνιο χρησιμοποιούνται οι πολλαπλασιαστές m 32 =0.733, m 42 = -0.733: 5.000 1.000 2.000 0.000 15.000 0.000 3.000 1.000 1.000 9.000 0.000 0.000 5.667 2.733 17.400 0.000 0.000 1.333 4.733 0.600 Για τον μηδενισμό των στοιχείων της τρίτης στήλης κάτω από την κύρια διαγώνιο χρησιμοποιείται ο πολλαπλασιαστής m 43 =0.235: 5.000 1.000 2.000 0.000 15.000 0.000 3.000 1.000 1.000 9.000 14

0.000 0.000 5.667 2.733 17.400 0.000 0.000 0.000 5.376 3.494 Στη συνέχεια επιλύουμε με οπισθοδρόμηση και παίρνουμε τις λύσεις Χ1= 1.43764, Χ2= 2.29759, Χ3= 2.75711, Χ4= -0.649890 Πρόγραμμα FORTRAN που επιλύει το σύστημα με απαλοιφή Gauss: program askhsh2_1! Naive Gauss Elimination implicit none real::a(4,5),x(4) integer::i A(1,:)=(/5,1,2,0,15/) A(2,:)=(/0,3,1,1,9/) A(3,:)=(/-1,2,6,-2,21/) A(4,:)=(/1,-2,1,4,-3/) call naive_gauss_elimination(a,4,x)!display Result Do i=1,4 print*,i, X(i) Enddo contains subroutine naive_gauss_elimination(a,n,x) integer,intent(in)::n real,intent(inout)::a(n,n+1) real,intent(out)::x(n) real::v(2:n) integer::i,k real::s Do k=1,n-1!find column multipliers v(k+1:n)=a(k+1:n,k)/a(k,k)!use multipliers to eliminate column values reducing each row Do i=k+1,n A(i,k:N+1)=A(i,k:N+1)-v(i)*A(k,k:N+1) Enddo!Display multipliers and Array after each reduction step print* print*,'--------- Multipliers ------------' print '(100F10.3)',v(k+1:N) print*,'---------',k,'------------' do i=1,n print '(100(F10.3,:,","))',a(i,:)!Backward Substitution Do k=n,1,-1 s=sum(a(k,k+1:n)*x(k+1:n)) X(k)=(A(k,N+1)-s)/A(k,k) 15

Enddo end subroutine End program askhsh2_1 Β) Παραγοντοποίηση LU Ο πίνακας U είναι ο τελικός πίνακας, όπως αυτός προκύπτει με τη μέθοδο Gauss, χωρίς την τελευταία του στήλη: -----U----- 5.000 1.000 2.000 0.000 0.000 3.000 1.000 1.000 0.000 0.000 5.667 2.733 0.000 0.000 0.000 5.376 Τα στοιχεία του πίνακα L, που βρίσκονται κάτω από την κύρια διαγώνιο, είναι οι αντίστοιχοι πολλαπλασιαστές που χρησιμοποιήθηκαν στην μέθοδο Gauss: -----L----- 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.200 0.733 1.000 0.000 0.200 0.733 0.235 1.000 H επίλυση του αρχικού συστήματος Ax B ανάγεται στην επίλυση 2 γραμμικών συστημάτων: α) Lz B και β) Ux z Το πρώτο σύστημα επιλύεται με προς τα πίσω αντικατάσταση και δίνει: Ζ1= 15.0000, Ζ2= 9.00000, Ζ3= 17.4000, Ζ4= -3.49412 Το δεύτερο σύστημα επιλύεται με προς τα εμπρός αντικατάσταση και δίνει την τελική λύση του αρχικού συστήματος: Χ1= 1.43764, Χ2= 2.29759, Χ3= 2.75711, Χ4= -0.649890 Πρόγραμμα FORTRAN που επιλύει το σύστημα με παραγοντοποίηση LU: program askhsh2_2! LU Decomposition implicit none real,allocatable::a(:,:),x(:),z(:),l(:,:),u(:,:),b(:) real::s integer::i,k,n n=4 allocate(a(n,n),x(n),z(n),l(n,n),u(n,n),b(n)) A(1,:)=(/5,1,2,0/) A(2,:)=(/0,3,1,1/) A(3,:)=(/-1,2,6,-2/) A(4,:)=(/1,-2,1,4/) B=(/15,9,21,-3/) call LU_Decompose(A,N,L,U) print* print*, '-----A-----' 16

do i=1,n print*,a(i,:) print* print*, '-----L-----' do i=1,n print '(100(f10.3,:,","))',l(i,:) print* print*, '-----U-----' do i=1,n print '(100(f10.3,:,","))',u(i,:)!Solve L*Z=B!Forward Substitution Do k=1,n s=sum(l(k,1:k-1)*z(1:k-1)) Z(k)=B(k)-s Enddo Do i=1,4 print*,i, z(i) Enddo!Solve U*X=Z!Backward Substitution Do k=n,1,-1 s=sum(u(k,k+1:n)*x(k+1:n)) X(k)=(Z(k)-s)/U(k,k) Enddo!Display Result Do i=1,4 print*,i, X(i) Enddo contains subroutine LU_decompose(A,N,L,U) integer,intent(in)::n real,intent(in)::a(n,n) real,intent(out)::l(n,n),u(n,n) integer::i,j,k l=0;u=0 do i=1,n l(i,i)=1 do k=1,n do j=k,n u(k,j)=a(k,j)-sum(l(k,1:k-1)*u(1:k-1,j))!solve to the right down do i=k+1,n l(i,k)=(a(i,k)-sum(l(i,1:k-1)*u(1:k-1,k)))/u(k,k)!solve!repeat N times end subroutine 17

End program askhsh2_2 Γ) Επαναληπτική μέθοδος Jacobi N n1 1 n xi bi aijx j a ii j1 ji Πρόγραμμα FORTRAN που επιλύει το σύστημα με την μέθοδο Jacobi: program askhsh2_3 implicit none real,allocatable::a(:,:),x(:),b(:) integer::i,n n=4 allocate(a(n,n),x(n),b(n)) A(1,:)=(/5,1,2,0/) A(2,:)=(/0,3,1,1/) A(3,:)=(/-1,2,6,-2/) A(4,:)=(/1,-2,1,4/) B=(/15,9,21,-3/) x=0!initial guess call Jacobi(A,B,N,X) do i=1,n print*,x(i) contains subroutine Jacobi(A,B,N,X) integer,intent(in)::n real,intent(in)::a(n,n) real,intent(in)::b(n) real,intent(inout)::x(n) real::x_old(n) integer::i,k real::err open(10,file='results.txt') do k=1,10000 x_old=x do i=1,n x(i)=(b(i)-(sum(a(i,1:i-1)*x_old(1:i- 1))+sum(a(i,i+1:N)*x_old(i+1:N))))/a(i,i) err=maxval(abs(x_old(:)-x(:))) write(10,'(i2,",",e10.3,",",100(f10.3,:,","))') k,err,x print*,k,err,x if (err<1e-6) exit close(10) end subroutine end program 18

Πίνακας αποτελεσμάτων (αρχική εκτίμηση x1=x2=x3=x4=0): Αριθμός επαναλήψης Σφάλμα x1 x2 x3 x4 0 100 0 0 0 0 1 3.50E+00 3 3 3.5 0.75 2 2.00E+00 1 2.083 2.75 0.875 3 4.83E 01 1.483 2.375 2.681 0.646 4 5.97E 02 1.453 2.322 2.74 0.603 5 3.40E 02 1.44 2.288 2.767 0.637 6 2.04E 02 1.436 2.29 2.765 0.658 7 8.24E 03 1.436 2.298 2.757 0.655 8 5.72E 03 1.438 2.299 2.755 0.649 9 1.59E 03 1.438 2.298 2.757 0.648 10 1.16E 03 1.438 2.297 2.757 0.65 11 5.17E 04 1.438 2.297 2.757 0.65 12 2.38E 04 1.438 2.298 2.757 0.65 13 1.63E 04 1.438 2.298 2.757 0.65 14 5.20E 05 1.438 2.298 2.757 0.65 15 3.72E 05 1.438 2.298 2.757 0.65 16 1.22E 05 1.438 2.298 2.757 0.65 17 6.68E 06 1.438 2.298 2.757 0.65 18 4.53E 06 1.438 2.298 2.757 0.65 19 1.67E 06 1.438 2.298 2.757 0.65 20 1.13E 06 1.438 2.298 2.757 0.65 21 2.98E 07 1.438 2.298 2.757 0.65 Δ) Επαναληπτική μέθοδο Gauss Seidel i1 N n1 1 n1 n xi bi aijxj aijx j aii j1 ji1 Πρόγραμμα FORTRAN που επιλύει το σύστημα με την μέθοδο Gauss-Seidel: program askhsh2_4 implicit none real,allocatable::a(:,:),x(:),b(:) integer::i,n n=4 allocate(a(n,n),x(n),b(n)) A(1,:)=(/5,1,2,0/) A(2,:)=(/0,3,1,1/) A(3,:)=(/-1,2,6,-2/) A(4,:)=(/1,-2,1,4/) 19

B=(/15,9,21,-3/) x=0!initial guess call Gauss_Seidel(A,B,N,X) do i=1,n print*,x(i) contains subroutine Gauss_Seidel(A,B,N,X) integer,intent(in)::n real,intent(in)::a(n,n) real,intent(in)::b(n) real,intent(inout)::x(n) real::x_old(n) integer::i,k real::err open(10,file='results2.txt') do k=1,10000 x_old=x do i=1,n x(i)=(b(i)-(sum(a(i,1:i-1)*x(1:i-1))+sum(a(i,i+1:n)*x_old(i+1:n))))/a(i,i) err=maxval(abs(x_old(:)-x(:))) write(10,'(i2,",",e10.3,",",100(f10.3,:,","))') k,err,x print*,k,err,x if (err<1e-6) exit close(10) end subroutine end program Πίνακας αποτελεσμάτων (αρχική εκτίμηση x1=x2=x3=x4=0): N Error x1 x2 x3 x4 0 100 0 0 0 0 1 3.00E+00 3 3 3 0.75 2 1.80E+00 1.2 2.25 2.7 0.6 3 2.70E 01 1.47 2.3 2.778 0.662 4 4.13E 02 1.429 2.295 2.753 0.648 5 1.14E 02 1.44 2.298 2.758 0.65 6 2.90E 03 1.437 2.297 2.757 0.65 7 5.57E 04 1.438 2.298 2.757 0.65 8 1.05E 04 1.438 2.298 2.757 0.65 9 2.36E 05 1.438 2.298 2.757 0.65 10 5.48E 06 1.438 2.298 2.757 0.65 11 1.19E 06 1.438 2.298 2.757 0.65 12 2.38E 07 1.438 2.298 2.757 0.65 20

Ε) Επαναληπτική μέθοδος SOR i1 N n1 1 n 1 n 1 n x i bi aijxj aijxj x i a ii j1 ji1 Πρόγραμμα FORTRAN που επιλύει το σύστημα με την μέθοδο SOR: program askhsh2_5 implicit none real,allocatable::a(:,:),x(:),b(:) integer::i,n real::w n=4 allocate(a(n,n),x(n),b(n)) A(1,:)=(/5,1,2,0/) A(2,:)=(/0,3,1,1/) A(3,:)=(/-1,2,6,-2/) A(4,:)=(/1,-2,1,4/) B=(/15,9,21,-3/) x=0!initial guess w=0.9 call SOR(A,B,N,X,w) do i=1,n print*,x(i) contains subroutine SOR(A,B,N,X,w) integer,intent(in)::n real,intent(in)::a(n,n) real,intent(in)::b(n) real,intent(inout)::x(n) real,intent(in)::w real::x_old(n) integer::i,k real::err open(10,file='results3.txt') do k=1,10000 x_old=x do i=1,n x(i)=w*(b(i)-(sum(a(i,1:i-1)*x(1:i- 1))+sum(a(i,i+1:N)*x_old(i+1:N))))/a(i,i)+ (1-w)*x_old(i) err=maxval(abs(x_old(:)-x(:))) write(10,'(i2,",",e10.3,",",100(f10.3,:,","))') k,err,x print*,k,err,x if (err<1e-6) exit close(10) end subroutine end program 21

Πίνακας αποτελεσμάτων (αρχική εκτίμηση x1=x2=x3=x4=0) και 0.9 : N Error x1 x2 x3 x4 0 100 0 0 0 0 1 2.74E+00 2.7 2.7 2.745 0.685 2 1.20E+00 1.496 2.352 2.738 0.638 3 5.52E 02 1.441 2.305 2.757 0.646 4 8.00E 03 1.437 2.297 2.758 0.65 5 9.17E 04 1.437 2.297 2.757 0.65 6 3.95E 04 1.438 2.298 2.757 0.65 7 7.92E 05 1.438 2.298 2.757 0.65 8 8.34E 06 1.438 2.298 2.757 0.65 9 3.58E 06 1.438 2.298 2.757 0.65 10 7.15E 07 1.438 2.298 2.757 0.65 22

ΑΣΚΗΣΗ 3 Να λυθεί με τη μέθοδο Newton το σύστημα 1 x2 x1 sin x1x2 0 2 4 2 1 2 1 1 ex2 e x e 2ex1 0. 4 Να γίνουν 3 επαναλήψεις με αρχική εκτίμηση x 0 4 και x2 3. Λύση Έστω 1 x2 x1 f1( x1, x2) sinx1x2 2 4 2 1 1 2 x ex f 2 2( x1, x2) 1 e e 2ex1. 4 1. Η μέθοδος Newton σε συνδυασμό με την επίλυση του γραμμικού συστήματος που προκύπτει με τη μέθοδο Cramer, γράφεται ως εξής: 2 2 k1 k x2 1 x1 J( f1, f2) x k f1 f1 x2 f f και x k όπου J ο Ιακωβιανός πίνακκας: J f, f 1 2 k k x 1 1 2 2 f1 f1 x1 f2 f2 x J( f, f ) 1 2 k k 1 1 1 1 x2cos( xx 1 2) x1cos( xx 1 2) 2 2 4 2 2x 1 e 1 2e2e 1 4. Λύση του συστήματος με Mathematica: a=1/2 Sin[x1 x2]-x2/(4pi)-x1/2; b=(1-1/(4pi))(exp[2x1]-exp[1])+(exp[1] x2)/pi-2exp[1] x1; FindRoot[{a0,b0},{{x1,0.4},{x2,3}}] Αποτελέσματα: Χ1=0.299449, Χ2=2.83693 Πρόγραμμα Fortran που επιλύει το συγκεκριμένο σύστημα με τη μέθοδο Newton: program NumAnal_5 implicit none 23

real::x1,x2,x1_old,x2_old,jac,s1,s2,tol,pi integer::i,n,maxiter pi=4*atan(1.) open(10,file='results.txt') print*,'give initial x1 and x2' read*,x1,x2 n=0 tol=1.0e-6 maxiter=50 do i=1,maxiter n=n+1 x1_old=x1 x2_old=x2 jac=fx(x1_old,x2_old)*gy(x1_old,x2_old)- gx(x1_old,x2_old)*fy(x1_old,x2_old) s1=(f(x1_old,x2_old)*gy(x1_old,x2_old)- g(x1_old,x2_old)*fy(x1_old,x2_old))/jac s2=(g(x1_old,x2_old)*fx(x1_old,x2_old)- f(x1_old,x2_old)*gx(x1_old,x2_old))/jac x1=x1_old-s1 x2=x2_old-s2 write(10,'(i2,",",11(f10.3,:,","))') i,x1_old,x2_old,f(x1_old,x2_old),g(x1_old,x2_old), & fx(x1_old,x2_old),fy(x1_old,x2_old),gx(x1_old,x2_old),gy(x1_old,x2_ol d), & jac,s1,s2 print '(i2,",",11(f10.3,","))',i,x1_old,x2_old,f(x1_old,x2_old),g(x1_old,x2 _old), & fx(x1_old,x2_old),fy(x1_old,x2_old),gx(x1_old,x2_old),gy(x1_old,x2_ol d), & jac,s1,s2 if(abs(x1-x1_old)<=tol.and.abs(x2-x2_old)<= tol) exit enddo write(*,*)x1,x2,n close(10) contains real function f(x1,x2) real::x1,x2 f=0.5*sin(x1*x2)-x2/(4*pi)-x1/2. end function real function g(x1,x2) real::x1,x2 g=(1-1/(4*pi))*(exp(2*x1)-exp(1.))+exp(1.)*x2/pi - 2*exp(1.)*x1 end function real function fx(x1,x2) real::x1,x2 24

fx=-0.5+0.5*x2*cos(x1*x2) end function real function fy(x1,x2) real::x1,x2 fy=-1/(4*pi)+0.5*x1*cos(x1*x2) end function real function gx(x1,x2) real::x1,x2 gx=-2*exp(1.)+2*exp(2*x1)*(1-1/(4*pi)) end function real function gy(x1,x2) real::x1,x2 gy=exp(1.)/pi end function end program NumAnal_5 Πίνακας αποτελεσμάτων (αρχικές τιμές x1=0.4 και x2=3): n x1 x2 f(x1,x2) g(x1,x2) fx(x1,x2) fy(x1,x2) gx(x1,x2) gy(x1,x2) Jac Dx1 Dx2 1 0.4 3.0 2.70E 02 3.20E 02 0.044 0.007 1.34 0.865 0.028 0.831 1.249 2 0.431 1.75 2.66E 01 1.74E+00 0.138 0.236 4.658 0.865 0.982 0.185 1.018 3 0.245 0.733 2.50E 02 3.00E 02 0.139 0.2 4.31 0.865 0.984 0.016 0.114 4 0.261 0.619 1.00E 03 0.00E+00 0.195 0.209 4.345 0.865 1.075 0.001 0.004 5 0.261 0.623 0.00E+00 0.00E+00 0.193 0.208 4.343 0.865 1.071 0 0 ΑΣΚΗΣΗ 4 Εάν ο πίνακας Α ενός γραμμικού συστήματος Ax=b αναλυθεί σε A D L U, όπου D είναι ένας διαγώνιος πίνακας και L και U είναι κάτω και άνω τριγωνικοί πίνακες αντίστοιχα, να αποδειχθεί ότι και οι τρεις επαναληπτικές μέθοδοι Jacobi, GS και SOR μπορούν να γραφούν στη γενική μορφή x k1 1 k 1 M Nx M b, όπου για τη μέθοδο Jacobi: Μ=D και N L U και N U και για τη μέθοδο SOR: M D L και N 1 Λύση, για τη μέθοδο GS: M L D ω D ωu. Η άσκηση επιλύεται στην ιστοσελίδα του μαθήματος (Αρχείο παραδειγμάτων: 5 - Συστήματα Αλγεβρικών Εξισώσεων, Άσκηση 4) 25