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.

Números complejos en SolversOptimization Toolbox

Por lo general, los solucionadores no aceptan ni controlan funciones objetivas ni restricciones con valores complejos.Optimization Toolbox™ Sin embargo, los solucionadores de mínimos cuadrados y el solucionador pueden controlar estas funciones objetivas bajo las siguientes restricciones:lsqcurvefitlsqnonlinlsqlinfsolve

  • La función objetiva debe ser analítica en el sentido de la función compleja (para más detalles, véase Nevanlinna y Paatero).[1] Por ejemplo, la función f(z) = Re(z) – iIm(z) no es analítico, pero la función f(z) = exp(z) es analítico. Esta restricción se mantiene automáticamente.lsqlin

  • No debe haber restricciones, ni límites. Los números complejos no están bien ordenados, por lo que no está claro qué "límites" podrían significar. Cuando hay límites de problemas, los solucionadores no lineales de mínimos cuadrados no permiten pasos que conducen a valores complejos.

  • No establezca la opción en.FunValCheck'on' Esta opción detiene inmediatamente un solucionador cuando el solucionador encuentra un valor complejo.

Los solucionadores de mínimos cuadrados y tratar de minimizar la norma cuadrada de un vector de los valores de función.fsolve Esto tiene sentido incluso en presencia de valores complejos.

Si tiene una función o restricciones no analíticas, divida las partes reales e imaginarias del problema. Para ver un ejemplo, vea.Ajuste un modelo a datos de valor complejo

Para obtener la mejor solución (norma más pequeña), intente establecer un punto inicial complejo. Por ejemplo, resolver 1 + x4 = 0 falla si utiliza un punto de inicio real:

f = @(x)1+x^4; x0 = 1; x = fsolve(f,x0)
No solution found.  fsolve stopped because the problem appears regular as measured by the gradient, but the vector of function values is not near zero as measured by the default value of the function tolerance.  x =     1.1176e-08

Sin embargo, si utiliza un punto inicial complejo, se realiza correctamente:fsolve

x0 = 1 + 1i/10; x = fsolve(f,x0)
Equation solved.  fsolve completed because the vector of function values is near zero as measured by the default value of the function tolerance, and the problem appears regular as measured by the gradient.  x =     0.7071 + 0.7071i

Referencias

[1] Nevanlinna, Rolf, and V. Paatero. Introduction to Complex Analysis. Addison-Wesley, 1969.

Temas relacionados