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

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

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

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

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

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

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

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

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

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

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

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

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

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

Μέθοδοι πολυδιάστατης ελαχιστοποίησης

ΜΑΣ 371: Αριθμητική Ανάλυση ΙI ΑΣΚΗΣΕΙΣ. 1. Να βρεθεί το πολυώνυμο Lagrange για τα σημεία (0, 1), (1, 2) και (4, 2).

β) Με τη βοήθεια του αποτελέσµατος της απαλοιφής υπολογίστε την ορίζουσα του πίνακα του συστήµατος. x x = x

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

3. Γραμμικά Συστήματα

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

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, 5 Ο ΕΞΑΜΗΝΟ, ΠΕΡΙΕΧΟΜΕΝΑ ΠΑΡΑΔΟΣΕΩΝ. Κεφ. 1: Εισαγωγή (διάρκεια: 0.5 εβδομάδες)

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

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

Εισαγωγή στον Προγραµµατισµό. Ανάλυση (ή Επιστηµονικοί8 Υπολογισµοί)

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

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

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

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

Αριθµητική Ανάλυση. 27 Οκτωβρίου Αριθµητική Ανάλυση 27 Οκτωβρίου / 72

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

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

Προσεγγιστική λύση Γραμμικών Συστημάτων με την μέθοδο Gauss-Seidel. Δημιουργία κώδικα στο Matlab

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, , 5 Ο ΕΞΑΜΗΝΟ ΔΙΔΑΣΚΩΝ: Δ. Βαλουγεώργης Απαντήσεις: ΠΡΟΟΔΟΣ 1, Επιμέλεια λύσεων: Γιώργος Τάτσιος

Παραδείγματα Απαλοιφή Gauss Απαλοιφή Gauss Jordan

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΤΟΜΕΑΣ ΥΔΡΑΥΛΙΚΗΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΙΚΗΣ ΤΕΧΝΙΚΗΣ. Διάλεξη 3: Περιγραφή αριθμητικών μεθόδων (συνέχεια)

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

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

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

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

Συνήθεις διαφορικές εξισώσεις προβλήματα οριακών τιμών

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

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

Κεφ. 7: Συνήθεις διαφορικές εξισώσεις (ΣΔΕ) - προβλήματα αρχικών τιμών

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

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

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

Εφαρμοσμένα Μαθηματικά ΙΙ

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

Βασίλειος Μαχαιράς Πολιτικός Μηχανικός Ph.D.

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

Βασίλειος Μαχαιράς Πολιτικός Μηχανικός Ph.D.

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

ιδάσκοντες :Τµήµα Α ( Αρτιοι) : Καθηγητής Ν. Μισυρλής,Τµήµα Β (Περιττοί) : Αριθµητική Επίκ.

Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΦΥΣ 145 Μαθηματικές Μέθοδοι στη Φυσική. Γράψτε το ονοματεπώνυμο και αριθμό ταυτότητάς σας στο πάνω μέρος της αυτής της σελίδας.

A Τελική Εξέταση του μαθήματος «Αριθμητική Ανάλυση» Σχολή Θετικών Επιστημών, Τμήμα Μαθηματικών, Πανεπιστήμιο Αιγαίου

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ ΓΙΑ ΠΡΟΒΛΗΜΑΤΑ ΜΗΧΑΝΙΚΗΣ ΕΦΑΡΜΟΓΕΣ ΜΕ ΧΡΗΣΗ MATLAB ΔΕΥΤΕΡΗ ΕΚΔΟΣΗ [ΒΕΛΤΙΩΜΕΝΗ ΚΑΙ ΕΠΑΥΞΗΜΕΝΗ]

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

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

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

ΦΑΙΝΟΜΕΝΑ ΜΕΤΑΦΟΡΑΣ ΙΙ ΜΕΤΑΦΟΡΑ ΘΕΡΜΟΤΗΤΑΣ ΚΑΙ ΜΑΖΑΣ

Επίλυση Γραµµικών Συστηµάτων

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

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

Κεφ. 6Β: Συνήθεις διαφορικές εξισώσεις (ΣΔΕ) - προβλήματα αρχικών τιμών

Πίνακας Περιεχομένων

Πίνακας Περιεχομένων

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

ΑΡΙΘΜΗΤΙΚΗ ΟΛΟΚΛΗΡΩΣΗ

Non Linear Equations (2)

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

ΣΥΓΚΡΙΣΗ ΑΛΓΟΡΙΘΜΩΝ ΑΡΙΘΜΗΤΙΚΗΣ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗΣ ΚΑΙ ΕΠΙΛΥΣΗΣ ΓΡΑΜΜΙΚΩΝ ΚΑΙ ΜΗ-ΓΡΑΜΜΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ: ΧΡΗΣΗ ΤΟΥ MATLAB

D = / Επιλέξτε, π.χ, το ακόλουθο απλό παράδειγμα: =[IA 1 ].

Αριθμητική επίλυση του προβλήματος της Αγωγής Θερμότητας.

Κεφάλαιο 12: Υδραυλική ανάλυση δικτύων διανομής

Επίλυση δικτύων διανοµής

ΕΙΣΑΓΩΓΗ ΣΤΗ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΣΥΣΤΗΜΑΤΩΝ

QR είναι ˆx τότε x ˆx. 10 ρ. Ποιά είναι η τιµή του ρ και γιατί (σύντοµη εξήγηση). P = [X. 0, X,..., X. (n 1), X. n] a(n + 1 : 1 : 1)

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

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Q 12. c 3 Q 23. h 12 + h 23 + h 31 = 0 (6)

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

Μέθοδοι μονοδιάστατης ελαχιστοποίησης

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι είναι μια υπορουτίνα; με υπορουτίνα ΥΠΟΡΟΥΤΙΝΕΣ. Παράδειγμα #1: η πράξη SQ. Ποια η διαφορά συναρτήσεων και υπορουτίνων;

Πεπερασμένες Διαφορές.

ΜΑΣ 371: Αριθμητική Ανάλυση ΙI ΛΥΣΕΙΣ ΑΣΚΗΣΕΩΝ. 1. Να βρεθεί το πολυώνυμο παρεμβολής Lagrange για τα σημεία (0, 1), (1, 2) και (4, 2).

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

Εφαρμοσμένα Μαθηματικά ΙΙ

Λύσεις ασκήσεων Άσκηση 1: Cengel and Ghajar, Κεφάλαιο 13: Προβλήματα και

Διανύσµατα στο επίπεδο

Χ. Α. Αλεξόπουλος. Τµήµα Μηχ. Η/Υ και Πληροφορικής Πανεπιστήµιο Πατρών

Μέθοδοι μονοδιάστατης ελαχιστοποίησης

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

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

Επιστηµονικοί Υπολογισµοί (Αρ. Γρ. Αλγεβρα)Επαναληπτικές µέθοδοι και 31 Μαρτίου Ηµι-Επαναληπτικές Μέθοδο / 17

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

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

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, 2009-2010 ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ. Σταυράκης 2 η Σειρά Ασκήσεων 10.11.2009 Άσκηση 1. Στο παρακάτω σχήμα φαίνονται τρεις μάζες συνδεδεμένες με ελατήρια στιβαρότητας στις διευθύνσεις x, y και z. y F y x z F z Αναλύοντας στατικά την παραπάνω κατασκευή, προκύπτει το γραμμικό σύστημα: Κx = F, όπου Κ το μητρώο στιβαρότητας ίσο με 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 Κ = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x το διάνυσμα των μετατοπίσεων των μαζών και F το διάνυσμα της στατικής φόρτισης ίσο με F = (0 0 0 0 0 0 0 0 F 0 F 0). 1

Αν = 100, F = 1000 και F = 1000: Α. Να προσδιοριστεί η λύση του συστήματος Κx = F με τη χρήση του Mathematia. Β. Να γραφτεί πρόγραμμα σε Fortran για την αριθμητική επίλυση του παραπάνω συστήματος με τις παρακάτω μεθόδους: 1. Παραγοντοποίηση LU 2. Cholesy 3. Jaobi ή Gauss-Seidel (να επιλεγεί μία από τις δύο) Για τις επαναληπτικές μεθόδους η επίλυση να γίνει με ακρίβεια 6 σημαντικών ψηφίων και σαν αρχική εκτίμηση να θεωρηθεί το μηδενικό διάνυσμα. (Τα παραδοτέα θα είναι το πρόγραμμα για κάθε μέθοδο και τα αποτελέσματα που προκύπτουν). Α. Στο Mathematia η επίλυση του παραπάνω συστήματος γίνεται δίνοντας: LinearSolve[K,f], όπου K το μητρώο των συντελεστών των αγνώστων και f το δεξιό μέλος. Το αποτέλεσμα που προκύπτει είναι: {{0},{-10},{10},{0},{-20},{20},{0},{-20},{30},{0},{-30},{20}}. Β. Παρακάτω φαίνεται ο πηγαίος κώδικας σε γλώσσα προγραμματισμού Fortran για τις διάφορες μεθόδους. Για κάθε μέθοδο, ο κώδικας γράφτηκε σε περιβάλλον Mandrae Linux 10.1 και μεταγλωττίστηκε με τον ompiler g77 έκδοση 3.4.1. Στους πηγαίους κώδικες το μητρώο των συντελεστών των αγνώστων συμβολίζεται με a(n,n) και το δεξιό μέλος με b(n). 1. Παραγοντοποίηση LU Ο πηγαίος κώδικας είναι: program lu impliit none integer n parameter (n=12) double preision a(n,n),b(n) integer i,ipvt(n),info all initialization(n,a,b) all ludeomp(n,a,ipvt,info) all lusolve(n,a,b,ipvt,info) if (info.eq.0) then open(unit=15,file="lu.txt") write(15,*) " LU" write(15,50) write(15,*) "--------------------" 2

write(15,100) i,b(i) do lose(15) if 50 format(2x,'i',10x,'xi') 100 format(i3,2x,f14.7) stop Η υπορουτίνα initialization δίνει τις αρχικές τιμές στο μητρώο των συντελεστών των αγνώστων και στο διάνυσμα στο δεξιό μέλος. subroutine initialization(n,a,b) impliit none integer n,i,j double preision a(n,n),b(n),,fy,fz do j=1,n a(i,j)=0.0d0 b(i)=0.0d0 matrix a =100.0d0 row 1 a(1,1)=2.0d0*; a(1,4)=- row 2 a(2,2)=2.0d0*; a(2,5)=- row 3 a(3,3)=2.0d0*; a(3,6)=- row 4 a(4,1)=-; a(4,4)=3.0d0*; a(4,7)=-; a(4,10)=- row 5 a(5,2)=-; a(5,5)=3.0d0*; a(5,8)=-; a(5,11)=- row 6 a(6,3)=-; a(6,6)=3.0d0*; a(6,9)=-; a(6,12)=- row 7 a(7,4)=-; a(7,7)= row 8 a(8,5)=-; a(8,8)= row 9 a(9,6)=-; a(9,9)= row 10 a(10,4)=-; a(10,10)= 3

row 11 a(11,5)=-; a(11,11)= row 12 a(12,6)=-; a(12,12)= right hand side vetor b fy=-1000.0d0 fz=1000.0d0 b(9)=fz; b(11)=fy Στην υπορουτίνα ludeomp γίνεται η παραγοντοποίηση του μητρώου των συντελεστών των αγνώστων. Στην έξοδο, το μητρώο έχει το αποτέλεσμα της παραγοντοποίσης, δηλαδή τα τριγωνικά μητρώα L και U. subroutine ludeomp(n,a,ipvt,info) impliit none integer n,info double preision a(n,n) integer ipvt(n) double preision pivot,temp,wor(n),s,maxvalue integer i,j,,m,ip,itmp info=0 ipvt(i)=i wor(i)=0.0d0 LU fatorization with partial pivoting do m=1,n find pivot ip=m maxvalue=0.0d0 do j=m,n s=0.0d0 do =1,m-1 s=s+a(ipvt(j),)*a(ipvt(),m) wor(ipvt(j))=a(ipvt(j),m)-s if ( dabs(wor(ipvt(j))).gt.maxvalue ) then ip=j maxvalue=dabs(wor(ipvt(j))) 4

if pivot=wor(ipvt(ip)) if (dabs(pivot).lt.1.0d-15) then info=1 write(*,*) "Pivot equals zero" write(*,*) "LU deomposition an not ontinue" if itmp=ipvt(m) ipvt(m)=ipvt(ip) ipvt(ip)=itmp temp=wor(m) wor(m)=wor(ip) wor(ip)=temp a(ip,m)=a(m,m) a(m,m)=pivot ompute L and U do j=1,m-1 temp=a(m,j) a(m,j)=a(ip,j) a(ip,j)=temp do j=m+1,n temp=a(m,j) a(m,j)=a(ip,j) a(ip,j)=temp s=0.0d0 do =1,m-1 s=s+a(m,)*a(,j) a(m,j)=a(m,j)-s a(j,m)=wor(j)/a(m,m) Τέλος, η επίλυση του συστήματος, με την προς τα εμπρός και προς τα πίσω αντικατάσταση, γίνεται στην υπορουτίνα lusolve. Στην είσοδο, το διάνυσμα b έχει το δεξιό μέλος, ενώ στην έξοδο το αποτέλεσμα της επίλυσης, δηλαδή το διάνυσμα x. subroutine lusolve(n,a,b,ipvt,info) impliit none 5

integer n,ipvt(n),info double preision a(n,n),b(n) integer i,m,j double preision temp,s if (info.eq.1) forward substitution do i=2,n s=b(ipvt(i)) do j=1,i-1 s=s-a(i,j)*b(ipvt(j)) b(ipvt(i))=s ba substitution x(n)=b(ipvt(n))/a(n,n) do i=n-1,1,-1 s=b(ipvt(i)) do j=i+1,n s=s-a(i,j)*x(j) x(i)=s/a(i,i) b(i)=x(i) Το αποτέλεσμα της επίλυσης που προκύπτει για την παραγοντοποίηση LU είναι: LU i xi -------------------- 1 0.0000000 2-10.0000000 3 10.0000000 4 0.0000000 5-20.0000000 6 20.0000000 7 0.0000000 8-20.0000000 9 30.0000000 10 0.0000000 11-30.0000000 6

12 20.0000000 2. Cholesy (LL T ) Το μητρώο των συντελεστών των αγνώστων είναι συμμετρικό και θετικά ορισμένο, οπότε εφαρμόζεται η μέθοδος Cholesy. Ο πηγαίος κώδικας είναι: program holesy impliit none integer n parameter (n=12) double preision a(n,n),b(n) integer i,info all initialization(n,a,b) all holesydeomp(n,a,info) all holesysolve(n,a,b,info) if (info.eq.0) then open(unit=15,file="holesy.txt") write(15,*) " Cholesy" write(15,50) write(15,*) "--------------------" write(15,100) i,b(i) do lose(15) if 50 format(2x,'i',10x,'xi') 100 format(i3,2x,f14.7) stop Η υπορουτίνα initialization παραμένει η ίδια και παραλείπεται ο πηγαίος της κώδικας. Στην υπορουτίνα holesydeomp γίνεται ο υπολογισμός του κάτω τριγωνικού μητρώου L της μεθόδου Cholesy, το οποίο αποθηκεύεται στο μητρώο των συντελεστών των αγνώστων. subroutine holesydeomp(n,a,info) impliit none integer n,info double preision a(n,n) double preision s,temp integer i,j, info=0 7

s=0.0d0 do =1,i-1 s=s+a(i,)*a(i,) temp=a(i,i)-s if ( temp.lt.0.0d0 )then write(*,*) "Matrix is not positive definite" write(*,*) "Cholesy fatorization an not ontinue" info=1 if a(i,i)=dsqrt(temp) if ( dabs(a(i,i)).le.1.0d-16 ) then write(*,*) "Divided by zero" write(*,*) "Cholesy fatorization an not ontinue" info=1 if ompute L(j,i), j=i+1(1)n do j=i+1,n s=0.0d0 do =1,i-1 s=s+a(i,)*a(j,) a(j,i)=(a(j,i)-s)/a(i,i) Τέλος, η επίλυση του συστήματος γίνεται στην υπορουτίνα holesysolve. Στην είσοδο, το διάνυσμα b περιέχει το δεξιό μέλος του συστήματος, ενώ στην έξοδο το αποτέλεσμα της επίλυσης, δηλαδή το διάνυσμα x. subroutine holesysolve(n,a,b,info) impliit none integer n,info double preision a(n,n),b(n) integer i,j 8

double preision s if (info.eq.1) forward substitution s=b(i) do j=1,i-1 s=s-a(i,j)*b(j) b(i)=s/a(i,i) baward substitution do i=n,1,-1 s=b(i) do j=i+1,n s=s-a(j,i)*b(j) b(i)=s/a(i,i) Το αποτέλεσμα της επίλυσης που προκύπτει για τη μέθοδο Cholesy είναι: Cholesy i xi -------------------- 1 0.0000000 2-10.0000000 3 10.0000000 4 0.0000000 5-20.0000000 6 20.0000000 7 0.0000000 8-20.0000000 9 30.0000000 10 0.0000000 11-30.0000000 12 20.0000000 Οι δύο μέθοδοι, που εφαρμόστηκαν μέχρι στιγμής για την επίλυση του γραμμικού συστήματος Κx = F ήταν άμεσες, δηλαδή η λύση βρέθηκε, χρησιμοποιώντας ακριβή αριθμητική, μετά από ένα πεπερασμένο πλήθος πράξεων. Στη συνέχεια, για την επίλυση του συστήματος των γραμμικών εξισώσεων, θα εφαρμοστούν δύο επαναληπτικές (έμμεσες) μέθοδοι. Οι μέθοδοι αυτοί προσεγγίζουν τη λύση ξεκινώντας με ένα 9

αρχικό διάνυσμα, που εκφράζει την αρχική προσέγγιση της λύσης, κατασκευάζουν μία ακολουθία διανυσμάτων, η οποία σύμφωνα με ορισμένες προϋποθέσεις και με ακριβή αριθμητική συγκλίνει οριακά στην ακριβή λύση. Και οι δύο μέθοδοι που θα εφαρμοστούν βασίζονται στο ότι το μητρώο Α διασπάται και παίρνει την μορφή A = D L U. 3. Jaobi Η μέθοδος Jaobi ανήκει στις επαναληπτικές μεθόδους επίλυσης γραμμικών συστημάτων. Σε αυτή την περίπτωση θα πρέπει να εξεταστεί αν η μέθοδος συγκλίνει για το συγκεκριμένο σύστημα. Μία ικανή συνθήκη, για να επιτευχθεί σύγκλιση, είναι αν το μητρώο Α έχει αυστηρά διαγώνια κυριαρχία, δηλαδή αν ισχύει a > a i = 1,, n Στην περίπτωσή μας δεν ικανοποιείται η συνθήκη αυτή, γιατί υπάρχουν γραμμές στις οποίες το διαγώνιο στοιχείο κατά απόλυτη τιμή είναι ίσο με το άθροισμα των απολύτων τιμών των υπολοίπων στοιχείων. Επομένως, προχωράμε να εξετάσουμε τη σύγκλιση με άλλη συνθήκη. Μία άλλη ικανή συνθήκη, που εξασφαλίζει σύγκλιση, είναι αν ισχύει: G < 1, όπου p = 1 ή. Στην παραπάνω ανισότητα, G είναι ο πίνακας επανάληψης και για τη μέθοδο Jaobi είναι ίσος με G = D (L + U). Ορίζοντας στο Mathematia τα μητρώα D, L και U, υπολογίζουμε το μητρώο G και δίνοντας στη συνέχεια Norm[G,1] ή Norm[G, ] προκύπτουν οι νόρμες του πίνακα επανάληψης G για p = 1 ή αντίστοιχα. Οι νόρμες είναι ίσες με G = G = 1 οπότε δεν ικανοποιείται η συνθήκη. Επομένως, θα εξεταστεί αν ικανοποιείται η αναγκαία και ικανή συνθήκη για τη σύγκλιση. Η αναγκαία και ικανή συνθήκη για να συγκλίνει η επαναληπτική μέθοδος Jaobi είναι αν ισχύει: ρ(g) < 1, δηλαδή αν φασματική ακτίνα του πίνακα επανάληψης G είναι μικρότερη της μονάδας. Δίνοντας στο Mathematia Max[Abs[Eigenvalues[G]]] προκύπτει ότι η φασματική ακτίνα του πίνακα επανάληψης G είναι ίση με ρ(g) = 5 = 0,912871 < 1. 6 10

Επομένως, η μέθοδος Jaobi θα συγκλίνει για το συγκεκριμένο γραμμικό σύστημα. Ο πηγαίος κώδικας για τη μέθοδο Jaobi είναι: program jaobi impliit none integer n parameter (n=12) double preision a(n,n),b(n),x(n),xold(n),tol integer i,maxiter,j,ionv,onvergene all initialization(n,a,b,x) maxiter=200 tol=0.5d0*1.0d-6 do j=1,n xold(j)=x(j) open(unit=15,file="jaobi.txt") write(15,*) "Jaobi" do i=1,maxiter all jaobiiter(n,a,b,x,xold) ionv=onvergene(n,x,xold,tol) if ( ionv.eq.1 ) then write(15,*) "Number of iterations:",i write(15,*) "Error:",tol exit else do j=1,n xold(j)=x(j) if write(15,*) "--------------------" write(15,50) write(15,*) "--------------------" write(15,100) i,x(i) do lose(15) 50 format(2x,'i',10x,'xi') 100 format(i3,2x,f14.7) stop 11

Στην υπορουτίνα initialization ορίζονται το μητρώο των συντελεστών των αγνώστων, το διάνυσμα b καθώς και η αρχική εκτίμηση x της λύσης. subroutine initialization(n,a,b,x) impliit none integer n,i,j double preision a(n,n),b(n),x(n),,fy,fz do j=1,n a(i,j)=0.0d0 b(i)=0.0d0 x(i)=0.0d0 matrix a =100.0d0 row 1 a(1,1)=2.0d0*; a(1,4)=- row 2 a(2,2)=2.0d0*; a(2,5)=- row 3 a(3,3)=2.0d0*; a(3,6)=- row 4 a(4,1)=-; a(4,4)=3.0d0*; a(4,7)=-; a(4,10)=- row 5 a(5,2)=-; a(5,5)=3.0d0*; a(5,8)=-; a(5,11)=- row 6 a(6,3)=-; a(6,6)=3.0d0*; a(6,9)=-; a(6,12)=- row 7 a(7,4)=-; a(7,7)= row 8 a(8,5)=-; a(8,8)= row 9 a(9,6)=-; a(9,9)= row 10 a(10,4)=-; a(10,10)= row 11 a(11,5)=-; a(11,11)= row 12 a(12,6)=-; a(12,12)= right hand side vetor b 12

fy=-1000.0d0 fz=1000.0d0 b(9)=fz; b(11)=fy Στην υπορουτίνα jaobiiter γίνεται η επανάληψη. subroutine jaobiiter(n,a,b,x,xold) impliit none integer n,i,j double preision a(n,n),b(n),x(n),xold(n),sum1,sum2 sum1=0.0d0 do j=1,i-1 sum1=sum1+a(i,j)*xold(j) sum2=0.0d0 do j=i+1,n sum2=sum2+a(i,j)*xold(j) x(i)=(b(i)-sum1-sum2)/a(i,i) Στη συνάρτηση onvergene ελέγχεται το κριτήριο τερματισμού. integer funtion onvergene(n,x,xold,tol) impliit none integer i,n double preision x(n),xold(n),tol,num,denom,temp num=0.0d0 temp=dabs(x(i)-xold(i)) if ( temp.gt.num ) num=temp denom=0.0d0 temp=dabs(x(i)) if ( temp.gt.denom ) denom=temp 13

if ( (num/denom).le.tol ) then onvergene=1 tol=num/denom else onvergene=0 if Το αποτέλεσμα της επίλυσης που προκύπτει για την επαναληπτική μέθοδο Jaobi είναι: Jaobi Number of iterations: 138 Error: 4.58599899E-07 -------------------- i xi -------------------- 1 0.0000000 2-9.9999587 3 9.9999587 4 0.0000000 5-19.9999312 6 19.9999312 7 0.0000000 8-19.9999175 9 29.9999175 10 0.0000000 11-29.9999175 12 19.9999175 Gauss-Seidel Ελέγχεται η σύγκλιση της μεθόδου για το συγκεκριμένο σύστημα. Εργαζόμαστε όπως και στη μέθοδο Jaobi. Πιο αναλυτικά, το μητρώο των συντελεστών των αγνώστων δεν έχει αυστηρά διαγώνια κυριαρχία. Στη συνέχεια εξετάζεται αν ικανοποιείται η ικανή συνθήκη: G < 1, όπου p = 1 ή. Ο πίνακας επανάληψης για την επαναληπτική μέθοδο Gauss-Seidel είναι ίσος με: G = (D L) U. Με τη βοήθεια του Mathematia προκύπτει ότι: G = 1 και 14

Συνεπώς, η μέθοδος Gauss-Seidel θα συγκλίνει. G = 5 = 0,833333 < 1. 6 (Αν εξετάζαμε την ικανή και συνθήκη: θα βρίσκαμε ότι ρ(g) < 1, ρ(g) = 5 = 0,833333 < 1, 6 επομένως η μέθοδος Gauss-Seidel συγκλίνει.) Ο πηγαίος κώδικας είναι: program gauss_seidel impliit none integer n parameter (n=12) double preision a(n,n),b(n),x(n),xold(n),tol integer i,maxiter,j,ionv,onvergene all initialization(n,a,b,x) maxiter=100 tol=0.5d0*1.0d-6 do j=1,n xold(j)=x(j) open(unit=15,file="gauss_seidel.txt") write(15,*) "Gauss-Seidel" do i=1,maxiter all gsiter(n,a,b,x,xold) ionv=onvergene(n,x,xold,tol) if ( ionv.eq.1 ) then write(15,*) "Number of iterations:",i write(15,*) "Error:",tol exit else do j=1,n xold(j)=x(j) if write(15,*) "--------------------" 15

write(15,50) write(15,*) "--------------------" write(15,100) i,x(i) do lose(15) 50 format(2x,'i',10x,'xi') 100 format(i3,2x,f14.7) stop Η υπορουτίνα initialization παραμένει η ίδια και παραλείπεται ο πηγαίος της κώδικας, όπως επίσης και η συνάρτηση onvergene για το κριτήριο τερματισμού. Στην υπορουτίνα gsiter γίνεται η επανάληψη. subroutine gsiter(n,a,b,x,xold) impliit none integer n,i,j double preision a(n,n),b(n),x(n),xold(n),sum1,sum2 sum1=0.0d0 do j=1,i-1 sum1=sum1+a(i,j)*x(j) sum2=0.0d0 do j=i+1,n sum2=sum2+a(i,j)*xold(j) x(i)=(b(i)-sum1-sum2)/a(i,i) Το αποτέλεσμα της επίλυσης που προκύπτει για την επαναληπτική μέθοδο Gauss-Seidel είναι: Gauss-Seidel Number of iterations: 70 Error: 4.58599688E-07 -------------------- i xi -------------------- 1 0.0000000 16

2-9.9999587 3 9.9999587 4 0.0000000 5-19.9999312 6 19.9999312 7 0.0000000 8-19.9999312 9 29.9999312 10 0.0000000 11-29.9999312 12 19.9999312 Για την επίλυση του συστήματος με τις επαναληπτικές μεθόδους, παρατηρούμε πως για τη Jaobi χρειάζονται 138 επαναλήψεις και για τη Gauss-Seidel 70. Επιβεβαιώνεται πως η Gauss-Seidel επιταχύνει τη Jaobi. Άσκηση 2. Δίνεται το μη γραμμικό σύστημα εξισώσεων: x 3 xy = 1 3x y y = 0 Αν η αρχική εκτίμηση είναι (x, y ) = (1,1): A. Να επιλυθεί στο Mathematia. B. Να γραφτεί πρόγραμμα σε Fortran και να επιλυθεί αριθμητικά με τη μέθοδο Newton-Raphson για στάθμη ακρίβειας τουλάχιστον ίση με ε 10. Α. Η επίλυση του μη γραμμικού συστήματος εξισώσεων στο Mathematia γίνεται δίνοντας: FindRoot[{x 3-3xy 2-1, 3x 2 y-y 3 0},{x,1},{y,1},WoringPreision 8], και υπολογίζεται: {x 0.50000000,y 0.86602540}. Β. Η αριθμητική επίλυση του μη γραμμικού συστήματος θα γίνει με εφαρμογή επαναληπτικής διαδικασίας Newton-Raphson. Σύμφωνα με τη διαδικασία αυτή, για κάθε επανάληψη i θα λύνεται ένα γραμμικό σύστημα της μορφής: όπου J ο Ιακωβιανός πίνακας, x η διόρθωση σε κάθε επανάληψη και f(x) το μη γραμμικό σύστημα. J x x = f x, Στην περίπτωση μας, ο Ιακωβιανός πίνακας είναι ίσος με: 17

f J = x f x f y = 3x 3y 6xy f y 6xy 3x 3y. Παρακάτω φαίνεται ο πηγαίος κώδικας σε γλώσσα προγραμματισμού Fortran για την αριθμητική επίλυση του μη γραμμικού συστήματος με τη μέθοδο Newton-Rapshon. O κώδικας γράφτηκε σε περιβάλλον Mandrae Linux 10.1 και μεταγλωττίστηκε με τον ompiler g77 έκδοση 3.4.1. Για την επίλυση του γραμμικού συστήματος εφαρμόστηκε η μέθοδος LU με τον αλγόριθμο, που παρουσιάστηκε στην προηγούμενη άσκηση. program newton_raphson impliit none integer n parameter (n=2) double preision ja(n,n),f(n),x(n),xold(n),tol integer i,j,ipvt(n),info,maxiter,ionv,onvergene maxiter=100 tol=1.0d-07 x(1)=1.0d0 x(2)=1.0d0 open(unit=15,file="nonlinear.txt") write(15,*) "Newton-Raphson" do i=1,maxiter all jaobian(n,x,ja) all righthand(n,x,f) all ludeomp(n,ja,ipvt,info) all lusolve(n,ja,f,ipvt,info) if (info.eq.0) then ionv=onvergene(n,f,tol) do j=1,n xold(j)=x(j) x(j)=xold(j)+f(j) if ( ionv.eq.1 ) then write(15,*) "Number of iterations:",i write(15,*) "Error:",tol exit if else exit if 18

if (info.eq.0) then write(15,*) "--------------------" write(15,50) write(15,*) "--------------------" write(15,100) i,x(i) do if lose(15) 50 format(2x,'i',10x,'xi') 100 format(i3,2x,f14.7) stop Η υπορουτίνα jaobian υπολογίζει τον Ιακωβιανό πίνακα του συστήματος, ενώ η υπορουτίνα righthand το δεξιό μέλος του προς επίλυση σε κάθε επανάληψη γραμμικού συστήματος. subroutine jaobian(n,x,ja) impliit none integer n double preision x(n),ja(n,n) ja(1,1)= 3.0d0*x(1)*x(1)-3.0d0*x(2)*x(2) ja(1,2)= -6.0d0*x(1)*x(2) ja(2,1)= 6.0d0*x(1)*x(2) ja(2,2)= 3.0d0*x(1)*x(1)-3.0d0*x(2)*x(2) subroutine righthand(n,x,f) impliit none integer n double preision x(n),f(n) f(1)= -( x(1)*x(1)*x(1)-3.0d0*x(1)*x(2)*x(2)+1.0d0 ) f(2)= -( 3.0d0*x(1)*x(1)*x(2)-x(2)*x(2)*x(2) ) Η συνάρτηση onvergene ελέγχει αν ικανοποιείται το κριτήριο τερματισμού. integer funtion onvergene(n,dx,tol) impliit none 19

integer i,n double preision dx(n),tol,maxvalue,temp maxvalue=0.0d0 temp=dabs(dx(i)) if ( temp.gt.maxvalue ) maxvalue=temp if ( maxvalue.le.tol ) then onvergene=1 tol=maxvalue else onvergene=0 if Ο κώδικας για τη μέθοδο LU είναι ο ίδιος που παρουσιάστηκε στην προηγούμενη άσκηση και παραλείπεται. Eπιλέγοντας σαν αρχική εκτίμηση: προκύπτει: x = (1 1) Newton-Raphson Number of iterations: 6 Error: 2.54635017E-13 -------------------- i xi -------------------- 1 0.5000000 2 0.8660254 20