Esempio n. 1
0
    def __call__(self, tol, bloginfo):
        def warn_user_about_open_interval(list):

            if bloginfo.lock is not None:
                bloginfo.lock.acquire()

            if 0 == bloginfo.verbose:
                prefix = '%s ' % bloginfo.prefix.lstrip()
            else:
                prefix = '%s ' % bloginfo.prefix

            interval = list_to_open_interval(list)
            bloginfo.blogger.info(
                prefix + 'WARNING: The confidence level lies within ' +
                interval)

            if bloginfo.lock is not None:
                bloginfo.lock.release()

            return

        xxx = self.trial_points[0]
        fff = self.trial_points[1]

        if mysgn(fff[-2]) == mysgn(fff[-1]):
            self.root = None
            return None

        myzeroin = trace_fcn(zeroin, bloginfo)
        answer = myzeroin(self.fcn,
                          xxx[-2],
                          xxx[-1],
                          fa=fff[-2],
                          fb=fff[-1],
                          maxfev=32,
                          tol=tol)
        if abs(answer[0][1]) > tol:
            xafa = answer[1][0]
            xa = xafa[0]
            fa = xafa[1]
            xbfb = answer[1][1]
            xb = xbfb[0]
            fb = xbfb[1]
            if mysgn(fa) != mysgn(fb):
                if False == self.open_interval:
                    warn_user_about_open_interval([xa, xb])
                    return (xa + xb) / 2.0
                else:
                    if xa < xb:
                        return (xa, xb)
                    else:
                        return (xb, xa)
            else:
                return None
        self.root = answer[0][0]
        return self.root
Esempio n. 2
0
    def __call__( self, tol, bloginfo ):

        def warn_user_about_open_interval( list ):

            if bloginfo.lock is not None:
                bloginfo.lock.acquire()

            if 0 == bloginfo.verbose:
                prefix = '%s ' % bloginfo.prefix.lstrip()
            else:
                prefix = '%s ' % bloginfo.prefix

            interval = list_to_open_interval( list )
            bloginfo.blogger.info( prefix +
                                   'WARNING: The confidence level lies within '
                                   + interval )

            if bloginfo.lock is not None:
                bloginfo.lock.release()

            return

        xxx = self.trial_points[ 0 ]
        fff = self.trial_points[ 1 ]

        if mysgn( fff[ -2 ] ) == mysgn( fff[ -1 ] ):
            self.root = None
            return None

        myzeroin = trace_fcn( zeroin, bloginfo )
        answer = myzeroin( self.fcn, xxx[ -2 ], xxx[ -1 ], fa=fff[ -2 ],
                           fb=fff[ -1 ], maxfev=32, tol=tol )
        if abs( answer[0][1] ) > tol:
            xafa = answer[ 1 ][ 0 ]
            xa = xafa[ 0 ]
            fa = xafa[ 1 ]
            xbfb = answer[ 1 ][ 1 ]
            xb = xbfb[ 0 ]
            fb = xbfb[ 1 ]
            if mysgn( fa ) != mysgn( fb ):
                if False == self.open_interval:
                    warn_user_about_open_interval( [ xa, xb ] )
                    return ( xa + xb ) / 2.0
                else:
                    if xa < xb:
                        return ( xa, xb )
                    else:
                        return ( xb, xa )
            else:
                return None
        self.root = answer[ 0 ][ 0 ]
        return self.root
Esempio n. 3
0
 def is_same_dir( self, dir, current_pos, proposed_pos ):
     delta = proposed_pos - current_pos
     return mysgn( delta ) == ConfBracket.neg_pos[ dir ]
Esempio n. 4
0
 def is_same_dir(self, dir, current_pos, proposed_pos):
     delta = proposed_pos - current_pos
     return mysgn(delta) == ConfBracket.neg_pos[dir]