Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > 6964be129b753c389f6479a3e34c4091 > files > 26

pygsl-devel-0.9.5-1.fc13.i686.rpm

#!/usr/bin/env python
# Author : Pierre Schnizer 
"""
The python equivalent of the C example found in the GSL Reference document.

The function run_fsolver shows how to use the fsolvers (e.g. brent).
"""
import pygsl._numobj as Numeric
from pygsl.testing import minimize


def fn1(x, params):
    return Numeric.cos(x) + 1.0

def run_fsolver():
    m = 2.0
    a = 0.0
    b = 6.0
    m_expected = Numeric.pi

    
    minimizer = minimize.brent()
    #minimizer = minimize.goldensection()
    minimizer.set(fn1, m, a, b, None)
    
    print "# Using  minimizer ", minimizer.name()
    print "# %5s [%9s %9s]  %9s  %10s %9s" % ("iter", "upper", "lower", "min",
                                              "err", "err(est)")
    for iter in range(100):
        status = minimizer.iterate()
        a      = minimizer.x_lower()
        b      = minimizer.x_upper()
        m      = minimizer.x_minimum()
        status = minimize.test_interval(a, b, 0.001, 0)
        if status == 0:
            print "# Converged: "
        print "  %5d [%.7f %.7f]  %.7f + % .6f % .6f" %(iter, a, b, m,
                                                      m -m_expected, b - a)
        if status == 0:
            break
    else:
        raise ValueError, "Number of Iterations exceeded!"
        



if __name__ == '__main__':
    run_fsolver()