Example #1
0
    def fmin(self, **kws):
        """
        Use Nelder-Mead (simplex) minimization

        Parameters
        ----------
        kws : dict
            Minimizer options to pass to the scipy.optimize.fmin minimizer.
        """

        self.prepare_fit()
        fmin_kws = dict(full_output=True,
                        disp=False,
                        retall=True,
                        ftol=1.e-4,
                        xtol=1.e-4,
                        maxfun=5000 * (self.nvarys + 1))

        fmin_kws.update(kws)

        ret = scipy_fmin(self.penalty, self.vars, **fmin_kws)
        xout, fout, niter, funccalls, warnflag, allvecs = ret
        self.nfev = funccalls
        self.chisqr = self.residual = self.__residual(xout)
        self.ndata = 1
        self.nfree = 1
        if isinstance(self.residual, ndarray):
            self.chisqr = (self.chisqr**2).sum()
            self.ndata = len(self.residual)
            self.nfree = self.ndata - self.nvarys
        self.redchi = self.chisqr / self.nfree
        self.unprepare_fit()
        return
Example #2
0
    def fmin(self, **kws):
        """
        Use Nelder-Mead (simplex) minimization

        Parameters
        ----------
        kws : dict
            Minimizer options to pass to the scipy.optimize.fmin minimizer.
        """

        self.prepare_fit()
        fmin_kws = dict(full_output=True, disp=False, retall=True,
                        ftol=1.e-4, xtol=1.e-4,
                        maxfun=5000 * (self.nvarys + 1))

        fmin_kws.update(kws)

        ret = scipy_fmin(self.penalty, self.vars, **fmin_kws)
        xout, fout, niter, funccalls, warnflag, allvecs = ret
        self.nfev = funccalls
        self.chisqr = self.residual = self.__residual(xout)
        self.ndata = 1
        self.nfree = 1
        if isinstance(self.residual, ndarray):
            self.chisqr = (self.chisqr**2).sum()
            self.ndata = len(self.residual)
            self.nfree = self.ndata - self.nvarys
        self.redchi = self.chisqr/self.nfree
        self.unprepare_fit()
        return
Example #3
0
    def fmin(self, **kws):
        """
        use nelder-mead (simplex) minimization
        """
        self.prepare_fit()
        fmin_kws = dict(full_output=True, disp=False, retall=True,
                        ftol=1.e-4, xtol=1.e-4,
                        maxfun = 5000 * (self.nvarys + 1))

        fmin_kws.update(kws)
        ret = scipy_fmin(self.penalty, self.vars, **fmin_kws)
        xout, fout, iter, funccalls, warnflag, allvecs = ret
        self.nfev =  funccalls
        self.chisqr = (self.penalty(xout)**2).sum()
Example #4
0
    def fmin(self, **kws):
        """
        use nelder-mead (simplex) minimization
        """
        self.prepare_fit()
        fmin_kws = dict(full_output=True, disp=False, retall=True,
                        ftol=1.e-4, xtol=1.e-4,
                        maxfun = 5000 * (self.nvarys + 1))

        fmin_kws.update(kws)
        ret = scipy_fmin(self.penalty, self.vars, **fmin_kws)
        xout, fout, iter, funccalls, warnflag, allvecs = ret
        self.nfev =  funccalls
        self.chisqr = (self.penalty(xout)**2).sum()
Example #5
0
    def fmin(self, **kws):
        """
        use nelder-mead (simplex) minimization
        """
        self.prepare_fit()
        fmin_kws = dict(full_output=True, disp=False, retall=True,
                        ftol=1.e-4, xtol=1.e-4,
                        maxfun = 5000 * (self.nvarys + 1))

        fmin_kws.update(self.kws)
        fmin_kws.update(kws)

        # ugly hack to get number of data ndata - it causes 1 extra
        # func evaluation. Given the structure of the class it has to
        # happen *before* fitting, otherwise wipes best fit pars
        def ret_ndata(params):
            "custom function just to get the number of data points, because fmin doesn't do that"
            r = self.__residual(params)
            return len(r)

        self.ndata = ret_ndata(self.vars) # is this the simplest way?

        def penalty(params):
            "local penalty function -- eval sum-squares residual"
            r = self.__residual(params)
            if isinstance(r, ndarray):
                r = (r*r).sum()
            return r

        ret = scipy_fmin(penalty, self.vars, **fmin_kws)
        xout, fout, iter, funccalls, warnflag, allvecs = ret

        # RS: part hacked
        sum_sqr = fout
        self.chisqr = sum_sqr
        self.residual = -99     # FIXME: residula not implemented yet
                                # - it is bit tricky to get to it

        self.nfree = (self.ndata - self.nvarys)
        self.redchi = sum_sqr / self.nfree

        self.nfev =  funccalls
        # self.set_fitmethod('simplex')
        self.fitmethod='simplex'
Example #6
0
    def fmin(self, **kws):
        """
        use nelder-mead (simplex) minimization
        """
        self.prepare_fit()
        fmin_kws = dict(full_output=True, disp=False, retall=True,
                        ftol=1.e-4, xtol=1.e-4,
                        maxfun = 5000 * (self.nvarys + 1))

        fmin_kws.update(kws)
        def penalty(params):
            "local penalty function -- eval sum-squares residual"
            r = self.__residual(params)
            if isinstance(r, ndarray):
                r = (r*r).sum()
            return r

        ret = scipy_fmin(penalty, self.vars, **fmin_kws)
        xout, fout, iter, funccalls, warnflag, allvecs = ret
        self.nfev =  funccalls