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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Υπολογιστικές Μέθοδοι

Κεφ. 6: Επίλυση ελλειπτικών διαφορικών εξισώσεων με πεπερασμένες διαφορές προβλήματα οριακών τιμών

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

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

Κεφάλαιο 4. Επίλυση ελλειπτικών διαφορικών εξισώσεων µε πεπερασµένες διαφορές

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

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

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

Άσκηση 1 Έχουµε να επιλύσουµε την εξίσωση κύµατος 1 ης τάξης (υπερβολική εξίσωση) (1)

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

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

Κεφάλαιο 2. Μέθοδος πεπερασµένων διαφορών προβλήµατα οριακών τιµών µε Σ Ε

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

Επιστηµονικός Υπολογισµός Ι

Επίλυση ελλειπτικών διαφορικών εξισώσεων με πεπερασμένες διαφορές

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

Επίλυση ενός τριδιαγώνιου γραµµικού συστήµατος Ax = d µε τη µέθοδο απαλοιφής του Gauss (µέθοδος του Thomas)

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

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

Υπολογιστικές Μέθοδοι = 0.4 και R

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ - ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΩΝ ΜΑΘΗΜΑΤΙΚΩΝ ΕΙΣΑΓΩΓΙΚΕΣ ΜΕΤΑΠΤΥΧΙΑΚΕΣ ΕΞΕΤΑΣΕΙΣ 26 ΙΟΥΛΙΟΥ 2008 ΕΥΤΕΡΟ ΜΕΡΟΣ :

Κεφ. 7: Επίλυση ελλειπτικών διαφορικών εξισώσεων με πεπερασμένες διαφορές

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

Αριθµητική Ανάλυση. ιδάσκοντες: Καθηγητής Ν. Μισυρλής, Επίκ. Καθηγητής Φ.Τζαφέρης ΕΚΠΑ. 16 Ιανουαρίου 2015

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

Επιστηµονικός Υπολογισµός ΙΙ

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

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

Αριθµητική Ανάλυση. Ενότητα 3 Αριθµητικές Μέθοδοι για την επίλυση Γραµµικών Συστηµάτων. Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών,

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

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

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

Αριθµητική Γραµµική Αλγεβρα

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

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

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

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

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

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

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

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

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

Μέθοδος Πεπερασµένων Στοιχείων. Το πρόβληµα

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

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

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

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

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

0.1 Εκχειλίσεις κατά την Επίλυση Τετραγωνικής Εξίσωσης

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

8 FORTRAN 77/90/95/2003

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

Κεφάλαιο 1. Αριθµητική ολοκλήρωση συνήθων διαφορικών εξισώσεων και συστηµάτων

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

Αλγόριθµοι και Πολυπλοκότητα

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ - ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΩΝ ΜΑΘΗΜΑΤΙΚΩΝ ΕΙΣΑΓΩΓΙΚΕΣ ΜΕΤΑΠΤΥΧΙΑΚΕΣ ΕΞΕΤΑΣΕΙΣ 26 ΙΟΥΛΙΟΥ 2009 ΕΥΤΕΡΟ ΜΕΡΟΣ :

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

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

Εφαρμοσμένα Μαθηματικά 3η εργαστηριακή άσκηση

ΚΑΤΑΣΚΕΥΗ ΠΙΝΑΚΑ ΣΥΝΕΚΤΙΚΟΤΗΤΑΣ ΓΙΑ ΠΡΟΒΛΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ Ι. Γραμμικά τετραγωνικά στοιχεία Q4 Έστω πλέγμα ΝxΜ Έστω πλέγμα με ΝxM στοιχεία:

14 Εφαρµογές των ολοκληρωµάτων

IMPLICIT NONE INTEGER :: a, b, c

ΚΕΦΑΛΑΙΟ 3: ιατύπωση σκεδαζόµενου πεδίου στο FDTD

Το θεώρηµα πεπλεγµένων συναρτήσεων

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι είναι μια συνάρτηση; ΣΥΝΑΡΤΗΣΕΙΣ. Δήλωση συνάρτησης sq. Παράδειγμα συνάρτησης: υπολογισμός τετραγώνου

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

Αριθµητική Ολοκλήρωση

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

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

Transcript:

Οµάδα Α: Άσκηση Έχουµε να επιλύσουµε την εξίσωση: du du u = dr + r dr = (Α) du µε οριακές συνθήκες u () = 0 και u(0) πεπερασµένη ή = 0 (συνθήκη dr r = 0 συµµετρίας). Η αναλυτική λύση της διαφορική ς εξίσωσης δ ίνεται µε τη βοήθεια του Mathematica: DSolveA9u''@rD+ u'@rd, u@d 0, u'@0d 0=,u@rD,rE r και είναι: ur () = ( r) 4 Αρχικά διακριτοποιούµε το πεδίο ορισµού: Χωρίζουµε την ακτίνα σε Ν ίσα διαστήµατα (Ν+ κόµβους) πλάτους r = N 0 r N N+ r=0 i- i i+ r= Έτσι για τη ζητούµενη παροχή θα έχουµε: Q = uda Q = π ru( r) dr 0 π Η αναλυτική τιµή της Q είναι ίση µε = 0.39699 8 Προσεγγίζουµε τη διαφορική εξίσωση (Α) στον τυχαίο κόµβο i : u u + u u u + = i+ i i i+ i r ri r ui + ui u i+ r ri r r + + =, r ri r (Α) για τους εσωτερικούς κόµβους i =,..., N όπου r = ( i ) r Για i= N + έχουµε: u = + N 0 i

Για i = θα χρησιµοποιήσουµε την οριακή συνθήκη µαζί µε την διαφορική εξίσωση: du d u du d u Παρατηρούµε ότι το limr 0 lim dr r 0 lim dr = = r 0 = rdr r dr du uo u+ u Έτσι η () γράφεται: = = (Α3) dr r du u u0 Η οριακή συνθήκη: = 0 = 0 uo = u (Α4) dr r= 0 r Ό κόµβος i = 0 είναι φανταστικός. Οι (Α3) και (Α4) δίνουν τελικά: 4u 4u r = (Α5) Το σύστηµα που προκύπτει είναι τριδιαγώνιο και θα επιλυθεί µε την µέθοδο Τhomas. Για το ολοκλήρωµα της παροχής Q χρησιµοποιούµε κανόνα τραπεζίου: R r Q = π ru( r) dr = π [ ru + ru... + rnun + rn+ un+ ] 0 Έστω ένα αραιό πλέγµα µε Ν=3 ( r =/3). Τότε έχουµε να λύσουµε το σύστηµα: 4 4 0 u /9 4.5 8 3.5 u = 0 6.75 8 u 3 To οποίο δίνει: u = 0.5 u u 3 = 0. = 0.38889 u = (από οριακή συνθήκη) 4 0 Οι τιµές ταυτίζονται µε αυτές της αναλυτικής λύσης στα σηµεία 0, /3, /3,. Q = π [0(0.5) + (/ 3)(0.) + ( / 3)(0.38889) + (0)] = 0.348734 3 Το πρόγραµµα σε Fortran είναι το ακόλουθο: Program Poisson (σε διάσταση) implicit none doubleprecision,allocatable::a(:),b(:),c(:),d(:),x(:),r(:) doubleprecision:: dr,q,s integer::n,i,status n=3!arithmos diasthmatwn -> n+ komboi allocate(a(n),b(n),c(n-),x(n+),d(n),r(n+))

if (status/=0) Stop 'Not enough memory' dr=./n do i=,n+ r(i)=(i-)*dr x(n+)=0 b()=4. c()=-4. a(i)=./dr**-./(.*r(i)*dr) b(i)=-./dr** if (i<n) then c(i)=./dr**+./(.*r(i)*dr) d()=dr** d(i)=- print*, '-------------' call Thomas(n,a,b,c,d,x) do i=,n print '(I3,4H u(,f0.5,4h) =,D0.5,D0.5)',i,r(i),x(i),(-r(i)**)/4 print '(I3,4H u(,f0.5,4h) =,D0.5,D0.5)',n+,r(n+),0,0 s=0 s=s+*r(i)*x(i) s=s+r()*x()+r(n+)*x(n+) q= 3.4 * dr * s print*, 'q=',s,q contains subroutine Thomas(n,a,b,c,d,x) integer,intent(in) :: n doubleprecision, INTENT(INOUT) ::a(n),b(n),c(n),d(n) doubleprecision, INTENT(OUT) ::x(n) integer::i doubleprecision ::t(n),u(n) end t()=b() u()=d()/t() t(i)=b(i)-a(i)*c(i-)/t(i-) u(i)=(d(i)-a(i)*u(i-))/t(i) x(n)=u(n) do i=n-,,- x(i)=u(i)-c(i)/t(i)*x(i+) end subroutine Thomas

ίνουµε ενδεικτικά αποτέλεσµατα για Ν=00. ίπλα στις αριθµητικές τιµές παρουσιάζονται οι αντίστοιχες αναλυτικές οι οποίες ταυτίζονται!!! u(0.00000) = 0.5000D+00 0.5000D+00 u(0.0000) = 0.4997D+00 0.4998D+00 3 u(0.0000) = 0.4990D+00 0.4990D+00 4 u(0.03000) = 0.4977D+00 0.4977D+00 5 u(0.04000) = 0.4960D+00 0.4960D+00 6 u(0.05000) = 0.4937D+00 0.4938D+00 7 u(0.06000) = 0.490D+00 0.490D+00 8 u(0.07000) = 0.4877D+00 0.4877D+00 9 u(0.08000) = 0.4840D+00 0.4840D+00 0 u(0.09000) = 0.4797D+00 0.4798D+00 u(0.0000) = 0.4750D+00 0.4750D+00 u(0.000) = 0.4697D+00 0.4698D+00 3 u(0.000) = 0.4640D+00 0.4640D+00 4 u(0.3000) = 0.4577D+00 0.4577D+00 5 u(0.4000) = 0.450D+00 0.450D+00 6 u(0.5000) = 0.4437D+00 0.4438D+00 7 u(0.6000) = 0.4360D+00 0.4360D+00 8 u(0.7000) = 0.477D+00 0.477D+00 9 u(0.8000) = 0.490D+00 0.490D+00 0 u(0.9000) = 0.4097D+00 0.4097D+00 u(0.0000) = 0.4000D+00 0.4000D+00 u(0.000) = 0.3897D+00 0.3897D+00 3 u(0.000) = 0.3790D+00 0.3790D+00 4 u(0.3000) = 0.3677D+00 0.3678D+00 5 u(0.4000) = 0.3560D+00 0.3560D+00 6 u(0.5000) = 0.3437D+00 0.3438D+00 7 u(0.6000) = 0.330D+00 0.330D+00 8 u(0.7000) = 0.377D+00 0.378D+00 9 u(0.8000) = 0.3040D+00 0.3040D+00 30 u(0.9000) = 0.897D+00 0.898D+00 3 u(0.30000) = 0.750D+00 0.750D+00 3 u(0.3000) = 0.597D+00 0.598D+00 33 u(0.3000) = 0.440D+00 0.440D+00 34 u(0.33000) = 0.77D+00 0.78D+00 35 u(0.34000) = 0.0D+00 0.0D+00 36 u(0.35000) = 0.937D+00 0.937D+00 37 u(0.36000) = 0.760D+00 0.760D+00 38 u(0.37000) = 0.577D+00 0.577D+00 39 u(0.38000) = 0.390D+00 0.390D+00 40 u(0.39000) = 0.97D+00 0.97D+00 4 u(0.40000) = 0.000D+00 0.000D+00 4 u(0.4000) = 0.0797D+00 0.0797D+00 43 u(0.4000) = 0.0590D+00 0.0590D+00 44 u(0.43000) = 0.0377D+00 0.0378D+00 45 u(0.44000) = 0.060D+00 0.060D+00 46 u(0.45000) = 0.9937D+00 0.9937D+00 47 u(0.46000) = 0.970D+00 0.970D+00 48 u(0.47000) = 0.9477D+00 0.9477D+00 49 u(0.48000) = 0.940D+00 0.940D+00 50 u(0.49000) = 0.8997D+00 0.8998D+00 5 u(0.50000) = 0.8750D+00 0.8750D+00 5 u(0.5000) = 0.8497D+00 0.8498D+00 53 u(0.5000) = 0.840D+00 0.840D+00 54 u(0.53000) = 0.7977D+00 0.7977D+00 55 u(0.54000) = 0.770D+00 0.770D+00 56 u(0.55000) = 0.7437D+00 0.7438D+00 57 u(0.56000) = 0.760D+00 0.760D+00 58 u(0.57000) = 0.6877D+00 0.6877D+00 59 u(0.58000) = 0.6590D+00 0.6590D+00 60 u(0.59000) = 0.697D+00 0.698D+00 6 u(0.60000) = 0.6000D+00 0.6000D+00 6 u(0.6000) = 0.5697D+00 0.5698D+00 63 u(0.6000) = 0.5390D+00 0.5390D+00 64 u(0.63000) = 0.5077D+00 0.5077D+00 65 u(0.64000) = 0.4760D+00 0.4760D+00 66 u(0.65000) = 0.4437D+00 0.4437D+00 67 u(0.66000) = 0.40D+00 0.40D+00 68 u(0.67000) = 0.3777D+00 0.3777D+00 69 u(0.68000) = 0.3440D+00 0.3440D+00 70 u(0.69000) = 0.3097D+00 0.3097D+00 7 u(0.70000) = 0.750D+00 0.750D+00 7 u(0.7000) = 0.397D+00 0.398D+00

73 u(0.7000) = 0.040D+00 0.040D+00 74 u(0.73000) = 0.677D+00 0.678D+00 75 u(0.74000) = 0.30D+00 0.30D+00 76 u(0.75000) = 0.0937D+00 0.0938D+00 77 u(0.76000) = 0.0560D+00 0.0560D+00 78 u(0.77000) = 0.077D+00 0.078D+00 79 u(0.78000) = 0.97900D-0 0.97900D-0 80 u(0.79000) = 0.93975D-0 0.93975D-0 8 u(0.80000) = 0.90000D-0 0.90000D-0 8 u(0.8000) = 0.85975D-0 0.85975D-0 83 u(0.8000) = 0.8900D-0 0.8900D-0 84 u(0.83000) = 0.77775D-0 0.77775D-0 85 u(0.84000) = 0.73600D-0 0.73600D-0 86 u(0.85000) = 0.69375D-0 0.69375D-0 87 u(0.86000) = 0.6500D-0 0.6500D-0 88 u(0.87000) = 0.60775D-0 0.60775D-0 89 u(0.88000) = 0.56400D-0 0.56400D-0 90 u(0.89000) = 0.5975D-0 0.5975D-0 9 u(0.90000) = 0.47500D-0 0.47500D-0 9 u(0.9000) = 0.4975D-0 0.4975D-0 93 u(0.9000) = 0.38400D-0 0.38400D-0 94 u(0.93000) = 0.33775D-0 0.33775D-0 95 u(0.94000) = 0.900D-0 0.900D-0 96 u(0.95000) = 0.4375D-0 0.4375D-0 97 u(0.96000) = 0.9600D-0 0.9600D-0 98 u(0.97000) = 0.4775D-0 0.4775D-0 99 u(0.98000) = 0.99000D-0 0.99000D-0 00 u(0.99000) = 0.49750D-0 0.49750D-0 0 u(.00000) = 0.00000D+00 0.00000D+00 ΠΑΡΟΧΗ: q = 0.3946076370 Οµάδα Β Θεωρούµε ότι η τετραγωνική πλάκα έχει πλευρά ίση µε m. Επίσης h=5 W/m C, k=300 W/m C και T = 5 C. Έχουµε να επιλύσουµε τη διαφορική εξίσωση Laplace: T T T = 0 + = 0 (Β) x y µε οριακές συνθήκες: T T( x,0) = 50, T( x,) = 00, T(, y ) = 50 και για x = 0 : k = h( T T ). x ιακριτοποιούµε το πεδίο ορισµού 0 x, y : xωρίζουµε την κάθε πλευρά σε Ν ίσα διαστήµατα (N+ κόµβους) πλάτους H = N Έτσι για τις οριακές συνθήκες έχουµε: T( x,) = 00 T(, j) = 00 T( x,0) = 50 T( n+, j) = 50 T(, y) = 50 T( i, n+ ) = 50 T Για x = 0 διακριτοποιούµε την k = h( T T ) µε πεπερασµένες διαφορές στον x κόµβο (, j) και παίρνουµε: T, j T, j hh hh k = h( T, j T ) T, j + T, j = T, j T H k k hh hh T, j = ( T, j T )/( ) για j=,,n (Β) k k

Επίσης διακριτοποιούµε την (Β) στον τυχαίο κόµβο (, i j) και παίρνουµε τον τύπο των 5 σηµείων: Ti, j= ( Ti, j+ Ti+, j+ Ti, j + Ti, j+ ) 4 για i =,..., N και j =,..., N (Β3) Έτσι θα έχουµε για τις διάφορες µεθόδους επίλυσης συστηµάτων: Μέθοδος Jacobi ( n+ ) ( n) hh hh T, j = ( T, j T )/( ) για j =,..., N (i = ) k k ( n+ ) ( ) ( ) ( ) (, ( n n n n) Ti j = Ti, j + Ti+, j + Ti, j + Ti, j+ ) για i,..., 4 Μέθοδος Gauss-Seidel ( n+ ) ( n) hh hh T, j = ( T, j T )/( ) για j =,..., N (i = ) k k ( n+ ) ( ) ( ) ( ) ( ), ( n n+ n n+ Ti j = Ti, j + Ti+, j + Ti, j + Ti, j+ ) i,..., 4 j =,..., N = N και j =,..., N για = N και (Ο υπολογισµός γίνεται από το πάνω µέρος της τετραγωνικής πλάκας προς τα κάτω και από αριστερά προς τα δεξιά) Μέθοδος SOR ( n+ ) ( n) hh hh ( n) T, j = ω( T, j T )/( ) + ( ω) T, j για j =,..., N ( i =) k k T = ω ( T + T + T + T ) + ( ω) T, 4 ( n+ ) ( n) ( n+ ) ( n) ( n+ ) ( n) i, j i, j i+, j i, j i, j+ i j για i =,..., N και j =,..., N Το πρόγραµµα σε Fortran είναι: Μέθοδοι Jacobi, Gauss-Seidel, SOR Program Jacobi_GaussSeidel_SOR implicit none doubleprecision,allocatable::t(:,:),told(:,:) integer::n,i,j,k,kk,h,status,maxi,done,method doubleprecision::s,rel,err,max doubleprecision::t0,hh,w n=50 allocate(t(n+,n+),told(n+,n+)) if (status/=0) Stop 'Not enough memory' maxi=50000 rel=0.0000000 print*, 'n=',n,'rel=',rel hh=./n h=5

kk=300 t0=5 do method=,3!=jacobi, =gauss-seidel, 3=SOR if (method==) then t(:,:)=0. t(,:)=00. t(n+,:)=50. t(:,n+)=50. told(:,:)=t(:,:)! print*,x0(:)!read* k= done=0 do while (k<=maxi.and. done==0) do j=,n if (j==) then t(i,)=(told(i,)-(h*hh/kk)*t0)/(-(h*hh/kk)) else t(i,j)= 0.5*(told(i,j+)+told(i,j-)+told(i+,j)+told (i-,j))! elenxos gia termatismo max=- do j=,n err = abs((t(i,j) - told(i,j))/t(i,j)) if (err>max) then max=err if (max<rel) then done= told(:,:)=t(:,:) k=k+ open(,file='res_jacobi.txt',recl=0000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(,*) t(i,:) print*, 'Jacobi' print*, k-,max print*,'------------------------' elseif (method==) then!gauss-seidel t(:,:)=0. t(,:)=00. t(n+,:)=50. t(:,n+)=50. k= done=0 do while (k<=maxi.and. done==0)

told(:,:)=t(:,:) do j=,n if (j==) then t(i,)=(t(i,)-(h*hh/kk)*t0)/(-(h*hh/kk)) else t(i,j)= 0.5*(t(i,j+)+t(i,j-)+t(i+,j)+t(i-,j))! elenxos gia termatismo max=- do j=,n err = abs((t(i,j) - told(i,j))/t(i,j)) if (err>max) then max=err if (max<rel) then done= k=k+ open(,file='res_gauss.txt',recl=000) do i=n+,,- write(,*) t(i,:) print*, 'Gauss Seidel' print*, k-,max print*, '-------------------------------' elseif (method==3) then!sor do w=.88,.99,0.0 k= done=0 t(:,:)=0. t(,:)=00. t(n+,:)=50. t(:,n+)=50. do while (k<=maxi.and. done==0) told(:,:)=t(:,:) do j=,n if (j==) then t(i,)=w*(t(i,)-(h*hh/kk)*t0)/(-(h*hh/kk))+(-w)*t(i,) else t(i,j)= 0.5*w*(t(i,j+)+t(i,j-)+t(i+,j)+t(i-,j))+(-w)*t(i,j)! elenxos gia termatismo max=- do j=,n err = abs((t(i,j) - told(i,j))/t(i,j)) if (err>max) then max=err if (max<rel) then

done= k=k+ open(3,file='res_sor.txt',recl=000) do i=n+,,- write(3,*) t(i,:) print*, 'SOR' print*, k-,w end Ο έλεγχος σύγκλισης γίνεται µε κριτήριο το µέγιστο σχετικό σφάλµα από όλα τα στοιχεία του πίνακα να είναι µικρότερο από µία δεδοµένη τιµή. Ανοίγοντας το αρχείο res_jacobi.txt µέσα από το πρόγραµµα Compaq Array Visualizer και επιλέγοντας τύπο γραφήµατος Image Map παίρνουµε τα ακόλουθα γραφήµατα: N=5

Ν=0 Ν=0 Αντίστοιχα γραφήµατα παίρνουµε για όλες τις µεθόδους.

Στον επόµενο πίνακα φαίνεται συγκεντρωτικά ο αριθµός επαναλήψεων µέχρι την σύγκλιση ανά µέθοδο και πλήθος κόµβων: Κριτήριο τερµατισµού: Σχετικό σφάλµα < 0-4 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 537 54 46 (ω =.89) 9 (ω =.90) (ω =.9) 7 (ω =.9) 39 (ω =.93) 0x0 6099 4009 374 (ω =.9) 330 (ω =.93) 8 (ω =.94) 8 (ω =.95) 37 (ω =.96) 0x0 90 8794 650 (ω =.96) 499 (ω =.97) 485 (ω =.98) 98 (ω =.99) Κριτήριο τερµατισµού: Σχετικό σφάλµα < 0-6 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 685 3430 3 (ω =.89) 97 (ω =.90) 76 (ω =.9) 0 (ω =.9) 0x0 0469 376 569 (ω =.93) 47 (ω =.94) 36 (ω =.95) 40 (ω =.96) 0x0 63556 36303 05 (ω =.96) 865 (ω =.97) 80 (ω =.98) 53 (ω =.99) Κριτήριο τερµατισµού: Σχετικό σφάλµα < 0-8 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 0093 5335 36 (ω =.89) 65 (ω =.90) 08 (ω =.9) 35 (ω =.9) 0x0 35645 8967 659 (ω =.94) 476 (ω =.95) 475 (ω =.96) 65 (ω =.97) 0x0 404 66588 76 (ω =.96) 3 (ω =.97) 97 (ω =.98) 00 (ω =.99)

Μέθοδος ADI Για απλούστευση θα µελετήσουµε την περίπτωση που έχουµε αριστερά την απλή οριακή συνθήκη τύπου Dirichlet T(0,y) = 50. ( n+ ) ( n) i, j ( + ρ) i, j+ i+, j = i, j + ( ρ) i, j i, j T T T T T T για και i =,..., N j =,..., N ( n+ ) ( n+ ) i, j ( + ρ) i, j+ i, j+ = i, j+ ( ρ) i, j i, j T T T T T T + για και i =,..., N j =,..., N Στον παρακάτω αλγόριθµο σε κάθε βήµα αντί να λύσουµε δύο τριδιαγώνια συστήµατα n-xn- αγνώστων (ένα για την κατεύθυνση x και ένα για την κατεύθυνση y), λύνουµε n- τριδιαγώνια συστήµατα n- αγνώστων στην κατεύθυνση x και n- τριδιαγώνια συστήµατα n- αγνώστων στην κατεύθυνση y. + Program ADI implicit none doubleprecision,allocatable::a(:),b(:),c(:),d(:),x(:),t(:,:),tnew(:,:),told(:,:) integer::nn=0,n,m,i,j,k,l,status=0,maxl,done doubleprecision::s,max,rel,err,rr n=nn- allocate(a(n),b(n),c(n-),x(n),d(n),t(nn,nn),tnew(nn,nn),told(nn,nn)) if (status/=0) Stop 'Not enough memory' T(:,:)=50. T(,:)=00. T(nn,:)=00. T(:,)=50. T(:,nn)=50. Tnew(:,:)=T(:,:) rr=0. A(:)=. B(:)=-(.+rr) C(:)=. maxl=30000 rel=0.0 l= done=0 do while (l<=maxl.and. done==0 ) Told(:,:)= T(:,:) do k=,nn- do j=,nn- s=-(t(k-,j)-(.-rr)*t(k,j)+t(k+,j)) if (j==) then D(j-)=s-T(k,j-) elseif (j==nn-) then D(j-)=s-T(k,j+) else D(j-)=s

call Thomas(n,a,b,c,d,x) Tnew(k,:nn-)=x! print*, 'd=', d(:)! print*, 'x=',x(:)!read* T(:,:)=Tnew(:,:) do k=,nn- n- s=-(t(i,k-)-(.-rr)*t(i,k)+t(i,k+)) if (i==) then D(i-)=s-T(i-,k) elseif (i==nn-) then D(i-)=s-T(i+,k) else D(i-)=s call Thomas(n,a,b,c,d,x) Tnew(:nn-,k)=x T(:,:)=Tnew(:,:)! elenxos gia termatismo max=- do i=,nn do j=,nn err = abs((t(i,j) - told(i,j))/t(i,j)) * 00. if (err>max) then max=err if (max<rel) then done= l=l+ print*, '-------------'!do i=,nn! print*, T(i,:)! open(4,file='res_adi.txt',recl=0000) do i=nn,,- write(4,*) t(i,:) print*, l-,max contains subroutine Thomas(n,a,b,c,d,x) integer,intent(in) :: n

doubleprecision, INTENT(IN) ::a(n),b(n),c(n),d(n) doubleprecision, INTENT(OUT) ::x(n) doubleprecision ::t(n),u(n) integer :: i t()=b() u()=d()/t() t(i)=b(i)-a(i)*c(i-)/t(i-) u(i)=(d(i)-a(i)*u(i-))/t(i) x(n)=u(n) do i=n-,,- x(i)=u(i)-c(i)/t(i)*x(i+) end subroutine Thomas end H ADI συγκλίνει σε 5 επαναλήψεις και για Ν=50 δίνει το παρακάτω γράφηµα:

Οµάδα Γ: Άσκηση Επιλύουµε τη διαφορική εξίσωση Poisson: u u u = + = x y µε οριακές συνθήκες ux (,0) = ux (,) = u(0, y) = u(, y) = 0. (Γ) Αρχικά διακριτοποιούµε το πεδίο ορισµού 0 x, y : xωρίζουµε την κάθε πλευρά σε Ν ίσα διαστήµατα (N+ κόµβους) πλάτους h = N Στη συνέχεια διακριτοποιούµε την (Γ) στον τυχαίο κόµβο (, i j) και παίρνουµε τον τύπο των 5 σηµείων: u ( u u u u 4 i, j= i, j+ i+, j+ i, j + i, j+ + ) h για i =,..., N και j =,..., N (Γ) Για την επίλυση του συστήµατος θα χρησιµοποιήσουµε τις µεθόδους Jacobi, Gauss- Seidel και SOR Jacobi ( n+ ) ( ) ( ) ( ) ( ), ( n n n n ui j = ui, j + ui+, j + ui, j + ui, j+ + ) 4 j =,..., N Gauss-Seidel h για i =,..., N και ( n+ ) ( ) ( ) ( ) ( ), ( n n+ n n+ ui j = ui, j + ui+, j + ui, j + ui, j+ + h ) για i,..., 4 = N και j =,..., N (Ο υπολογισµός γίνεται από πάνω προς τα κάτω και από αριστερά προς τα δεξιά) SOR u = ω ( u + u + u + u + h ) + ( ω) u, 4 ( n+ ) ( n) ( n+ ) ( n) ( n+ ) ( n) i, j i, j i+, j i, j i, j+ i j για i =,..., N και j =,..., N Για τον υπολογισµό της ζητούµενης παροχής θα έχουµε: Q = uda Q = u( x, y) dxdy 0 0 και βάσει του κανόνα του τραπεζίου θα είναι: h Q= [ u,+ u, N+ + un+,+ un+, N+ + 4 N N N N N N ] + u + u + u + u + 4 u, j N+, j i, i, N+ i, j j= j= i= i= i= j=

Program Jacobi_GaussSeidel_SOR implicit none doubleprecision,allocatable::u(:,:),uold(:,:) integer::n,i,j,k,kk,h,status,maxi,done,method,l doubleprecision::s,rel,err,max,s,s,q doubleprecision::hh,w n=50 allocate(u(n+,n+),uold(n+,n+)) if (status/=0) Stop 'Not enough memory' maxi=50000 rel=0.0000000 hh=./n do method=,3!=jacobi, =gauss-seidel, 3=SOR u(:,:)=0. if (method==) then uold(:,:)=u(:,:)! print*,x0(:)!read* k= done=0 do while (k<=maxi.and. done==0) do j=,n u(i,j)= 0.5*(uold(i,j+)+uold(i,j-)+uold(i+,j)+uold (i-,j)+hh**)! elenxos gia termatismo max=- do j=,n err = abs((u(i,j) - uold(i,j))/u(i,j)) if (err>max) then max=err if (max<rel) then done= uold(:,:)=u(:,:) k=k+ open(,file='res_jacobi.txt',recl=0000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(,*) u(i,:) print*, 'Jacobi' print*, k-,max print*,'------------------------' elseif (method==) then!gauss-seidel k= done=0

do while (k<=maxi.and. done==0) uold(:,:)=u(:,:) do j=,n u(i,j)= 0.5*(u(i,j+)+u(i,j-)+u(i+,j)+u(i-,j)+hh**)! elenxos gia termatismo max=- do j=,n err = abs((u(i,j) - uold(i,j))/u(i,j)) if (err>max) then max=err if (max<rel) then done= k=k+ open(,file='res_gauss.txt',recl=000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(,*) u(i,:) print*, 'Gauss Seidel' print*, k-,max print*, '-------------------------------' elseif (method==3) then!sor do w=.8,.99,0.0 k= done=0 u(:,:)=0.!w=.90 do while (k<=maxi.and. done==0) uold(:,:)=u(:,:) do j=,n u(i,j)= 0.5*w*(u(i,j+)+u(i,j-)+u(i+,j)+u(i-,j)+hh**)+(-w)*u(i,j)! elenxos gia termatismo max=- do j=,n err = abs((u(i,j) - uold(i,j))/u(i,j)) if (err>max) then max=err if (max<rel) then done=

k=k+ open(3,file='res_sor.txt',recl=000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(3,*) u(i,:) print*, 'SOR' print*, k-,w!ypologismos ths paroxhs q s=0 do l=,n s=s+u(l,)+u(l,n+)+u(,l)+u(n+,l) s=0 do i=,n do j=,n s=s+u(i,j) q=(u(,)+u(,n+)+u(n+,)+u(n+,n+)+*s+4*s)*hh**/4 print*,q end Ενδεικτικά για N=4 (πλέγµα 5x5) θα έχουµε µε τη Jacobi τα εξής αποτελέσµατα: Ταχύτητες (u ) 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 4.96074E-0 5.4677963E-0 4.96074E-0 0.0000000E+00 0.0000000E+00 5.4677963E-0 7.09949E-0 5.4677963E-0 0.0000000E+00 0.0000000E+00 4.96074E-0 5.4677963E-0 4.96074E-0 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 Παροχή: Q=0.088037

Στον επόµενο πίνακα φαίνεται συγκεντρωτικά ο αριθµός επαναλήψεων µέχρι την σύγκλιση ανά µέθοδο και πλήθος κόµβων: Σχετικό σφάλµα< 0-4 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 59 967 7 (ω =.86) 08 (ω =.87) 0 (ω =.88) 04 (ω =.89) 0x0 389 59 34 (ω =.9) 05 (ω =.93) 04 (ω =.94) 08 (ω =.95) 0x0 730 547 4 (ω =.96) 404 (ω =.97) 450 (ω =.98) 908 (ω =.99) Σχετικό σφάλµα< 0-6 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 3898 6 65(ω =.87) 4(ω =.88) 3 (ω =.89) 44 (ω =.90) 0x0 790 7098 395 (ω =.9) 33 (ω =.93) 43 (ω =.94) 80 (ω =.95) 0x0 39976 783 93 (ω =.95) 73 (ω =.96) 456 (ω =.97) 804 (ω =.98) Σχετικό σφάλµα< 0-8 Πλέγµα Jacobi Gauss-Seidel SOR 5x5 69 39 53 (ω =.86) 3 (ω =.87) 86 (ω =.88) 0 (ω =.89) 0x0 7 76 556 (ω =.95) 459 (ω =.96) 38 (ω =.97) 407 (ω =.98) 0x0 7738 4430 35 (ω =.95) 035 (ω =.96) 653 (ω =.97) 894 (ω =.98)

Οµάδα Γ: Άσκηση 7 Επιλέγουµε l= l= l3= δηλαδή έναν κύβο µε ακµές από 0 έως, µε f( x, y ) = 00. Επιλύουµε τη διαφορική εξίσωση Laplace: T T T x y z T = 0 + + = 0 (Γ3) µε οριακές συνθήκες: T( x, y,) = 00, T( x, y,0) = T( x,0, z) = T( x,, z) = T(0, y, z) = T(, y, z) = 0 ιακριτοποιούµε το πεδίο ορισµού 0 x, yz, : χωρίζουµε την κάθε πλευρά σε Ν ίσα διαστήµατα (N+ κόµβους) πλάτους h =. N ιακριτοποιούµε την (Γ3) στον τυχαίο κόµβο (, i j, k) και παίρνουµε τον τύπο των 7 σηµείων: Ti, j, k = ( Ti, j, k + Ti+, j, k + Ti, j, k + Ti, j+, k + Ti, j, k + Ti, j, k+ ), 6 για i =,..., N, j =,..., N και k =,..., N (Γ4) Επιλύουµε το σύστηµα µε τις µεθόδους Jacobi, Gauss-Seidel και SOR. Jacobi ( n+ ) ( ) ( ) ( ) ( ) ( ),, ( n n n n n ( n) ui jk = ui, jk, + ui+, jk, + ui, j, k + ui, j+, k + ui, jk, + + ui, jk, ) 6 για, και i =,..., N j =,..., N k =,..., N. Gauss-Seidel ( n ) ( ) ( ) ( ) ( ) ( ) ( ),, ( n n n n n u + i j k ui, j, k u + i, j, k ui, j, k u + i, j, k u + n = + + + + + + i, j, k+ + ui, j, k ) 6 για i =,..., N, j =,..., N και k =,..., N SOR u = ω ( u 6 + u + u + u + u + u ) + ( ω) u για i =,..., N, j =,..., N και k =,..., N ( n+ ) ( n) ( n+ ) ( n) ( n+ ) ( n+ ) ( n) ( n) ijk,, i,, jk i+,, jk ij,, k ij, +, k ijk,, + ijk,, ijk,, Program Jacobi_GaussSeidel_SOR implicit none doubleprecision,allocatable::t(:,:,:),told(:,:,:) integer::n,i,j,k,kk,h,status,maxi,done,method,l,m,z doubleprecision::s,rel,err,max,s,s,q doubleprecision::t0,hh,w n=0 allocate(t(n+,n+,n+),told(n+,n+,n+))

if (status/=0) Stop 'Not enough memory' hh=./n maxi=30000 rel=0.0000000 do method=,3!=jacobi, =gauss-seidel, 3=SOR t(:,:,:)=0. t(:,,:)=00. if (method==) then told(:,:,:)=t(:,:,:)! print*,x0(:)!read* m= done=0 do while (m<=maxi.and. done==0) do j=,n do k=,n t(i,j,k)= (./6.)*(told(i,j+,k)+told(i,j-,k)+told(i+,j,k)+told (i-,j,k)+told (i,j,k-)+told (i,j,k+))! elenxos gia termatismo max=- do j=,n do k=,n err = abs((t(i,j,k) - told(i,j,k))/t(i,j,k)) if (err>max) then max=err if (max<rel) then done= told(:,:,:)=t(:,:,:) m=m+ open(,file='res_jacobi.txt',recl=0000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(,*) t(i,:,:) do i=,n+, do j=,n+,! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! do k=,n+, write(,*) t(i,j,k)!write(,*) z,'--------------------------------' print*, 'Jacobi' print*, m-,max print*,'------------------------'

elseif (method==) then!gauss-seidel m= done=0 do while (m<=maxi.and. done==0) told(:,:,:)=t(:,:,:) do j=,n do k=,n t(i,j,k)= (./6.)*(t(i,j+,k)+t(i,j-,k)+t(i+,j,k)+t(i-,j,k)+t(i,j,k- )+t(i,j,k+))! elenxos gia termatismo max=- do j=,n do k=,n err = abs((t(i,j,k) - told(i,j,k))/t(i,j,k)) if (err>max) then max=err if (max<rel) then done= m=m+ open(,file='res_gauss.txt',recl=000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=n+,,-! ta typwnoyme anapoda gia na ta deiksei o array visualizer swsta! write(,*) t(i,:,:) print*, 'Gauss Seidel' print*, m-,max print*,'------------------------' elseif (method==3) then!sor do w=.,.9,0. t(:,:,:)=0. t(:,,:)=00. m= done=0 do while (m<=maxi.and. done==0) told(:,:,:)=t(:,:,:) do j=,n do k=,n t(i,j,k)= (./6.)*(t(i,j+,k)+t(i,j-,k)+t(i+,j,k)+t(i-,j,k)+t(i,j,k- )+t(i,j,k+))+(-w)*t(i,j,k)! elenxos gia termatismo max=-

do j=,n do k=,n err = abs((t(i,j,k) - told(i,j,k))/t(i,j,k)) if (err>max) then max=err if (max<rel) then done= m=m+ open(3,file='res_sor.txt',recl=000) do k=,n+ do i=,n+ do j=,n+ write(3,*) i,'/',j,'/',k,'/',t(i,j,k) print*, 'SOR' print*, w, m- print*,'------------------------' end

Σχετικό σφάλµα< 0-4 Πλέγµα Jacobi Gauss-Seidel SOR xx 60 87 35 (ω =.0) 9 (ω =.0) 3 (ω =.30) 9 (ω =.40) 35 (ω =.50) 5x5x5 460 397 56 (ω =.0) 39 (ω =.30) 65 (ω =.35) Σχετικό σφάλµα< 0-6 Πλέγµα Jacobi Gauss-Seidel SOR xx 54 33 47 (ω =.0) 4 (ω =.0) 6 (ω =.30) 36 (ω =.40) 5x5x5 4848 58 4 (ω =.0) 68 (ω =.0) 5 (ω =.30) >500 (ω =.40) Σχετικό σφάλµα< 0-8 Πλέγµα Jacobi Gauss-Seidel SOR xx 344 79 60 (ω =.0) 9 (ω =.0) 9 (ω =.30) 35 (ω =.40) 5x5x5 74 377 67 (ω =.0) 79 (ω =.0) 64 (ω =.30) 3 (ω =.40)

Ενδεικτικά αποτελέσµατα για N=50 µε Gauss-Seidel και σχετικό σφάλµα 0 κόµβους): 0 (ανά i j k T i, j, k 00.0000 0 0 3 0 4 0 5 0 00.0000 0 0 3 0 4 0 5 0 00.0000 0 0 3 0 4 0 5 0 3 00.0000 3 0 3 0 3 3 0 3 4 0 3 5 0 4 00.0000 4 0 4 0 4 3 0 4 4 0 4 5 0 5 00.0000 5 0 5 0 5 3 0 5 4 0 5 5 0 00.0000 0 0 3 0 4 0 5 0 00.0000 3.95000 0.6038 3 3.905077 4.36879 5 0 00.0000 40.487 5.7056 3 6.308 4.3003 5 0 3 00.0000 3 40.488 3 5.70705 3 3 6.35 3 4.384 3 5 0 4 00.0000 4 3.9569 4 0.60647 4 3 3.907665 4 4.38435 4 5 0

5 00.0000 5 0 5 0 5 3 0 5 4 0 5 5 0 00.0000 0 0 3 0 4 0 5 0 00.0000 40.487 5.7056 3 6.308 4.3003 5 0 00.0000 5.49630 3.45880 3 9.6445 4 3.39837 5 0 3 00.0000 3 5.49775 3 3.4607 3 3 9.646464 3 4 3.399648 3 5 0 4 00.0000 4 40.48989 4 5.70985 4 3 6.3498 4 4.5473 4 5 0 5 00.0000 5 0 5 0 5 3 0 5 4 0 5 5 0 3 00.0000 3 0 3 0 3 3 0 4 3 0 5 3 0 3 00.0000 3 40.488 3 5.70705 3 3 6.35 4 3.384 5 3 0 3 00.0000 3 5.49775 3 3.4607 3 3 9.646464 4 3 3.399648 5 3 0 3 3 00.0000 3 3 5.4997 3 3 3.4633 3 3 3 9.648635 3 4 3 3.400954 3 5 3 0 4 3 00.0000 4 3 40.49075 4 3 5.70 4 3 3 6.3643 4 4 3.665 4 5 3 0

5 3 00.0000 5 3 0 5 3 0 5 3 3 0 5 4 3 0 5 5 3 0 4 00.0000 4 0 4 0 3 4 0 4 4 0 5 4 0 4 00.0000 4 3.9569 4 0.60647 3 4 3.907665 4 4.38435 5 4 0 4 00.0000 4 40.48989 4 5.70985 3 4 6.3498 4 4.5473 5 4 0 3 4 00.0000 3 4 40.49075 3 4 5.70 3 3 4 6.3643 3 4 4.665 3 5 4 0 4 4 00.0000 4 4 3.9539 4 4 0.60898 4 3 4 3.9007 4 4 4.39905 4 5 4 0 5 4 00.0000 5 4 0 5 4 0 5 3 4 0 5 4 4 0 5 5 4 0 5 00.0000 5 0 5 0 3 5 0 4 5 0 5 5 0 5 00.0000 5 0 5 0 3 5 0 4 5 0 5 5 0 5 00.0000 5 0 5 0 3 5 0 4 5 0 5 5 0 3 5 00.0000 3 5 0 3 5 0 3 3 5 0 3 4 5 0 3 5 5 0 4 5 00.0000 4 5 0 4 5 0 4 3 5 0 4 4 5 0 4 5 5 0

5 5 00.0000 5 5 0 5 5 0 5 3 5 0 5 4 5 0 5 5 5 0 Γράφηµα µε το πρόγραµµα MayaVi και την εντολή IsoSurface: Γράφηµα µε το πρόγραµµα MayaVi και την εντολή ScalarCutPlane:

Η µορφή του αρχείου δεδοµένων (επέκταση.vtk) για τα προηγούµενα γραφήµατα είναι η ακόλουθη (για Ν=0): # vtk DataFile Version.0 3D Periodic Array ASCII DATASET STRUCTURED_POINTS DIMENSIONS ORIGIN 0.000 0.000 0.000 SPACING.00.00.00 POINT_DATA 33 SCALARS temperature float LOOKUP_TABLE default 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 00.0000 0.0000000E+00 0.0000000E+00 0.0000000E+00 κ.ο.κ. Όπου 33=** και τις τιµές (00.000 κοκ) τις παίρνουµε µε τον ακόλουθο κώδικα Fortran: do i=,n+ do j=,n+ do k=,n+ write(3,*) t(i,j,k)