Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lista01_Q09
- implicit none
- integer, parameter :: prec9 = selected_real_kind(p=9)
- real (kind=prec9) :: root, bissecMethod, falsaPosMethod, a, b
- print *, 'Entre com o inicio e fim do intervalo'
- read *, a, b
- root = bissecMethod(a, b)
- print *, 'Com o metodo da bisseccao', root
- root = falsaPosMethod(a, b)
- print *, 'Com o metodo da falsa posicao', root
- end program
- function f(x)
- implicit none
- integer, parameter :: prec9 = selected_real_kind(p=9)
- real (kind = prec9) :: f, x
- f = cos(x) + 1 - x
- end function f
- function bissecMethod(a, b)
- implicit none
- integer, parameter :: prec9 = selected_real_kind(p=9)
- real (kind = prec9) :: intervalIni, intervalEnd, c, fcVal, f, bissecMethod, a, b
- integer :: i
- intervalIni = a
- intervalEnd = b
- do i = 1, 100
- c = (intervalIni + intervalEnd) / 2
- fcVal = f(c)
- if(abs(fcVal) < 0.00000001) then
- exit
- end if
- if(f(a) < 0.0) then
- if(fcVal < 0.0) then
- intervalIni = c
- else
- intervalEnd = c
- end if
- else
- if(fcVal < 0) then
- intervalEnd = c
- else
- intervalIni = c
- end if
- end if
- end do
- bissecMethod = c
- end function bissecMethod
- function falsaPosMethod(a, b)
- implicit none
- integer, parameter :: prec9 = selected_real_kind(p=9)
- real (kind = prec9) :: intervalIni, intervalEnd, c, fcVal, faVal, fbVal, f, falsaPosMethod, a, b
- integer :: i
- intervalIni = a
- intervalEnd = b
- do i = 1, 100
- faVal = f(intervalIni)
- fbVal = f(intervalEnd)
- c = intervalEnd - fbVal * (intervalEnd - intervalIni) / (fbVal - faVal)
- fcVal = f(c)
- if(abs(fcVal) < 0.00000001) then
- exit
- end if
- if(f(a) < 0.0) then
- if(fcVal < 0.0) then
- intervalIni = c
- else
- intervalEnd = c
- end if
- else
- if(fcVal < 0) then
- intervalEnd = c
- else
- intervalIni = c
- end if
- end if
- end do
- falsaPosMethod = c
- end function falsaPosMethod
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement