You are on page 1of 7

0.1.

ΕΚΧΕΙ˟ΙΣΕΙΣ ΚΑԟΑ ΤΗΝ ΕПΙΛΥΣΗ ΤΕΤΡΑΓΩΝΙʟΗΣ ΕΟΙΣΩΣΗΣ 1

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


Εξίσωσης

Θεώρησε, για a 6= 0 την τετραγωνική εξίσωση

ax2 + bx + c = 0,

η οποία, ως γνωστόν, έχει δύο πραγµατικές λύσεις (ϱίζες) οι οποίες δίδονται από
τον τύπο :

−b ± b2 − 4ac
x1,2 = ,
2a
εφόσον ∆ = b2 − 4ac ≥ 0. Θα υποθέσουµε στην συνέχεια ότι ∆ ≥ 0 .

Για παράδειγµα, η εξίσωση x2 −6x+5 = 0 έχει τις ακριβείς ϱίζες x1 = 5 και x2 = 1.

Η εξίσωση 1030 x2 − 6 · 1030 x + 5 · 1030 = 0 είναι µαθηµατικά ισοδύναµη µε την


προηγούµενη και συνεπώς έχει τις ίδιες ακριβείς ϱίζες x1 = 5 και x2 = 1.

Ας ϑεωρήσουµε τώρα ότι ο υποθετικός, δεκαδικού συστήµατος, υπολογιστής µας1


µας έχει ακρίβεια αναπαράστασης (precision) 6 δεκαδικών ψηφίων και εκθετικό
εύρος (exponent range) e ∈ [−40, 40].

Σε µία τέτοια περίπτωση, ο υπολογισµός των ϱιζών σύµφωνα µε τον δεδοµένο τύπο
ϑ΄ απαιτούσε τους υπολογισµούς :

p
6 · 1030 ± (6 · 1030 )2 − 4 · 1030 · 5 · 1030
x1,2 =
2 · 1030

Σύµφωνα όµως µε την υπόθεσή µας, ο αριθµός 1060 δεν είναι δυνατόν να αν-
τιπροσωπευθεί στον υπολογιστή µας. Συνεπώς ο υπολογισµός ϑα οδηγήσει σε
υπερ(εκ)χείλιση (overflow).

Οµοίως εάν η αρχική εξίσωση είχε πολλαπλασιασθεί µε 10−30 , οι υπολογισµοί


στον υποθετικό υπολογιστή ϑα οδηγούσαν σε υπο(εκ)χείλιση (underflow). Εάν
1
32-bits PC είναι πολύ κοντά σ΄ αυτήν την υπόθεση στην περίπτωση απλής ακρίβειας (single
precision) αναπαράστασης αριθµών κινητής υποδιαστολής.
2

ο υπολογιστής αντιστοιχούσε την τιµή 0 στην υποεκχείλιση, τότε ϑα παρήγαγε τις


λύσεις :
p
6 · 10−30 ± (6 · 10−30 )2 − 4 · 10−30 · 5 · 10−30
x1,2 =
√ 2 · 10−30
6 · 10−30 ± 0
=
2 · 10−30
= 3, 3

οι οποίες δεν αντιστοιχούν στις πραγµατικές.

΄Ενας τρόπος καταπολέµησης αυτών των ϕαινοµένων ϑα ήταν ενδεχοµένως η χρή-


ση της διαδικασίας αλλαγής κλίµακας (scaling), να διαιρείται δηλαδή πάντοτε η
εξίσωση µε τον συντελεστή κλίµακας (scaling factor)

f = max{|a|, |b|, |c|}

έτσι ώστε όλοι οι συντελεστές της να κείνται στο διάστηµα [−1, 1].

Βέβαια κάτι τέτοιο δεν αποτελεί πανάκεια. Εάν π.χ. είχαµε την εξίσωση

10−20 x2 + 1020 x + 1020 = 0


µε την µία ϱίζα κοντά στο −1 και την άλλη κοντά στο −1040 , η διαίρεση µε των
συντελεστών µε το 1020 ϑα οδηγούσε σε υποεκχείλιση και ενδεχοµένως στην αντικα-
τάσταση του συντελεστή του x2 µε 0, οπότε η εξίσωση που ουσιαστικά ϑα επιλύαµε
είναι η x+1 = 0 µε µοναδική ϱίζα την −1. Η δεύτερη ϱίζα ϑα είχε χαθεί. Και ακόµη
χειρότερα, εάν το γεγονός αυτό δεν εντοπίζονταν έγκαιρα ϑα οδηγούµεθα σε διαί-
ϱεση µε το 0 και σε ολική κατάρευση των υπολογισµών λόγω της συνεπαγόµενης
υπερεκχείλισης.

Η επόµενη εξίσωση έχει δύο ϱίζες όπου η µία υπερέχει κατά πολύ της άλλης σε
απόλυτη τιµή. Η εξίσωση x2 − 106 x + 1 = 0 έχει δύο πραγµατικές ϱίζες που, για
ακρίβεια έξι σηµαντικών ψηφίων, είναι 10−6 και 106 αντίστοιχα. Η εφαρµογή όµως
του κλασσικού τύπου οδηγεί στην ανάγκη υπολογισµού του
p
106 ± (106 )2 − 4
2
0.1. ΕΚΧΕΙ˟ΙΣΕΙΣ ΚΑԟΑ ΤΗΝ ΕПΙΛΥΣΗ ΤΕΤΡΑΓΩΝΙʟΗΣ ΕΟΙΣΩΣΗΣ 3

∆εδοµένων των σφαλµάτων στρογγυλοποίησης, επειδή το 4 δεν προσθέτει σηµαντι-


κά στο 1012 , ο υπολογισµός αυτός αντιστοιχεί – για τον υποθετικό υπολογιστή µας
– στο
p
106 ± (106 )2
2
Η κατάληξη αυτών των υπολογισµών είναι η 106 , που είναι σωστή λύση, και η 0,
που δεν είναι καθόλου σωστή.

΄Ενας τρόπος αποφυγής αυτής της


√κατάστασης είναι να υπολογίζεται πρώτα η ϱίζα
για την οποία το πρόσηµο του b2 − 4ac είναι το ίδιο µε το πρόσηµο του −b.
Ο σκοπός είναι η εξάλειψη του καταστροφικού σφάλµατος αλληλοεξάλειψης που
προκύπτει όταν αφαιρούµε δύο σχεδόν ίσους αριθµούς.

Για τον υπολογισµό της δεύτερης ϱίζας παρατηρούµε ότι το γινόµενο των δύο ϱιζών
ισούται µε το ac . Συνεπώς, η δεύτερη ϱίζα λαµβάνεται διαιρώντας το ac µε την πρώτη
ϱίζα.
6
Για το συγκεκριµένο παράδειγµα, επειδή το √ −(−10 ) είναι ϑετικό, υπολογίζουµε
την πρώτη ϱίζα για το ϑετικό πρόσηµο της b2 − 4ac, οπότε έχουµε (106 + 106 )/2
ή 106 . Η δεύτερη ϱίζα υπολογίζεται συνεπώς ως (1/1)/106 ή 10−6 .

Η ακόλουθη υπορουτίνα σε Fortran 952 υλοποιεί τις προηγούµενες παρατηρήσεις :


SUBROUTINE quad_eq ( a , b , c , x1 , x2 , e rro r )
IMPLICIT NONE
REAL, INTENT ( IN ) : : a , b , c
REAL, INTENT (OUT) : : x1 , x2
LOGICAL, INTENT (OUT) : : e rro r
REAL : : a0 , b0 , c0 , f , d
x1 = 0 . 0 ; x2 = 0.0
e rro r = a==0.0; IF ( e rro r ) RETURN
f = MAX( ABS( a ) , ABS( b ) , ABS( c ) )
a0 = a/ f ; b0 = b/ f ; c0 = c/ f
e rro r = a0==0.0; IF ( e rro r ) RETURN
d = b0 ∗ b0 − 4.0 ∗ a0 ∗ c0
e rro r = d<0.0; IF ( e rro r ) RETURN
d = SQRT( d )

2
Κατά συνθήκη και παράδοση αποδίδουµε τους γλωσσικούς όρους της Fortran µε κεφαλαία
χωρίς αυτό ν᾿ αποτελεί αναγκαίο στυλιστικό στοιχείο.
4

IF ( b0 > 0.0 ) THEN


x1 = ( −b0 − d ) / ( a0 + a0 )
ELSE
x1 = ( −b0 + d ) / ( a0 + a0 )
ENDIF
x2 = ( c0/a0 ) / x1
END SUBROUTINE quad_eq

Μία αντίστοιχη υλοποίηση στην γλώσσα προγραµµατισµού των Scilab, Octave και
Matlab δίδεται από τον κάτωθι κώδικα :
function [ x1 , x2 ] = quad_eq ( a , b , c )
x1 = NaN; x2 = NaN;
i f ( a == 0.0 )
return ;
end ;
f = max( [ abs ( a ) , abs ( b ) , abs ( c ) ] ) ;
a0 = a/ f ; b0 = b/ f ; c0 = c/ f ;
i f ( a0 == 0.0 )
return ;
end ;
d = b0 ∗ b0 − 4.0 ∗ a0 ∗ c0 ;
i f ( d < 0.0 )
return ;
end ;
d = sqrt ( d ) ;
i f ( b0 > 0.0 )
x1 = ( −b0 − d ) / ( a0 + a0 ) ;
else
x1 = ( −b0 + d ) / ( a0 + a0 ) ;
end ;
x2 = ( c0/a0 ) / x1 ;
end

Βέβαια η προεπιλογή στα συστήµατα αυτά είναι αριθµοί κινητής υποδιαστολής


διπλής ακρίβειας, ενώ στον αντίστοιχο κώδικα της Fortran προσδιορίσαµε τους
αριθµούς ως απλής ακρίβειας οπότε τ΄ αποτελέσµατα µπορεί να είναι δραµατικά
διαφορετικά. Μπορούµε όµως να απαιτήσουµε διπλή ακρίβεια καθορίζοντας τους
ορισµούς των µεταβλητών ως εξής :
0.2. ΑΣʟΗΣΕΙΣ 5

DOUBLE PRECISION, INTENT ( IN ) : : a , b , c


DOUBLE PRECISION, INTENT (OUT) : : x1 , x2
DOUBLE PRECISION : : a0 , b0 , c0 , f , d

0.2 Ασκήσεις

΄Ασκηση 0.1 Ασκήσεις κατανόησης

1. Να στρογγυλοποιηθούν οι κάτωθι αριθµοί σε τρία σηµαντικά ψηφία και να υπολο-


γιστούν τ΄ απόλυτα και σχετικά σφάλµατα των προσεγγίσεων που προκύπτουν.
(α) 2.1514, (ϐ) 0.16152, (γ) 0.01204, (δ)1.225, (ε) −0.0015281.
[Απαντήσεις : (α) ā = 2.15, ǫ = 0.14 × 10−2 , δ = 0.65 × 10−3 , (ϐ) ā = 0.162, ǫ =
0.48 × 10−3 , δ = 0.3 × 10−2 , (γ) ā = 0.0120, ǫ = 0.4 × 10−4 , δ = 0.33 × 10−2 , (δ)
ā = 1.23, ǫ = 0.5 × 10−2 , δ = 0.41 × 10−2 , (ε) ā = −0.00153, ǫ = 0.19 × 10−5 , δ =
0.12 × 10−2 ]
2. Να εκτιµηθεί τ΄ απόλυτο σφάλµα των κάτωθι προσεγγίσεων όταν είναι γνωστό το
σχετικό τους σφάλµα :
(α) ā = 13267, δ = 0.1%, (ϐ) ā = 2.32, δ = 0.7%, (γ) ā = 35.72, δ = 1%, (δ)
ā = 0.896, δ = 10%, (ε) ā = 232.44, δ = 1%
[Απαντήσεις : (α) 0.13 × 102 , (ϐ) 0.16 × 10−1 , (γ) 0.36 (δ) 0.9 × 10−1 , (ε) 0.23 × 101 ]

3. Ποιος είναι ο αριθµός ορθών ψηφίων στους κάτωθι αριθµούς µε δεδοµένα τ΄ απόλυτα
σφάλµατα ;
(α) ā = 0.3941, ǫ = 0.25 × 10−2 , (ϐ) ā = 0.1132, ǫ = 0.1 × 10−3 , (γ) ā = 38.2543, ǫ =
0.27 × 10−2 , (δ) ā = −32.285, ǫ = 0.2 × 10−2 , (ε) ā = −0.2113, ǫ = 0.5 × 10−2
[Απαντήσεις : (α) 2, (ϐ) 3, (γ) 4, (δ) 4, (ε) 2]

4. Ποιος είναι ο αριθµός ορθών ψηφίων στους κάτωθι αριθµούς µε δεδοµένα τα σχετικά
σφάλµατα ;
(α) ā = 1.8921, δ = 0.1×10−2 , (ϐ) ā = 0.2218, δ = 0.1×10−1 , (γ) ā = 22.351, δ = 0.1,
(δ) ā = 592.8, δ = 2%, (ε) ā = 14.9360, δ = 1%
[Απαντήσεις : (α) 3, (ϐ) 2, (γ) 1, (δ) 1, (ε) 2]

5. Ποια είναι τ΄ απόλυτα σφάλµατα όταν στρογγυλοποιούµε τον αριθµό π = 3.1415926535 . . .


σε πέντε, τέσσερα και τρία σηµαντικά ψηφία ;
[Απάντηση : 0.5 × 10−4 , 0.5 × 10−3 και 0.5 × 10−2 αντίστοιχα.]
6

6. Ποιο είναι το σχετικό σφάλµα όταν προσεγγίζουµε τον π µε π̄ = 3.14;


[Απάντηση : 16 %]

7. Υπολόγισε 0.348+ 0.1834+ 345.4 + 235.2 + 11.75 + 9.27+ 0.0849 + 0.0214 + 0.000354
όταν όλα τα ψηφία των αριθµών είναι ορθά.
[Απάντηση : 602.2 µε ǫ = 0.15]

8. Υπολόγισε 1.137 − 1.073 όταν ǫ1 = ǫ2 = 0.011.


[Απάντηση : 0.064 µε ǫ = 0.022 και δ = 35%. Κανένα ορθό ψηφίο !]

9. Υπολόγισε 5.125 − 5.135 όταν όλα τα ψηφία των αριθµών είναι ορθά. Ποιο είναι το
σχετικό σφάλµα ;
[Απάντηση : δ = 10%]

10. Υπολόγισε το 0.348+0.1834+345.4+235.2+11.75+9.27+0.0849+0.0214+0.000354


όταν οι αριθµοί δίδονται µε σφάλµα 10−t , t η ϑέση του τελευταίου δεκαδικού ψηφίου
που διατηρούν.
[Απάντηση : 602.2 ± 0.3]

11. Υπολόγισε το 3.6 × 84.489 όταν όλα τα ψηφία των δύο αριθµών είναι ορθά.
[Απάντηση : 304.20 µε δύο µόνον ορθά σηµαντικά ψηφία]

12. Υπολόγισε το 12.4 × 65.54 όταν όλα τα ψηφία των δύο αριθµών είναι ορθά.
[Απάντηση : 813 ± 4]

13. Υπολόγισε το 5.735 ÷ 1.23 όταν όλα τα ψηφία των δύο αριθµών είναι ορθά.
[Απάντηση : 4.66 ± 0.03 µε δ = 0.0042.]

14. Υπολόγισε 3.2×356.7×0.04811


7.1948×34.56 όταν όλα τα ψηφία των αριθµών είναι ορθά.
[Απάντηση : 0.221 µε δ = 1.6% και ǫ = 0.0036. Στρογγυλοποίηση σε 0.22 µε ǫ <
0.005] ◭

Εργαστηριακή ΄Ασκηση 0.1 Χρησιµοποίησε τους κώδικες της § 0.1 στις εξισώσεις που
αναφέρονται στα παραδείγµατα της § 0.1. Κάνε τις κατάλληλες µετατροπές για να ελέγξεις
τους ισχυρισµούς της § 0.1. Χρησιµοποίησε απλή και διπλή ακρίβεια. Συµφωνούν τα
συµπεράσµατα της § 0.1 µε τα εργαστηριακά σου ευρήµατα ; Είναι αναγκαία η διπλή
ακρίβεια ; ◭
0.2. ΑΣʟΗΣΕΙΣ 7

Εργαστηριακή ΄Ασκηση 0.2 Για την εξίσωση x2 + 106 x + 1 = 0 έλεγξε τόσο σε απλή
όσο και σε διπλή ακρίβεια εάν οι λύσεις της µπορούν να υπολογισθούν µε το παραδοσιακό
τύπο ή µε τους κώδικες της § 0.1. Είναι αναγκαία η διπλή ακρίβεια ; ◭

Εργαστηριακή ΄Ασκηση 0.3 Επέκτεινε τους κώδικες της § 0.1 έτσι ώστε να χειρίζονται
και την περίπτωση µιγαδικών λύσεων. ◭

You might also like