ΜΗ-ΓΡΑΜΜΙΚΕΣ
ΕΞΙΣΩΣΕΙΣ
Ι.
ΜΕΘΟΔΟΙ ΔΥΟ
ΑΡΧΙΚΩΝ
ΣΗΜΕΙΩΝ
ΜΕΘΟΔΟΣ ΔΙΧΟΤΟΜΗΣΗΣ
(BOLZANO)
Κατασκευάζω
μια συνάρτηση
και την
δοκιμάζω.
function f(x)
real*8
f,x
f=dexp(x)-x**2d0
return
end
program
BolzanoRF
real*8
f,x1,x2,x3
print *,’x1=’
read
*, x1
print *,’f1=’,f(x1)
print *,’x2=’
read
*, x2
print *,’f2=’,f(x2)
pause
end
Βρείτε δυο
τιμές x1 και x2 για
τις οποίες η
συνάρτηση είναι
ετερόσημη, δηλ. f(x1)f(x2)<0.
Βρίσκω το
πρόσημο της
συνάρτησης στο
μέσο του
διαστήματος x1x2.
program BolzanoRF
real*8 f,x1,x2,x3
print *,’x1=’
read *, x1
print *,’f1=’,f(x1)
print *,’x2=’
read *, x2
print *,’f2=’,f(x2)
pause
x3=(x1+x2)/2d0
print *,'(x1,x3,x2)=', x1 , x3 , x2
print *,'(f1,f3,f2)=',f(x1),f(x3),f(x2)
pause
end
Αν είναι, τότε
το καινούριο
μου διάστημα
είναι το x1x3 και
άρα θέτω x2=x3.
Αν δεν είναι,
τότε σίγουρα
το x2
είναι
ετερόσημο του x3. Σ’
αυτήν την
περίπτωση, το
καινούριο μου
διάστημα είναι
το x2x3 και
άρα θέτω x1=x3.
print *,’x2=’
read *, x2
print *,’f2=’,f(x2)
pause
x3=(x1+x2)/2d0
print *,'(x1,x3,x2)=', x1 , x3
, x2
print *,'(f1,f3,f2)=',f(x1),f(x3),f(x2)
if
(f(x1)*f(x3).lt.0d0) then
x2=x3
else
x1=x3
end
if
pause
print *,'(x1,x2)=', x1 , x2
print *,'(f1,f2)=',f(x1),f(x2)
pause
end
Στην αρχή
ήξερα ότι η
ρίζα της
εξίσωσης
βρίσκεται στο
διάστημα x1x2 αλλά
τώρα ξέρω ότι η
ρίζα βρίσκεται
π.χ. στο διάστημα
x3x2,
δηλαδή έχω
περιορίσει τη
ρίζα στο μισό
από το αρχικό
μου διάστημα
(διχοτόμησα το
αρχικό μου
διάστημα)!
Επαναλαμβάνω
τη διαδικασία
διχοτόμησης
αρκετές φορές.
print *,’x2=’
read *,x2
print *,’f2=’,f(x2)
pause
11 x3=(x1+x2)/2d0 σ’ αυτό
το σημείο βάζω
την «ετικέτα» 11
print *,'(x1,x3,x2)=',x1,x3,x2
print *,'(f1,f3,f2)=',f(x1),f(x3),f(x2)
if
(f(x1)*f(x3).lt.0d0) then
x2=x3
else
x1=x3
end if
pause
print *,'(x1,x2)=',x1,x2
print *,'(f1,f2)=',f(x1),f(x2)
pause
if (dabs(f(x3)).gt.1d-5) goto 11 το if κατευθύνει
τη ροή του
προγράμματος
πίσω στο σημείο
11
δημιουργώντας
έτσι ένα «λογικό
βρόχο»
print *,'Root:
(x3,f3)=',x3,f(x3)
pause
end
Έχω βρει τη
ρίζα! (‘Η,
καλύτερα, έχω
βρει ένα x3 που
είναι πάρα
πολύ κοντά στη
ρίζα της
δοθείσας εξίσωσης)
ΜΕΘΟΔΟΣ
ΓΡΑΜΜΙΚΗΣ
ΠΑΡΕΜΒΟΛΗΣ (REGULA FALSI)
Για τη
μέθοδο της
γραμμικής παρεμβολής
χρησιμοποιώ
τον τύπο
αντί του
τύπου .
ΜΕΘΟΔΟΣ
ΓΡΑΜΜΙΚΗΣ
ΠΑΡΕΜΒΟΛΗΣ
(τροποποιημένος
αλγόριθμος)
Για
γρηγορότερη
σύγκλιση
χρησιμοποιώ τη
συνθήκη αντί της
συνθήκης
.