Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.
Los solucionadores pueden tomar un tiempo excesivo por varias razones. Para diagnosticar el motivo o habilitar una solución más rápida, utilice una o varias de las siguientes técnicas.
Establezca la opción en.Display
'iter'
Esta configuración muestra los resultados de las iteraciones del solucionador.
Para habilitar la visualización iterativa:
Con la aplicación de optimización, elija serLevel of display iterative
O iterative with detailed message
.
En la línea de comando, escribaMATLAB®
options = optimoptions('solvername','Display','iter');
Llame al solucionador mediante la estructura.options
Para ver un ejemplo de visualización iterativa, consulte.Interprete el resultado Para obtener más información, consulte.Qué buscar en la pantalla iterativa
Los solucionadores pueden fallar al converger si las tolerancias son demasiado pequeñas, especialmente y.OptimalityTolerance
StepTolerance
Para cambiar las tolerancias mediante la aplicación de optimización, use la lista en la parte superior del panel.Stopping criteriaOptions
Para cambiar las tolerancias en la línea de comando, utilice como se describe en.optimoptions
Establecer y cambiar opciones
Puede obtener más información visual o detallada sobre las iteraciones del solucionador utilizando una función de trazado. Para obtener una lista de las funciones de trazado predefinidas, consulte en la aplicación optimización.Options > Plot functions La sección Opciones de las páginas de referencia de la función del solucionador también enumera las funciones de trazado.
Para utilizar una función de trazado:
Con la aplicación de optimización, marque las casillas situadas junto a cada función de trazado que desee utilizar.
En la línea de comando, escribaMATLAB
options = optimoptions('solvername','PlotFcn',{@plotfcn1,@plotfcn2,...});
Llame al solucionador mediante la estructura.options
Para obtener un ejemplo del uso de una función de trazado, consulte.Mediante una función de trazado
'lbfgs' HessianApproximation
Para el solucionador, si tiene un problema con muchas variables (cientos o más), a menudo puede ahorrar tiempo y memoria estableciendo la opción.fmincon
HessianApproximation
'lbfgs'
Esto hace que el algoritmo utilice una aproximación hessiana de baja memoria.fmincon
'interior-point'
Si ha suministrado derivados (degradados o Jacobianos) al solucionador, el solucionador puede no converger si los derivados son inexactos. Para obtener más información sobre el uso de la opción, consulte.CheckGradients
Comprobación de la validez de gradientes o Jacobianos
Si utiliza un límite grande y arbitrario (superior o inferior), un solucionador puede tardar demasiado tiempo o incluso no converger. Sin embargo, si establece o como el límite, el solucionador puede tardar menos tiempo y podría converger mejor.Inf
-Inf
¿por qué? Un algoritmo de punto interior puede establecer un punto inicial en el punto medio de los límites finitos. O un algoritmo de punto interior puede intentar encontrar un "camino central" a medio camino entre los límites finitos. Por lo tanto, un límite grande y arbitrario puede cambiar el tamaño de esos componentes de forma inadecuada. Por el contrario, los límites infinitos se ignoran para estos fines.
Punto menor: Algunos solucionadores utilizan la memoria para cada restricción, principalmente a través de una restricción hessian. Establecer un enlace a o significa que no hay ninguna restricción, por lo que hay menos memoria en uso, porque una restricción hessian tiene menor dimensión.Inf
-Inf
Puede obtener información detallada sobre las iteraciones del solucionador utilizando una función de salida. Solvers llama a funciones de salida en cada iteración. Las funciones de salida se escriben utilizando la sintaxis descrita en.Sintaxis de función de salida
Para obtener un ejemplo del uso de una función de salida, consulte.Ejemplo: uso de funciones de salida
Los problemas grandes pueden causar el funcionamiento de la memoria o del tiempo.MATLAB Aquí hay algunas sugerencias para usar menos memoria:
Si es posible, utilice un algoritmo a gran escala (véase).Algoritmos a gran escala frente a mediano escala Estos algoritmos incluyen, el algoritmo, el algoritmo y el algoritmo.trust-region-reflective
interior-point
fminunc
trust-region
fsolve
trust-region-dogleg
Levenberg-Marquardt
Por el contrario, los algoritmos, y no son de gran escala.active-set
quasi-newton
sqp
Sugerencia
Si utiliza un algoritmo a gran escala, utilice matrices dispersas para sus restricciones lineales.
Utilice una función de multiplicación jacobiana o función de multiplicación de hessian. Para ver ejemplos, vea y.Función de multiplicación jacobiana con mínimos cuadrados linealesMinimización cuadrática con el hessian denso, estructuradoMinimización con hessian estructurado denso, Equalidades lineales
Si tiene una licencia, el solucionador podría ejecutarse más rápido con la computación paralela.Parallel Computing Toolbox™ Para obtener más información, consulte.Computación paralela