~ubuntu-branches/ubuntu/karmic/python-scipy/karmic

« back to all changes in this revision

Viewing changes to Lib/optimize/Zeros/bisect.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel T. Chen (new)
  • Date: 2005-03-16 02:15:29 UTC
  • Revision ID: james.westby@ubuntu.com-20050316021529-xrjlowsejs0cijig
Tags: upstream-0.3.2
ImportĀ upstreamĀ versionĀ 0.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Written by Charles Harris charles.harris@sdl.usu.edu */
 
2
 
 
3
#include "zeros.h"
 
4
 
 
5
double
 
6
bisect(double (*f)(double, void*), double xa, double xb, double xtol, double rtol, int iter, default_parameters *params)
 
7
{
 
8
    int i;
 
9
    double dm,xm,fm,fa,fb,tol;
 
10
    
 
11
    tol = xtol + rtol*(fabs(xa) + fabs(xb));
 
12
    
 
13
    fa = (*f)(xa,params);
 
14
    fb = (*f)(xb,params);
 
15
    params->funcalls = 2;
 
16
    if (fa*fb > 0) {ERROR(params,SIGNERR,0.0);}
 
17
    if (fa == 0) return xa;
 
18
    if (fb == 0) return xb;
 
19
    dm = xb - xa;
 
20
    params->iterations = 0;
 
21
    for(i=0; i<iter; i++) {
 
22
        params->iterations++;
 
23
        dm *= .5;
 
24
        xm = xa + dm;
 
25
        fm = (*f)(xm,params);
 
26
        params->funcalls++;
 
27
        if (fm*fa >= 0) {
 
28
            xa = xm;
 
29
        }
 
30
        if (fm == 0 || fabs(dm) < tol)
 
31
            return xm;
 
32
    }
 
33
    ERROR(params,CONVERR,xa);
 
34
}