Optymalizacja w celu znalezienia liczby zespolonej jako wejścia

Zastanawiam się, czy istnieje biblioteka C / C ++ lub technika kodu Matlab do określania liczb rzeczywistych i złożonych za pomocą solvera minimalizacji. Oto fragment kodu pokazujący, co chciałbym zrobić. Załóżmy na przykład, że wiemUtilde, ale niex iU zmienne. Chcę korzystać z optymalizacji (fminsearch) określićx iU, danyUtilde. Zauważ, żeUtilde to liczba złożona.

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

Powyższy kod nie zbiega się z odpowiednimi wartościami ixout = 1.7318 88.8760. Jeśli jednakU = 50, co nie jest liczbą złożonąxout = 1.5000 50.0000, które są odpowiednimi wartościami.

Czy istnieje sposób w Matlab lub C / C ++, aby zapewnić właściwą zbieżnośćUtilde jako numer zespolony? Może muszę zmienić powyższy kod?

Jeśli nie ma sposobu na zrobienie tego natywnie w Matlab, być może jedną z zasadniczych kwestii jest: Czy istnieje biblioteka optymalizacyjna wielowymiarowa (tj. Algorytm Nelder-Mead lub podobny), która jest w stanie pracować z rzeczywistymi i złożonymi wejściami i wyjścia?

Kolejne pytanie dotyczy tego, czy funkcja jest zbieżna, czy nie. Nie wiem, czy to algorytm czy funkcja. Czy mogę coś zmienić wUtilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x) wyrażenie, aby było zbieżne?

questionAnswers(3)

yourAnswerToTheQuestion