Παράδειγμα #6 ΕΠΙΛΥΣΗ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΠΙΜΕΛΕΙΑ: Σ. Μισδανίτης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Είσοδος -Έξοδος. Άνοιγµα αρχείου:

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

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

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

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

Fortran και Αντικειµενοστραφής προγραµµατισµός.

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

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

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

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

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

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

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

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

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

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

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

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

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

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

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

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

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

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

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

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

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

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

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

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

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

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

Fortran και Αντικειμενοστραφής προγραμματισμός.

Μονοδιάστατοι πίνακες

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

Μονοδιάστατοι πίνακες

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

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

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

8 FORTRAN 77/90/95/2003

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

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

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

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

Υπολογιστές Ι. Άδειες Χρήσης. Υποπρογράμματα. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

Δομή προγράμματος στη Fortran

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

Υπο-προγράμματα στη Fortran

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

Επιµέλεια: Γιάννης Λυχναρόπουλος Οµάδα Α: Άσκηση 2 Έχουµε να επιλύσουµε την εξίσωση: 2

Κεφάλαιο : Εισαγωγή Στον Προγραμματισμό. (Διάλεξη 2) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ. Περιεχόμενα

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

Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

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

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

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

Fortran και Αντικειμενοστραφής προγραμματισμός.

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

Δομή προγράμματος στη Fortran

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

Μεταγλωττιστές Βελτιστοποίηση

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

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

Ει αγωγή η Fortran.

ΕΠΛ031 - Εισαγωγή στον Προγραμματισμό

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

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

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

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

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

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

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

Transcript:

Παράδειγμα #6 ΕΠΙΛΥΣΗ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΠΙΜΕΛΕΙΑ: Σ. Μισδανίτης 1. Διατυπώστε ένα γραμμικό σύστημα 5 εξισώσεων με 5 αγνώστους και επιλύστε το με τις παρακάτω μεθόδους: i. Απαλοιφή Gauss με πλήρη οδήγηση ii. Παραγοντοποίηση LU iii. Jacobi iv. Gauss Seidel v. SOR Σε κάθε περίπτωση σχολιάστε τη μέθοδο και με βάση τα αποτελέσματα συγκρίνετε τις μεθόδους. Επιλέγουμε να λύσουμε το 5x5 σύστημα 4 2 1 2 1 1 5 1 3 2 A 1 2 6 2 1 4 1 2 8 2 1 2 4 2 5 και 5 3 b 12 4 21 κάνοντας χρήση Mathematica LinearSolve[a,b] με 4 2 1 2 1 1 5 1 3 2 a 1 2 6 2 1 4 1 2 8 2 1 2 4 2 5 5 3 b 12 4 21 παίρνουμε τα αποτελέσματα 7189 792, 401 33, 1291 264 373 10627,, 66 792 N[%] {{9.07702},{-12.1515},{-4.89015},{5.65152},{13.4179}} 1

Επομένως x 1 =9.07702, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65152, x 5 =13.41793 Στη συνέχεια επιλύουμε το παραπάνω σύστημα με διαφορετικούς αλγορίθμους και πηγαίους κώδικες: i. Απαλοιφή Gauss με πλήρη οδήγηση Πρόγραμμα 1: Απαλοιφή Gauss με πλήρη οδήγηση Program Gauss_Jordan USE DFPORT implicit none doubleprecision,allocatable::a(:,:),x(:) integer,allocatable::tx(:) integer::n=5,i,j,k,status real::t,pivot,s,tim,ta(2) allocate(a(n,n+1),x(n),tx(n)) a(1,:)=(/4.,2.,1.,2.,-1.,5./) a(2,:)=(/1.,5.,-1.,3.,2.,-3./) a(3,:)=(/1.,2.,-6.,2.,-1.,12./) a(4,:)=(/4.,1.,2.,-8.,2.,-4./) a(5,:)=(/1.,2.,4.,-2.,5.,21./) do i=1,n TX(i)=i call print_table k=1 do while (k<=n) pivot=find_pivot(3,k) if (pivot==0) then print*, 'Pivot = 0. Gauss elimination can not continue' stop do j=k,n+1 a(k,j)=a(k,j)/pivot do i=k+1,n t=a(i,k) do j=k,n+1 a(i,j)=a(i,j)-a(k,j)*t 2

call print_table k=k+1 x(n)=a(n,n+1) do i=n-1,1,-1 s=0 do j=i+1,n s=s+a(i,j)*x(j) x(i)=a(i,n+1)-s do i=1,n print*,'x(',tx(i),')= ',x(i) tim = ETIME(TA) print*, 'Program has used', tim, 'seconds of CPU time.' Contains subroutine print_table integer::i print*, '----------------------------------------------------------' do i=1,n print*, a(i,:) end subroutine print_table real function find_pivot(s,k) integer,intent(in)::s,k integer::i,maxi,maxj,t real::max,temp if (s==1) then! No pivoting max=a(k,k) elseif (s==2) then! Partial Pivoting max=a(k,k) maxi=k do i=k,n if (abs(a(i,k))>abs(max)) then max=a(i,k) maxi=i if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp 3

elseif (s==3) then! Full Pivoting max=a(k,k) maxi=k maxj=k do i=k,n do j=k,n if (abs(a(i,j))>abs(max)) then max=a(i,j) maxi=i maxj=j if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp if (maxj/=k) then do i=1,n temp=a(i,k) a(i,k)=a(i,maxj) a(i,maxj)=temp t=tx(k) TX(k)=TX(maxj) TX(maxj)=t print*,'after pivoting' call print_table do i=1,n print*, TX(i) find_pivot=max end function find_pivot end 4

Τα αποτελέσματα του προγράμματος εμφανίζονται στην οθόνη του υπολογιστή. Τα βήματα που εκτελεί ο κώδικας φαίνονται παρακάτω x 1 x 2 x 3 x 4 x 5 4 2 1 2-1 5 1 5-1 3 2-3 1 2-6 2-1 12 4 1 2-8 2-4 1 2 4-2 5 21 x 4 x 2 x 3 x 1 x 5-8 1 2 4 2-4 3 5-1 1 2-3 2 2-6 1-1 12 2 2 1 4-1 5-2 2 4 1 5 21 x 4 x 2 x 3 x 1 x 5 1-0.125-0.25-0.5-0.25 0.5 0 5.375-0.25 2.5 2.75-4.5 0 2.25-5.5 2-0.5 11 0 2.25 1.5 5-0.5 4 0 1.75 3.5 0 4.5 22 x 4 x 3 x 2 x 1 x 5 1-0.25-0.125-0.5-0.25 0.5 0-5.5 2.25 2-0.5 11 0-0.25 5.375 2.5 2.75-4.5 0 1.5 2.25 5-0.5 4 0 3.5 1.75 0 4.5 22 x 4 x 3 x 2 x 1 x 5 1-0.25-0.125-0.5-0.25 0.5 0 1-0.4090-0.3636 0.0909-2 0 0 5.2727 2.4090 2.7727-5 0 0 2.8636 5.5454-0.6363 7 0 0 3.1818 1.2727 4.1818 29 5

x 4 x 3 x 1 x 2 x 5 1-0.25-0.5-0.125-0.25 0.5 0 1-0.3636-0.4090 0.0909-2 0 0 5.5454 2.8636-0.6363 7 0 0 2.4090 5.2727 2.7727-5 0 0 1.2727 3.1818 4.1818 29 x 4 x 3 x 1 x 2 x 5 1-0.25-0.5-0.125-0.25 0.5 0 1-0.3636-0.4090 0.0909-2 0 0 1 0.5163-0.1147 1.2622 0 0 0 4.0286 3.0491-8.0409 0 0 0 2.5245 4.3278 27.3934 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 4.3278 2.5245 27.3934 0 0 0 3.0491 4.0286-8.0409 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 1 0.5833 6.3295 0 0 0 0 2.25-27.341 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 1 0.5833 6.3295 0 0 0 0 1-12.151 Ο κώδικας δίνει σαν αποτελέσματα x 1 =9.07701, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65151, x 5 =13.41792 και ο χρόνος που χρειάστηκε είναι 7.8125 10-2 sec. 6

ii. Παραγοντοποίηση LU Πρόγραμμα 2: Παραγοντοποίηση LU Program LU real*8, pointer :: A(:,:) real*8, pointer :: B(:) real*8, pointer :: temp(:) integer,pointer :: INDX(:) integer d, rc character*12 input, output character*8 s! input data file name from screen print *,' ' write(*,50,advance='no'); read *, s J=0 do I=1,LEN(s) if(s(i:i)<>' ') J=J+1!J=real length of string s input=s(1:j)//'.dat' output =s(1:j)//'.lst'! open input and output files open(unit=1,file=input,status='old') open(unit=2,file=output,status='unknown') read(1,*) n!size of given linear system allocate(a(n,n),stat=ialloc) allocate(b(n),stat=ialloc) allocate(temp(n+1),stat=ialloc) allocate(indx(n),stat=ialloc) write(2,60) n a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) 7

b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. write(2,*) 'A=' do i=1,n write(2,15) (a(i,j),j=1,n) write(2,*) ' ' write(2,*) 'B=' do i=1,n write(2,20) b(i)!call LU decomposition routine call LUDCMP(A,n,INDX,D,rc)!call appropriate solver if previous return code is ok if (rc.eq.0) then call LUBKSB(A,n,INDX,B)!print results or error message if (rc.eq.1) then write(2,*) ' The system matrix is singular, no solution!' else write(2,*) ' ' write(2,*) ' System solution:' write(2,*) if(n<10) then do i=1, n write(2,200) i,b(i) else do i=1, 9 write(2,200) i,b(i) do i=10, n write(2,201) i,b(i) end if end if 8

! section fin Close(2) Write(*,*) ' Results in file ',output,'.' stop 15 format(f10.6,x,f10.6,x,f10.6,x,f10.6,x,f10.6) 20 format(f10.6) 50 format(' Input data file name (without.dat): ') 60 format(/' N = ',I2/) 200 format(' X',I1,' = ',F12.6) 201 format(' X',I2,'= ',F12.6)! stop! END Contains Subroutine LUDCMP(A,N,INDX,D,CODE)!LU decomposition PARAMETER(NMAX=100,TINY=1.5D-16) REAL*8 AMAX,DUM, SUM, A(N,N),VV(NMAX) INTEGER CODE, D, INDX(N) D=1; CODE=0 DO I=1,N AMAX=0.d0 DO J=1,N IF (DABS(A(I,J)).GT.AMAX) AMAX=DABS(A(I,J)) END DO! j loop IF(AMAX.LT.TINY) THEN CODE = 1 RETURN END IF VV(I) = 1.d0 / AMAX END DO! i loop DO J=1,N DO I=1,J-1 SUM = A(I,J) DO K=1,I-1 SUM = SUM - A(I,K)*A(K,J) END DO! k loop A(I,J) = SUM END DO! i loop AMAX = 0.d0 9

DO I=J,N SUM = A(I,J) DO K=1,J-1 SUM = SUM - A(I,K)*A(K,J) END DO! k loop A(I,J) = SUM DUM = VV(I)*DABS(SUM) IF(DUM.GE.AMAX) THEN IMAX = I AMAX = DUM END IF END DO! i loop IF(J.NE.IMAX) THEN DO K=1,N DUM = A(IMAX,K) A(IMAX,K) = A(J,K) A(J,K) = DUM END DO! k loop D = -D VV(IMAX) = VV(J) END IF INDX(J) = IMAX IF(DABS(A(J,J)) < TINY) A(J,J) = TINY IF(J.NE.N) THEN DUM = 1.d0 / A(J,J) DO I=J+1,N A(I,J) = A(I,J)*DUM END DO! i loop END IF END DO! j loop RETURN END subroutine LUDCMP 10

Subroutine LUBKSB(A,N,INDX,B)!Back substitution REAL*8 SUM, A(N,N),B(N) INTEGER INDX(N) II = 0 DO I=1,N LL = INDX(I) SUM = B(LL) B(LL) = B(I) IF(II.NE.0) THEN DO J=II,I-1 SUM = SUM - A(I,J)*B(J) END DO! j loop ELSE IF(SUM.NE.0.d0) THEN II = I END IF B(I) = SUM END DO! i loop DO I=N,1,-1 SUM = B(I) IF(I < N) THEN DO J=I+1,N SUM = SUM - A(I,J)*B(J) END DO! j loop END IF B(I) = SUM / A(I,I) END DO! i loop RETURN END subroutine LUBKSB End Program LU Τα αποτελέσματα του προγράμματος τυπώνονται σε ένα αρχείο.lst το οποίο έχει το ίδιο όνομα με το αρχείο εισόδου που εισάγουμε σε.dat μορφή. Η έξοδος του Προγράμματος 2 μας δίνει x 1 =9.07702, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65151, x 5 =13.41792 και ο χρόνος που χρειάστηκε είναι 7.8125 10-2 sec. 11

iii. Jacobi (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 3: Jacobi program jacobi implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m print *,'dwse arithmo agnwstwn' read *, N allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call jacobi(a,b,x,m,k) 12

if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE jacobi(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xold(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=(-sum1+B(i))/A(i,i) norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine jacobi end Η εκτέλεση του προγράμματος 3 μας επιστρέφει τα ακόλουθα αποτελέσματα x 1 =9.07698, x 2 =-12.15147, x 3 =-4.89014, x 4 =5.65149, x 5 =13.41789, ενώ για την επίτευξη κριτηρίου σχετικού σφάλματος 10-6 χρειάστηκαν 55 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.140625 sec. 13

iv. Gauss Seidel (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 4: Gauss Seidel program Gauss_Seidel implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m print *,'dwse arithmo agnwstwn' read *, N allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call gauss_seidel(a,b,x,m,k) if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE gauss_seidel(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps 14

integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xnew(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=(-sum1+B(i))/A(i,i) norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine gauss_seidel end Η εκτέλεση του προγράμματος 4 μας επιστρέφει τα ακόλουθα αποτελέσματα x 1 =9.07700, x 2 =-12.15149, x 3 =-4.89015, x 4 =5.65150, x 5 =13.41792, ενώ για την επίτευξη κριτηρίου σχετικού σφάλματος 10-6 χρειάστηκαν 26 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.109375 sec. v. SOR (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 5: SOR program SOR implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m,w print *,'dwse arithmo agnwstwn' read *, N 15

print *,'dwse sintelesti varititas(w):' read *,w allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call sor1(a,b,x,m,k) if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE sor1(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xnew(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=w*((-sum1+B(i))/A(i,i)) + (1-w)*Xold(i) 16

norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine sor1 end Η εκτέλεση του προγράμματος 5 για 1.1 1.9 και κριτήριο σχετικού σφάλματος 10-6 μας δίδει x 1 =9.07700, x 2 =-12.15149, x 3 =-4.89015, x 4 =5.65150, x 5 =13.41792, σε 26 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.109375 sec. Σημειώνεται πρώτον ότι ο αριθμός των επαναλήψεων είναι ο ίδιος για όλες τις παραπάνω τιμές των παραμέτρων χαλάρωσης και δεύτερον ότι ο ίδιος αριθμός επαναλήψεων απαιτείται και στην Gauss Seidel ( 1). Το γεγονός ότι η μέθοδος SOR δεν βελτιώνει την σύγκλιση της επαναληπτικής διαδικασίας οφείλεται στο ότι το σύστημα που επιλέξαμε δεν είναι diagonally dominant. Σύγκριση αποτελεσμάτων O Πίνακας 1 παρουσιάζει συγκεντρωτικά τα αποτελέσματα που έδωσαν οι μέθοδοι που χρησιμοποιήθηκαν για την επίλυση του γραμμικού συστήματος. Οι τιμές των άγνωστων συντελεστών είναι πολύ κοντά μεταξύ τους. Ο αριθμός επαναλήψεων των Gauss-Seidel και SOR σε σύγκριση με τις αντίστοιχες επαναλήψεις της Jacobi επαληθεύουν την αναμενόμενη γρήγορη σύγκλιση και επομένως την μικρότερη φασματική ακτίνα του πίνακα επανάληψης. Πίνακας 1: Συγκεντρωτικά αποτελέσματα Μέθοδος x 1 x 2 x 3 x 4 x 5 Iterations CPU time Mathematica 9.07702-12.15151-4.89015 5.65152 13.41792 - - Απ. Gauss 9.07701-12.15151-4.89015 5.65151 13.41792-0.078125 LU 9.07702-12.15151-4.89015 5.65152 13.41792-0.078125 Jacobi 9.07700-12.15149-4.89015 5.65150 13.41792 55 0.140625 Gauss-Seidel 9.07700-12.15149-4.89015 5.65150 13.41792 26 0.109375 SOR 9.07700-12.15149-4.89015 5.65150 13.41792 26 0.109375 17

2. Διατυπώστε ένα μη γραμμικό σύστημα 3 εξισώσεων με 3 αγνώστους και επιλύστε το με τη μέθοδο Newton. Επιλέγουμε να λύσουμε το σύστημα 2x 3x 4x 1 2 3 1 2 3 5x 2x x 7 2 1 2 3 9x 5x 9 5 2 3 Για την επίλυση του μη γραμμικού συστήματος 3x3 κατασκευάζουμε σε Mathematica έναν κώδικα ο οποίος κάνει χρήση της μεθόδου Newton. To Πρόγραμμα 6 που χρησιμοποιήθηκε για την επίλυση του παραπάνω συστήματος φαίνεται παρακάτω. Πρόγραμμα 6: Μέθοδος Newton για μη γραμμικά συστήματα f 2x1 2 3x2 3 4x31, 5x1 2x2 2 x3 7, 9 x2 5x3 5 9; xpar={x1, x2, x3}; x0={1,1,1}; MIT=10; err 10 6 ; J=Table[D[f[[i]],xpar[[j]]],{i,Length[f]}, {j,length[f]}]//simplify; Print["Πί J(x)=",J//MatrixForm]; Πί Jx 4x1 9x2 2 4 5 4x2 1 0 9 25 x3 4 k=0; curerr=100; While[curerr>err, k=k+1; If[k>MIT,Break[]]; Print["----------------------------------------------- "]; Print["Εά:",k]; roule=table[xpar[[i]]x0[[i]],{i,length[f]}]; Jx0=J/.roule//N; Print["Πί J(xo)=",Jx0//MatrixForm]; Fx0=-f/.roule; Print["Πί F(x0)=",Fx0//MatrixForm ]; 18

Αριθμητική Ανάλυση Εργασία #2 dx=linearsolve[jx0,fx0]//n; Print["dx",k-1,"=",dx]; x0=x0+dx; Print["x",k,"=",x0]; curerr=max[abs[100*dx/(x0+dx)]]//n; Print["Error=",curerr];] Κατά την εκτέλεση του Προγράμματος 6, με αρχική εκτίμηση x 1 =x 2 =x 3 =1 παίρνουμε σε κάθε επανάληψη τα εξής αποτελέσματα -------------------------------------------------------- Εά: 1 4. 9. 4. Πί Jxo 5. 4. 1. 0. 9. 25. 0 Πί Fx0 11 5 dx 0 = {-1.66916,0.562895,-0.402642} x 1 = {-0.669156,1.56289,0.597358} Error= 206.785% -------------------------------------------------------- Εά: 2 2.67662 21.9838 4. Πί Jxo 5. 6.25158 1. 0. 9. 3.18331 8.95888 Πί Fx0 0.633701 5.44637 dx 1 = {-0.460104,-0.511645,-0.264369} x 2 = {-1.12926,1.05125,0.332989} Error= 385.262% -------------------------------------------------------- Εά: 3 4.51704 9.94614 4. Πί Jxo 5. 4.205 1. 0. 9. 0.307369 3.70379 Πί Fx0 0.523561 0.481722 dx 2 = {-0.141025,-0.0834961,0.877586} x 3 = {-1.27028,0.967754,1.21057} Error= 42.0267% -------------------------------------------------------- - 19 -

Αριθμητική Ανάλυση Εργασία #2 Εά: 4 5.08114 8.42893 4. Πί Jxo 5. 3.87102 1. 0. 9. 53.6916 0.10399 Πί Fx0 0.0139432 12.7093 dx 3 = {-0.0785996,-0.159373,-0.209995} x 4 = {-1.34888,0.808381,1.00058} Error= 26.562% -------------------------------------------------------- Εά: 5 5.39554 5.88132 4. Πί Jxo 5. 3.23352 1. 0. 9. 25.058 0.221438 Πί Fx0 0.0507996 3.28994 dx 4 = {-0.0784513,-0.159866,-0.0738744} x 5 = {-1.42734,0.648515,0.926705} Error= 32.7159% -------------------------------------------------------- Εά: 6 5.70934 3.78514 4. Πί Jxo 5. 2.59406 1. 0. 9. 18.4377 0.185991 Πί Fx0 0.0511143 0.253899 dx 5 = {-0.0334276,-0.0752786,0.0229751} x 6 = {-1.46076,0.573236,0.949681} Error= 15.1175% -------------------------------------------------------- Εά: 7 5.84305 2.9574 4. Πί Jxo 5. 2.29295 1. 0. 9. 20.3353 0.0340305 Πί Fx0 0.0113337 0.0215317 dx 6 = {-0.00602087,-0.0155352,0.00581674} x 7 = {-1.46678,0.557701,0.955497} Error= 2.86539% -------------------------------------------------------- - 20 -

Αριθμητική Ανάλυση Εργασία #2 Εά: 8 5.86714 2.79928 4. Πί Jxo 5. 2.2308 1. 0. 9. 20.8381 0.00130637 Πί Fx0 0.000482684 0.00145788 dx 7 = {-0.000245562,-0.000668663,0.000218834} x 8 = {-1.46703,0.557033,0.955716} Error= 0.120185% -------------------------------------------------------- Εά: 9 5.86812 2.79257 4. Πί Jxo 5. 2.22813 1. 0. 9. 20.8572 2.36389 10 6 Πί Fx0 8.94221 10 7 2.08924 10 6 dx84.09324 10 7, 1.14339 10 6, 3.93212 10 7 x 9 = {-1.46703,0.557031,0.955717} Error= 0.000205266% -------------------------------------------------------- Εά: 10 5.86812 2.79256 4. Πί Jxo 5. 2.22813 1. 0. 9. 20.8572 6.8896 10 12 Πί Fx0 2.61469 10 12 6.74794 10 12 dx91.21519 10 12, 3.38925 10 12, 1.13895 10 12 x 10 = {-1.46703,0.557031,0.955717} Error6.08449 10 10 % ---------------------------------------------------------------------------------------------------------- Μετά από 10 επαναλήψεις και με κριτήριο σύγκλισης 10-6 προκύπτουν οι τιμές x 1.46703, x 0.557031, x 0.955717 και με σφάλμα 6.08449 10-10 1 2 3-21 -