Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
f]
c
ITERAZIONE 0
iter=0
INIZIALIZZAZIONE DELLO SCARTO
dk=10.d0*tol
dkold=1.d0
write(6,2) 'k','xk','f(xk)','dk','asint1','asint2'
c
c
C
c
c
1
2
CICLO DO WHILE
do while((dk.ge.tol).and.(iter.le.itmax))
iter=iter+1
SCHEMA ITERATIVO
xkp1=xk-(f(xk)/df(xk))
SCARTO:errore in condizioni di convergenza cio quanto mi discosto dalla soluzione
pensando che la csi sia Xn+1
dk=abs(xkp1-xk)
in asint2 uso lo scartold elevato alla seconda perch la convergenza quadratica
asint1:M:A=|(f''(csi))/(2(f'(csi)| ricavato da svilpuppi di taylor...
asint2=abs(d2f(xkp1))/abs(2*df(xkp1))
asint1=dk/dkold**2
write(6,1) iter,xkp1,f(xkp1),dk,asint1,asint2
format(i3,2x,f15.8,2x,e15.7,2x,e15.7,2x,e15.7,2x,e15.7)
format(2x,a,10x,a,13x,a,14x,a,12x,a,12x,a)
c
c
Page 1 [E:\esercitazioni\problema1\regfalsi.f]
c
c
c
c
c
c
c
c
CICLO DO WHILE
do while ((dk.ge.tol).and.(iter.le.itmax))
iter=iter+1
c
c
SCHEMA ITERATIVO
inserisco la c per non appesantire troppo la formula
xkp1=xoldn-h(xoldn)*((xoldn-xold)/(h(xoldn)-h(xold)))
SCARTO: differenza tra due iterazione successive
dk=abs(xoldn-xold)
ASINT
in asint2 scartold elevato alla 1.618 perch la convergenza super lineare
asint2=abs((d2h(xkp1))/(abs(2*dh(xkp1))))**0.618
asint1=dk/(dkold**1.618)
write(6,1)iter,xkp1,h(xkp1),dk,asint1,asint2
format(i3,3x,f15.8,3x,e15.8,5x,e15.8,5x,e15.8,3x,e15.8)
format(2x,a,12x,a,12x,a,15x,a,18x,a,11x,a)
AGGIORNAMENTO DELLE VARIABILI (aggiornare 2 perch ho bisogno di due punti)
xold=xoldn
xoldn=xkp1
c
c
c
1
2
c
c
c
FUNCTION
funzione h(x)
real*8 function h(x)
implicit none
real*8 x
h=log(x+2)-2*x
return
end
Page 2 [E:\esercitazioni\problema1\regfalsi.f]
implicit none
real*8 x
d2h=-1/(x+2)**2
return
end
Page 1 [E:\esercitazioni\problema1\fisso.f]
c
c
C
C
FUNCTION che vanno scritte in fondo al programma e vengono richiamate dove servono
dal return
c
funzione g(x)
real*8 function g(x)
implicit none
real*8 x
g=log(x+2)/2
return
end
c
Page 2 [E:\esercitazioni\problema1\fisso.f]
real*8 function dg(x)
implicit none
real*8 x
dg=1/(2*(x+2))
return
end