[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 65. minpack

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 65.1 Introducción a minpack

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

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 65.2 Funciones y variables para minpack

Función: minpack_lsquares (flist, varlist, guess [, tolerance, jacobian])

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

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

  `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:

  `0`

    Número incorrecto de parámetros.

  `1`

    El algoritmo estima que el error relativo de la suma de cuadrados es, como mucho, igual a `tolerance`.

  `2`

    El algoritmo estima que el error relativo entre x y la solución es, como mucho, igual a `tolerance`.

  `3`

    Las dos condiciones anteriores se cumplen.

  `4`

    El vector formado por las funciones evaluadas en el punto x es ortogonal a las columnas del jacobiano dentro de la precisión de la máquina.

  `5`

    El número de llamadas a las funciones ha alcanzado 100*(n+1), siendo n el número de variables.

  `6`

    La tolerancia es demasiado pequeña, no siendo posible reducir más la suma de cuadrados.

  `7`

    La tolerancia es demasiado pequeña, no siendo posible mejorar la solución aproximada x.

      /* 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]

      /* 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]

Función: minpack_solve (flist, varlist, guess [, tolerance, jacobian])

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

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

  `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:

  `0`

    Número incorrecto de parámetros.

  `1`

    El algoritmo estima que el error relativo de la suma de cuadrados es, como mucho, igual a `tolerance`.

  `2`

    El número de llamadas a las funciones ha alcanzado 100*(n+1), siendo n el número de incógnitas.

  `3`

    La tolerancia es demasiado pequeña, no siendo posible reducir más la suma de cuadrados.

  `4`

    El algoritmo no progresa adecuadamente.

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by Viktor T. Toth on septiembre, 27 2018 using texi2html 1.76.