Optimierung, um komplexe Zahlen als Eingabe zu finden

Ich frage mich, ob es eine C / C ++ - Bibliothek oder eine Matlab-Codetechnik gibt, um reelle und komplexe Zahlen mit einem Minimierungslöser zu bestimmen. Hier ist ein Codeausschnitt, der zeigt, was ich tun möchte. Angenommen, ich weiß esUtilde, aber nichtx undU Variablen. Ich möchte die Optimierung verwenden (fminsearch) bestimmenx undU, gegebenUtilde. Beachten Sie, dassUtilde ist eine komplexe Zahl.

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  ) );

Der obige Code konvergiert nicht mit den richtigen Wertenxout = 1.7318 88.8760. jedoch, wennU = 50, was also keine komplexe Zahl istxout = 1.5000 50.0000, das sind die richtigen Werte.

Gibt es in Matlab oder C / C ++ eine Möglichkeit, eine ordnungsgemäße Konvergenz sicherzustellen?Utilde als komplexe Zahl? Vielleicht muss ich den obigen Code ändern?

Wenn es in Matlab keine Möglichkeit gibt, dies nativ zu tun, lautet der Kern der Frage möglicherweise: Gibt es eine multivariate Optimierungsbibliothek (dh Nelder-Mead oder einen ähnlichen Algorithmus), die mit realen und komplexen Eingaben arbeiten kann und Ausgänge?

Eine weitere Frage ist, ob die Funktion konvergent ist oder nicht. Ich weiß nicht, ob es der Algorithmus oder die Funktion ist. Könnte ich etwas in der ändern müssen?Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x) Ausdruck, um es konvergent zu machen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage