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?