Optimización para encontrar número complejo como entrada.

Me pregunto si hay una biblioteca C / C ++ o una técnica de código Matlab para determinar números reales y complejos utilizando un solucionador de minimización. Aquí hay un fragmento de código que muestra lo que me gustaría hacer. Por ejemplo, supongamos que séUtilde, pero nox yU variables Quiero utilizar la optimización (fminsearch) para determinarx yUdadoUtilde. Tenga en cuenta queUtilde Es un número complejo.

x = 1.5;
U = 50 + 1i*25;
x0 = [1 20];  % starting values
Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x);
xout = fminsearch(@(v)optim(v, Utilde), x0);

function diff = optim(v, Utilde)
x = v(1);
U = v(2);
diff =  abs( -(Utilde/U) + (1 / exp(2 * x)) * exp( 1i * 2 * x  ) );

El código anterior no converge a los valores apropiados, yxout = 1.7318 88.8760. Sin embargo, siU = 50, que no es un número complejo, entoncesxout = 1.5000 50.0000, cuales son los valores propios.

¿Hay alguna manera en Matlab o C / C ++ para asegurar la convergencia adecuada, dadoUtilde como un numero complejo? Tal vez tengo que cambiar el código de arriba?

Si no hay una manera de hacer esto de forma nativa en Matlab, entonces tal vez una parte de la pregunta sea la siguiente: ¿Existe una biblioteca de optimización multivariable (es decir, Nelder-Mead o algoritmo similar) que sea capaz de trabajar con entradas reales y complejas y salidas?

Otra pregunta más es si la función es convergente o no. No sé si es el algoritmo o la función. ¿Podría necesitar cambiar algo en elUtilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x) ¿Expresión para hacerla convergente?

Respuestas a la pregunta(3)

Su respuesta a la pregunta