Professional Documents
Culture Documents
ax2 + bx + c = 0,
η οποία, ως γνωστόν, έχει δύο πραγµατικές λύσεις (ϱίζες) οι οποίες δίδονται από
τον τύπο :
√
−b ± b2 − 4ac
x1,2 = ,
2a
εφόσον ∆ = b2 − 4ac ≥ 0. Θα υποθέσουµε στην συνέχεια ότι ∆ ≥ 0 .
Σε µία τέτοια περίπτωση, ο υπολογισµός των ϱιζών σύµφωνα µε τον δεδοµένο τύπο
ϑ΄ απαιτούσε τους υπολογισµούς :
p
6 · 1030 ± (6 · 1030 )2 − 4 · 1030 · 5 · 1030
x1,2 =
2 · 1030
Σύµφωνα όµως µε την υπόθεσή µας, ο αριθµός 1060 δεν είναι δυνατόν να αν-
τιπροσωπευθεί στον υπολογιστή µας. Συνεπώς ο υπολογισµός ϑα οδηγήσει σε
υπερ(εκ)χείλιση (overflow).
έτσι ώστε όλοι οι συντελεστές της να κείνται στο διάστηµα [−1, 1].
Βέβαια κάτι τέτοιο δεν αποτελεί πανάκεια. Εάν π.χ. είχαµε την εξίσωση
Η επόµενη εξίσωση έχει δύο ϱίζες όπου η µία υπερέχει κατά πολύ της άλλης σε
απόλυτη τιµή. Η εξίσωση x2 − 106 x + 1 = 0 έχει δύο πραγµατικές ϱίζες που, για
ακρίβεια έξι σηµαντικών ψηφίων, είναι 10−6 και 106 αντίστοιχα. Η εφαρµογή όµως
του κλασσικού τύπου οδηγεί στην ανάγκη υπολογισµού του
p
106 ± (106 )2 − 4
2
0.1. ΕΚΧΕΙΛΙΣΕΙΣ ΚΑΤΑ ΤΗΝ ΕΠΙΛΥΣΗ ΤΕΤΡΑΓΩΝΙΚΗΣ ΕΞΙΣΩΣΗΣ 3
Για τον υπολογισµό της δεύτερης ϱίζας παρατηρούµε ότι το γινόµενο των δύο ϱιζών
ισούται µε το ac . Συνεπώς, η δεύτερη ϱίζα λαµβάνεται διαιρώντας το ac µε την πρώτη
ϱίζα.
6
Για το συγκεκριµένο παράδειγµα, επειδή το √ −(−10 ) είναι ϑετικό, υπολογίζουµε
την πρώτη ϱίζα για το ϑετικό πρόσηµο της b2 − 4ac, οπότε έχουµε (106 + 106 )/2
ή 106 . Η δεύτερη ϱίζα υπολογίζεται συνεπώς ως (1/1)/106 ή 10−6 .
2
Κατά συνθήκη και παράδοση αποδίδουµε τους γλωσσικούς όρους της Fortran µε κεφαλαία
χωρίς αυτό ν᾿ αποτελεί αναγκαίο στυλιστικό στοιχείο.
4
Μία αντίστοιχη υλοποίηση στην γλώσσα προγραµµατισµού των 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
0.2 Ασκήσεις
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]
7. Υπολόγισε 0.348+ 0.1834+ 345.4 + 235.2 + 11.75 + 9.27+ 0.0849 + 0.0214 + 0.000354
όταν όλα τα ψηφία των αριθµών είναι ορθά.
[Απάντηση : 602.2 µε ǫ = 0.15]
9. Υπολόγισε 5.125 − 5.135 όταν όλα τα ψηφία των αριθµών είναι ορθά. Ποιο είναι το
σχετικό σφάλµα ;
[Απάντηση : δ = 10%]
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.]
Εργαστηριακή ΄Ασκηση 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 έτσι ώστε να χειρίζονται
και την περίπτωση µιγαδικών λύσεων. ◭