!!============================================================================= !! MODULE rootFMM !!============================================================================= ! Procedury Zeroin, BrentZero z knihy ! "Computer Methods for Mathematical Computations", ! by George E. Forsythe, Michael A. Malcolm, and Cleve B. Moler ! Prentice-Hall, 1977. ! ! Prepis pro Fortran 90: ! Last updated: 28 February 2005 by Ralph Carmichael ralph@pdas.com ! Public Domain Aeronautical Software ! P.O. Box 1438 Santa Cruz CA 95061 USA ! ! Upravy pro g95 ! Jan Cely, UFKL,Prirodovedecka fakulta MU, unor 2007 ! Verse 1.0 (rootFMMVer="1.0"), unor 2008 ! !****************************************************************************** ! ! Moduly vytvorene z procedur v FMM se ukladaji do knihovny libFMM ! !!============================================================================= !! V procedurach REAL(SP|DP) znaci single|double precision !!============================================================================= !! FUNCTION Zeroin(a,b,F,tol) result(z) !! Vraci koren z rovnice F(x)=0 v intervalu s presnosti tol !! VSTUP !! a, b okraje intervalu v nemz se hleda koren F(x)=0 !! F funkce F(x) deklarovana takto !! FUNCTION F(x) RESULT(g) !! IMPLICIT NONE !! INTEGER,PARAMETER :: FP = selected_real_kind(X) !! REAL(FP),INTENT(IN):: x !! REAL(FP):: g !! END Function F !! kde FP = SP|DP je-li X = 4|8 !! tol velikost intervalu v nemz se pozaduje lokalizace korene !!----------------------------------------------------------------------------- !! SUBROUTINE BrentZero(ax,bx,F,tol,maxIter,neval,errCode,xZero,fZero) !! Brentova modifikace Zeroin (proceduru vola i Zeroin) !! VSTUP !! ax, bx viz a, b v Zeroin !! F viz F v Zeroin !! tol viz tol v Zeroin !! maxIter maximalni povoleny pocet iteraci, dobra hodnota je 25 !! VYSTUP !! neval INTEGER, zde se nevyuziva, musi byt ale deklarovana a dosazena !! errCode INTEGER, 0 = OK, 1 = prilis mnoho iteraci, 2 = F(ax)*F(bx)>0 !! xZero REAL(FP), nalezena hodnota korene, FP = SP|DP !! fZero REAL(FP), F(xZero) !!=============================================================================