ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, 2009-2010 ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ. Σταυράκης 1 η Σειρά Ασκήσεων 13.10.2009 Άσκηση 1. Δίνονται τα ακόλουθα ζεύγη τιμών: Α. x = 28,254 x = 28,271 B. x = 0,028254 x = 0,028271 Γ. x = e x = 19 7 Δ. x = 2 x = 1,414 όπου x είναι η πραγματική τιμή και x η προσεγγιστική τιμή. Να βρεθεί το πλήθος των δεκαδικών και σημαντικών ψηφίων στα οποία είναι ακριβή τα παραπάνω ζεύγη τιμών. Απάντηση: Γενικά, η προσεγγιστική τιμή x είναι ακριβής σε k δεκαδικά ψηφία αν για το απόλυτο σφάλμα ισχύει: ε = x x 0,5 10. Επίσης, η προσεγγιστική τιμή x είναι ακριβής σε k σημαντικά ψηφία αν για το απόλυτο σχετικό σφάλμα ισχύει: δ = 5 10 x 0. Με βάση τα παραπάνω προκύπτει για κάθε ζεύγος τιμών: Α. ε = 28,271 28,254 = 0,017 = 0,17 10 < 0,5 10 Συνεπώς η προσεγγιστική τιμή x είναι ακριβής σε ένα δεκαδικό ψηφίο. Επίσης, 28,271 28,254 δ = 0,602 10 < 5 10 28,254 που σημαίνει ότι η προσεγγιστική τιμή x είναι ακριβής σε τρία σημαντικά ψηφία. Β. ε = 0,028271 0,028254 = 0,000017 = 0,17 10 < 0,5 10 Συνεπώς η προσεγγιστική τιμή x είναι ακριβής σε τέσσερα δεκαδικά ψηφία. Επίσης, 0,028271 0,028254 δ = 0,602 10 < 5 10 0,028254 που σημαίνει ότι η προσεγγιστική τιμή x είναι ακριβής σε τρία σημαντικά ψηφία. 1
Γ. ε = 19 7 e = 2,714286 2,718282 0,3996 10 < 0,5 10 Συνεπώς η προσεγγιστική τιμή x είναι ακριβής σε δύο δεκαδικά ψηφία. Επίσης, 19 δ = 7 e 0,3996 10 = e 2,718282 1,47 10 < 5 10 που σημαίνει ότι η προσεγγιστική τιμή x είναι ακριβής σε τρία σημαντικά ψηφία. Δ. ε = 1,414 2 = 1,414 1,414214 0,214 10 < 0,5 10 Συνεπώς η προσεγγιστική τιμή x είναι ακριβής σε τρία δεκαδικά ψηφία. Επίσης, 1,414 2 0,214 10 δ = = 2 1,414214 1,513 10 < 5 10 που σημαίνει ότι η προσεγγιστική τιμή x είναι ακριβής σε τέσσερα σημαντικά ψηφία. Άσκηση 2. Με βάση τα αποτελέσματα της άσκησης 1 να υπολογιστούν: Α. το μέγιστο απόλυτο σφάλμα της ποσότητας x + x x Β. το μέγιστο απόλυτο σχετικό σφάλμα της ποσότητας x x x Απάντηση: Α. Από την προηγούμενη άσκηση ισχύει: ε 0,5 10 ε 0,5 10 ε 0,5 10 Σύμφωνα με τα θεωρήματα 2.1 και 2.2 του βιβλίου «Αριθμητική Ανάλυση» του Μ. Βραχάτη (σελ. 46), για το απόλυτο σφάλμα της ποσότητας x + x x ισχύει: ε = ε + ε ε ε + ε + ε = = 0,5 10 + 0,5 10 + 0,5 10 = 0,05505 0,55 10 > 0,5 10 Επομένως, η ποσότητα στη χειρότερη περίπτωση δε θα έχει κανένα δεκαδικό ψηφίο ακριβές. Β. Από την προηγούμενη άσκηση ισχύει: δ 5 10 δ 5 10 δ 5 10 Σύμφωνα με τα θεωρήματα 2.3 και 2.4 του βιβλίου «Αριθμητική Ανάλυση» του Μ. Βραχάτη (σελ. 50 και 51), για το απόλυτο σχετικό σφάλμα της ποσότητας x x x ισχύει δ = δ + δ δ δ + δ + δ = = 5 10 + 5 10 + 5 10 = 15 10 = 1,5 10 < 5 10 Επομένως, η ποσότητα στη χειρότερη περίπτωση θα έχει δύο σημαντικά ψηφία ακριβή. 2
Άσκηση 3. Δίνεται η εξίσωση: e + x x 4 = 0. Α. Δοκιμάζοντας τις τιμές 0,1,2, να βρεθεί ένα αρχικό διάστημα [a, b] μήκους 1, μέσα στο οποίο υπάρχει λύση και να αποδειχθεί ότι η λύση είναι μοναδική. Β. Να υπολογιστεί η ρίζα της εξίσωσης με τη χρήση του Mathematica. Γ. Να γραφτεί πρόγραμμα σε Fortran για τον υπολογισμό της ρίζας με ακρίβεια 6 σημαντικών ψηφίων, εφαρμόζοντας τις μεθόδους: 1. Διχοτόμησης ή Γραμμικής Παρεμβολής (να επιλεγεί μία από τις δύο), 2. Newton-Raphson, αφού αποδειχτεί ότι συγκλίνει, 3. Τέμνουσας. (Τα παραδοτέα θα είναι το πρόγραμμα για κάθε μέθοδο και τα αποτελέσματα των επαναλήψεων) Απάντηση: Α. Αρχικά, θα εξεταστεί αν ισχύει το κριτήριο Bolzano στο διάστημα [0,1] για τη συνάρτηση f(x) = e + x x 4 Πιο συγκεκριμένα: f(0) = 3 και f(1) = e 4 1,28172 Ισχύει ότι: f(0) f(1) > 0 Επομένως, στο διάστημα [0,1] η εξίσωση δεν έχει λύση. Στη συνέχεια εξετάζεται το διάστημα [1,2]. Πιο συγκεκριμένα: f(1) = e 4 1,28172 και f(2) = e 2 5,38906 Ισχύει ότι: f(1) f(2) < 0. Επομένως, θα υπάρχει τουλάχιστον μία λύση στο διάστημα [1,2]. Παραγωγίζοντας τη συνάρτηση προκύπτει: f (x) = e + 2x 1 Η πρώτη παράγωγος στο διάστημα [1,2] έχει θετικό πρόσημο, δηλαδή η συνάρτηση είναι γνησίως αύξουσα. Επομένως, η συνάρτηση θα έχει μία και μοναδική λύση στο διάστημα [1,2]. Β. Η επίλυση στο Mathematica βρίσκεται δίνοντας: FindRoot[e + x x 4,{x,1}] και προκύπτει: {x 1.28868}. 3
Επομένως, η ρίζα που αναζητάμε στο διάστημα [1,2] είναι η 1,28868. Γ. Στη συνέχεια φαίνεται ο πηγαίος κώδικας σε γλώσσα προγραμματισμού Fortran για τις διάφορες μεθόδους. Για κάθε μέθοδο, ο κώδικας γράφτηκε σε περιβάλλον Mandrake Linux 10.1 και μεταγλωττίστηκε με τον compiler g77 έκδοση 3.4.1. Με βάση τα δεδομένα της άσκησης, σαν κριτήριο τερματισμού της επαναληπτικής διαδικασίας για κάθε μέθοδο επιλέγεται: 1. Μέθοδος Διχοτόμησης x x 5 10 x Ο πηγαίος κώδικας είναι: program dixotomisi implicit none l,xr,xm,xold,err,f,tol integer i,maxiter tol=5.0d0*1.0d-6 maxiter=100 xl=1.0d0 xr=2.0d0 xold=xl open(unit=15,file="dixotomisi.txt") write(15,*) ' Dixotomisi' write(15,50) write(15,*) '----------------------------------' do i=1,maxiter xm=(xl+xr)/2.0d0 err=dabs((xm-xold)/xm) if ( err.le.tol) then write(15,100) i,xm,err exit else if ( f(xl)*f(xm).lt.0.0d0 ) then xr=xm else xl=xm if xold=xm write(15,100) i,xm,err do 4
50 format(2x,'i',9x,'x',13x,'error') 100 format(i3,2x,e14.7,2x,e14.7) close(15) stop double precision function f(x) f=exp(x)+x*x-x-4.0d0 Τα αποτελέσματα της επαναληπτικής διαδικασίας είναι: Dixotomisi i x error ---------------------------------- 1 0.1500000E+01 0.3333333E+00 2 0.1250000E+01 0.2000000E+00 3 0.1375000E+01 0.9090909E-01 4 0.1312500E+01 0.4761905E-01 5 0.1281250E+01 0.2439024E-01 6 0.1296875E+01 0.1204819E-01 7 0.1289062E+01 0.6060606E-02 8 0.1285156E+01 0.3039514E-02 9 0.1287109E+01 0.1517451E-02 10 0.1288086E+01 0.7581501E-03 11 0.1288574E+01 0.3789314E-03 12 0.1288818E+01 0.1894298E-03 13 0.1288696E+01 0.9472388E-04 14 0.1288635E+01 0.4736418E-04 15 0.1288666E+01 0.2368153E-04 16 0.1288681E+01 0.1184063E-04 17 0.1288673E+01 0.5920348E-05 18 0.1288677E+01 0.2960165E-05 Επομένως, στην 18 η επανάληψη προκύπτει η ρίζα της εξίσωσης 1,288678. Μέθοδος Γραμμικής Παρεμβολής Ο πηγαίος κώδικας είναι: program paremvoli implicit none l,xr,xm,xold,err,f,tol integer i,maxiter tol=5.0d0*1.0d-6 maxiter=100 5
xl=1.0d0 xr=2.0d0 xold=xl open(unit=15,file="paremvoli.txt") write(15,*) ' Paremvoli' write(15,50) write(15,*) '----------------------------------' do i=1,maxiter xm=xr-f(xr)*(xr-xl)/(f(xr)-f(xl)) err=dabs((xm-xold)/xm) if ( err.le.tol) then write(15,100) i,xm,err exit else if ( f(xl)*f(xm).lt.0.0d0 ) then xr=xm else xl=xm if xold=xm write(15,100) i,xm,err do 50 format(2x,'i',9x,'x',13x,'error') 100 format(i3,2x,e14.7,2x,e14.7) close(15) stop double precision function f(x) f=exp(x)+x*x-x-4.0d0 Τα αποτελέσματα της επαναληπτικής διαδικασίας είναι: Paremvoli i x error ---------------------------------- 1 0.1192139E+01 0.1611719E+00 2 0.1257808E+01 0.5220901E-01 3 0.1278952E+01 0.1653177E-01 4 0.1285628E+01 0.5192927E-02 5 0.1287723E+01 0.1626957E-02 6 0.1288379E+01 0.5093102E-03 7 0.1288584E+01 0.1593957E-03 8 0.1288649E+01 0.4988104E-04 6
9 0.1288669E+01 0.1560930E-04 10 0.1288675E+01 0.4884589E-05 Επομένως, στην 10 η επανάληψη προκύπτει η ρίζα της εξίσωσης 1,288678. 2. Μέθοδος Newton-Raphson Θα εξεταστεί αν ισχύει το θεώρημα σύγκλισης της μεθόδου. Πιο συγκεκριμένα: Η συνάρτηση f(x) = e + x x 4 είναι ορισμένη και δύο φορές συνεχώς παραγωγίσιμη στο διάστημα [1,2]. Ικανοποιείται το κριτήριο Bolzano (βλ. σελ. 3). Η f (x) = e + 2x 1 είναι διάφορη του μηδενός για κάθε x [1,2]. H f (x) = e + 2 διατηρεί σταθερό πρόσημο στο [1,2]. Για x = 1 η f (x) ελαχιστοποιείται στο [1,2] και ισχύει: f(1) 4 f = e 0,344707 < 2 1 = 1 (1) e + 1 Επομένως, μιας και ισχύουν όλα τα παραπάνω, το επαναληπτικό σχήμα της μεθόδου Newton- Raphson θα συγκλίνει στη λύση, που υπάρχει στο διάστημα [1,2]. Ο πηγαίος κώδικας είναι: program newton_rapshon implicit none l,xr,xnew,xold,err,f,df,tol integer i,maxiter tol= 5.0d0*1.0d-6 maxiter=100 xl=1.0d0 xr=2.0d0 xold=(xl+xr)/2.0d0 open(unit=15,file="newton.txt") write(15,*) ' Newton-Raphson' write(15,50) write(15,*) '----------------------------------' do i=1,maxiter xnew=xold-f(xold)/df(xold) err=dabs((xnew-xold)/xnew) if ( err.le.tol) then write(15,100) i,xnew,err exit if xold=xnew write(15,100) i,xnew,err 7
do 50 format(2x,'i',9x,'x',13x,'error') 100 format(i3,2x,e14.7,2x,e14.7) close(15) stop double precision function f(x) f=exp(x)+x*x-x-4.0d0 double precision function df(x) df=exp(x)+2.0d0*x-1.0d0 Τα αποτελέσματα της επαναληπτικής διαδικασίας είναι: Newton-Raphson i x error ---------------------------------- 1 0.1309974E+01 0.1450608E+00 2 0.1288920E+01 0.1633481E-01 3 0.1288678E+01 0.1876319E-03 4 0.1288678E+01 0.2452882E-07 Επομένως, στην 4 η επανάληψη προκύπτει η ρίζα της εξίσωσης 1,288678. 3. Μέθοδος της Τέμνουσας Ο πηγαίος κώδικας είναι: program temnousa implicit none l,xr,xnew,xold0,xold1,err,f,tol integer i,maxiter tol=5.0d0*1.0d-6 maxiter=100 xl=1.0d0 xr=2.0d0 xold1=xl xold0=(xl+xr)/2.0d0 open(unit=15,file="temnousa.txt") write(15,*) ' Temnousa' write(15,50) write(15,*) '----------------------------------' do i=1,maxiter 8
xnew=xold0-f(xold0)/((f(xold0)-f(xold1))/(xold0-xold1)) err=dabs((xnew-xold0)/xnew) if ( err.le.tol) then write(15,100) i,xnew,err exit if xold1=xold0 xold0=xnew write(15,100) i,xnew,err do 50 format(2x,'i',9x,'x',13x,'error') 100 format(i3,2x,e14.7,2x,e14.7) close(15) stop double precision function f(x) f=exp(x)+x*x-x-4.0d0 Τα αποτελέσματα της επαναληπτικής διαδικασίας είναι: Temnousa i x error ---------------------------------- 1 0.1254976E+01 0.1952418E+00 2 0.1285039E+01 0.2339462E-01 3 0.1288745E+01 0.2875553E-02 4 0.1288678E+01 0.5218073E-04 5 0.1288678E+01 0.1025583E-06 Επομένως, στην 5 η επανάληψη προκύπτει η ρίζα της εξίσωσης 1,288678. 9