@c English version: 2010-10-10
@menu
* Introducción a minpack::
* Funciones y variables para minpack::
@end menu

@node Introducción a minpack, , , 
@section Introducción a minpack

@code{Minpack} es una traducción a Common Lisp (via @code{f2cl}) de la
librería MINPACK escrita en Fortran, tal como se puede
obtener de Netlib.


@node Funciones y variables para minpack, , ,
@section Funciones y variables para minpack



@deffn {Función} minpack_lsquares (@var{flist}, @var{varlist}, @var{guess} [, @var{tolerance}, @var{jacobian}])

Calcula el punto @code{x} que minimiza la suma de los cuadrados de las
funciones de la lista @var{flist}. Las variables se escriben en
la lista @code{varlist}. El argumento @var{guess} debe guardar una
estimación inicial del punto óptimo.

Los argumentos opcionales @var{tolerance} y @var{jacobian} permiten
mantener cierto control sobre el algoritmo; @var{tolerance} es el
error relativo estimado que se desea en la suma de cuadrados,
mientras que @var{jacobian} puede utilizarse para especificar el
jacobiano. Si @var{jacobian} no se suministra, o se le da el valor
@code{true}, el que ya tiene por defecto, el jacobiano se calcula
a partir de @var{flist}. Si @var{jacobian} vale @code{false}, se
utilizará una aproximación numérica.

@code{minpack_lsquares} devuelve una lista, siendo su primer 
elemento la solución estimada, el segundo la suma de cuadrados y
el tercero indica la bondad del algoritmo, siendo sus posibles valores
los siguientes:

@table @code
@item 0
Número incorrecto de parámetros.
@item 1
El algoritmo estima que el error relativo de la suma de cuadrados
es, como mucho, igual a @code{tolerance}.
@item 2
El algoritmo estima que el error relativo entre @var{x} y la solución es,
como mucho, igual a @code{tolerance}.
@item 3
Las dos condiciones anteriores se cumplen.
@item 4
El vector formado por las funciones evaluadas en el punto @var{x} es
ortogonal a las columnas del jacobiano dentro de la precisión de la
máquina. 
@item 5
El número de llamadas a las funciones ha alcanzado 100*(n+1), siendo
n el número de variables.
@item 6
La tolerancia es demasiado pequeña, no siendo posible reducir más la
suma de cuadrados.
@item 7
La tolerancia es demasiado pequeña, no siendo posible mejorar la
solución aproximada @var{x}.
@end table

@example
/* Problem 6: Powell singular function */
(%i1) powell(x1,x2,x3,x4) := 
         [x1+10*x2, sqrt(5)*(x3-x4), (x2-2*x3)^2, 
              sqrt(10)*(x1-x4)^2]$
(%i2) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4], 
                       [3,-1,0,1]);
(%o2) [[1.652117596168394e-17, - 1.652117596168393e-18, 
        2.643388153869468e-18, 2.643388153869468e-18], 
       6.109327859207777e-34, 4] 
@end example

@example
/* Same problem but use numerical approximation to Jacobian */
(%i3) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4], 
                       [3,-1,0,1], jacobian = false);
(%o3) [[5.060282149485331e-11, - 5.060282149491206e-12, 
        2.179447843547218e-11, 2.179447843547218e-11], 
       3.534491794847031e-21, 5]
@end example
@end deffn




@deffn {Función} minpack_solve (@var{flist}, @var{varlist}, @var{guess} [, @var{tolerance}, @var{jacobian}])

Resuelve un sistema de @code{n} ecuaciones con @code{n} incógnitas.
Las @code{n} ecuaciones forman la lista @var{flist}, estando la
lista @var{varlist} formada por las incógnitas. El argumento
@var{guess} es una estimación inicial de la solución.

Los argumentos opcionales @var{tolerance} y @var{jacobian} permiten
mantener cierto control sobre el algoritmo; @var{tolerance} es el
error relativo estimado que se desea en la suma de cuadrados,
mientras que @var{jacobian} puede utilizarse para especificar el
jacobiano. Si @var{jacobian} no se suministra, o se le da el valor
@code{true}, el que ya tiene por defecto, el jacobiano se calcula
a partir de @var{flist}. Si @var{jacobian} vale @code{false}, se
utilizará una aproximación numérica.

@code{minpack_solve} devuelve una lista, siendo su primer 
elemento la solución estimada, el segundo la suma de cuadrados y
el tercero indica la bondad del algoritmo, siendo sus posibles valores
los siguientes:

@table @code
@item 0
Número incorrecto de parámetros.
@item 1
El algoritmo estima que el error relativo de la suma de cuadrados
es, como mucho, igual a @code{tolerance}.
@item 2
El número de llamadas a las funciones ha alcanzado 100*(n+1), siendo
n el número de incógnitas.
@item 3
La tolerancia es demasiado pequeña, no siendo posible reducir más la
suma de cuadrados.
@item 4
El algoritmo no progresa adecuadamente.
@end table
@end deffn

