Δίνεται η εξίσωση e^x – 2x – 1 = 0. Να γραφεί πρόγραμμα το οποίο να βρίσκει μια ρίζα της εξίσωσης αυτής στο διάστημα [1,2] με τη μέθοδο της διχοτόμησης, όπως περιγράφηκε στην παράγραφο 4.3 του βιβλίου σου.
…” Ο τρόπος που λειτουργεί η δυαδική αναζήτηση είναι ανάλογος με αυτόν της μεθόδου της διχοτόμησης. Η μέθοδος της διχοτόμησης (ή του Bolzano) χρησιμοποιείται για την εύρεση μιας ρίζας της εξίσωσης f(x)=0 στο διάστημα [a, b]. Ως γνωστό, στο διάστημα αυτό υπάρχει μία τουλάχιστον ρίζα, αν ισχύει f(a).f(b)<0 (για την ακρίβεια μπορεί να υπάρχει περιττός αριθμός ριζών). Με τη μέθοδο της διχοτόμησης βρίσκεται ένα σημείο x1 ( = (a+b)/2) στο μέσο του διαστήματος [a, b] και εξετάζεται, αv f(a).f(x1)<0. Αν ναι, τότε η ρίζα υπάρχει στο διάστημα [a, x1], αλλιώς στο [x1, b]. Στη συνέχεια βρίσκεται το μέσο x2 του υποδιαστήματος που υπάρχει η ρίζα και επαναλαμβάνονται τα ίδια. Έτσι σε κάθε επανάληψη εξαιρείται από την έρευνα το μισό διάστημα και προφανώς η ακολουθία τιμών x1, x2,… συγκλίνει προς τη ρίζα της εξίσωσης. Η διαδικασία τερματίζεται, όταν η προσέγγιση της ρίζας θεωρείται ικανοποιητική.”
ΛΥΣΗ
ΠΡΟΓΡΑΜΜΑ Διχοτόμηση ΣΤΑΘΕΡΕΣ ΔΧ=0.1 ! Η προσέγγιση στη ρίζα ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ:Χ1,Χ2, ΜΕΣΟ, ΓΙΝ ΑΡΧΗ ΓΡΑΨΕ 'ΔΩΣΕ Χ1,Χ2' ΔΙΑΒΑΣΕ Χ1, Χ2 ΓΙΝ <-- F(Χ1)*F(Χ2) ΑΝ ΓΙΝ > 0 ΤΟΤΕ ΓΡΑΨΕ 'Η ΕΞΙΣΩΣΗ ΔΕΝ ΕΧΕΙ ΛΥΣΗ ΣΤΟ ΠΕΔΙΟ [', Χ1, Χ2, ']' ΑΛΛΙΩΣ ΟΣΟ Α_Τ(Χ1-Χ2)>ΔΧ ΕΠΑΝΑΛΑΒΕ ΜΕΣΟ <-- (Χ1+Χ2)/2 ΓΙΝ <-- F(Χ1)*F(ΜΕΣΟ) ΑΝ ΓΙΝ <0 ΤΟΤΕ Χ1 <-- ΜΕΣΟ ΑΛΛΙΩΣ Χ2 <-- ΜΕΣΟ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'Η ΡΙΖΑ ΤΗΣ ΕΞΙΣΩΣΗΣ ΕΙΝΑΙ ', ΜΕΣΟ, 'ΜΕ ΠΡΟΣΕΓΓΙΣΗ', ΔΧ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΥΝΑΡΤΗΣΗ F(Α) : ΠΡΑΓΜΑΤΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Α ΑΡΧΗ F<--Ε(Α)-2*Α-1 ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Νομίζω έχει κάποια λαθάκια ο κώδικας, θα πρέπει η `ΑΝ` στο μέσο της άσκησης να είναι:
“`
ΓΙΝ <- F(Χ1)* F(ΜΕΣΟ)
ΑΝ ΓΙΝ < 0 ΤΟΤΕ
Χ2 <- ΜΕΣΟ
ΑΛΛΙΩΣ
Χ1 <- ΜΕΣΟ
ΤΕΛΟΣ_ΑΝ
“`
Έχετε δίκιο. Ευχαριστώ πάρα πολύ για την συνεισφορά στη συντήρηση του κώδικα. Πρόσθεσα κι έναν αρχικό έλεγχο για το πεδίο όπως και manual εισαγωγή των τιμών. Μακάρι να έχετε το χρόνο να το τεστάρετε ξανά κι εσείς.