Main Content

Números complejos en solvers de Optimization Toolbox

Por lo general, los solvers de Optimization Toolbox™ no aceptan o gestionan funciones objetivo o restricciones con valores complejos. Sin embargo, los solvers de mínimos cuadrados lsqcurvefit, lsqnonlin y lsqlin, y el solver fsolve pueden gestionar estas funciones objetivo de acuerdo con las siguientes restricciones:

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

  • No debe haber restricciones, ni siquiera límites. Los números complejos no están bien ordenados, de manera que no está claro qué puede significar "límites". Cuando hay límites del problema, los solvers no lineales de mínimos cuadrados no permiten los pasos que llevan a valores complejos.

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

  • No utilice el algoritmo 'interior-point' de lsqcurvefit o lsqnonlin. Ese algoritmo se utiliza principalmente para gestionar restricciones y no se ha validado para trabajar con datos complejos.

Advertencia

El enfoque basado en problemas no es compatible con valores complejos en una función objetivo, igualdades no lineales o desigualdades no lineales. Si el cálculo de una función tiene un valor complejo, incluso como valor intermedio, el resultado final puede ser incorrecto.

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

Si tiene una función no analítica o restricciones, separe la parte real del problema de la parte imaginaria. Para ver un ejemplo, consulte Ajustar un modelo a datos de valores complejos.

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 partida 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, fsolve tiene éxito:

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