Function: math-nlfit-fit-curve
math-nlfit-fit-curve is a byte-compiled function defined in
calc-nlfit.el.gz.
Signature
(math-nlfit-fit-curve FN GRAD SOLNEXPR INITPARMS &optional SDV)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-nlfit.el.gz
(defun math-nlfit-fit-curve (fn grad solnexpr initparms &optional sdv)
(calc-slow-wrapper
(let* ((sdevv (or (eq sdv 'calcFunc-efit) (eq sdv 'calcFunc-xfit)))
(calc-display-working-message nil)
(data (calc-top 1))
(xdata (cdr (car (cdr data))))
(ydata (cdr (car (cdr (cdr data)))))
(sdata (if (math-contains-sdev-p ydata)
(mapcar (lambda (x) (math-get-sdev x t)) ydata)
nil))
(ydata (mapcar #'math-get-value ydata))
(calc-curve-varnames nil)
(calc-curve-coefnames nil)
(calc-curve-nvars 1)
(_fitvars (calc-get-fit-variables 1 3))
(var (nth 1 calc-curve-varnames))
(parms (cdr calc-curve-coefnames))
(parmguess
(funcall initparms xdata ydata))
(fit (math-nlfit-fit xdata ydata parmguess fn grad sdata))
(finalparms (nth 1 fit))
(sigmacovar
(if sdevv
(math-nlfit-get-sigmas grad xdata finalparms (nth 0 fit))))
(sigmas
(if sdevv
(nth 0 sigmacovar)))
(finalparms
(if sigmas
(math-map-binop
(lambda (x y) (list 'sdev x y)) finalparms sigmas)
finalparms))
(soln (funcall solnexpr finalparms var)))
(let ((calc-fit-to-trail t)
(traillist nil))
(while parms
(setq traillist (cons (list 'calcFunc-eq (car parms) (car finalparms))
traillist))
(setq finalparms (cdr finalparms))
(setq parms (cdr parms)))
(setq traillist (calc-normalize (cons 'vec (nreverse traillist))))
(cond ((eq sdv 'calcFunc-efit)
(math-nlfit-enter-result 1 "efit" soln))
((eq sdv 'calcFunc-xfit)
(let (sln)
(setq sln
(list 'vec
soln
traillist
(nth 1 sigmacovar)
'(vec)
(nth 0 fit)
(let ((n (length xdata))
(m (length finalparms)))
(if (and sdata (> n m))
(calcFunc-utpc (nth 0 fit)
(- n m))
'(var nan var-nan)))))
(math-nlfit-enter-result 1 "xfit" sln)))
(t
(math-nlfit-enter-result 1 "fit" soln)))
(calc-record traillist "parm")))))