Оптимизация для поиска комплексного числа в качестве входных данных
Мне интересно, есть ли библиотека C / C ++ или метод кода Matlab для определения действительных и комплексных чисел с использованием решателя минимизации. Вот фрагмент кода, показывающий, что я хотел бы сделать. Например, предположим, что я знаюUtilde
, но нетx
а такжеU
переменные. Я хочу использовать оптимизацию (fminsearch
) определитьx
а такжеU
, даноUtilde
, Обратите внимание, чтоUtilde
это комплексное число.
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 ) );
Код выше не сходится к правильным значениям, иxout = 1.7318 88.8760
, Однако еслиU = 50
, который не является комплексным числом, тоxout = 1.5000 50.0000
, которые являются правильными значениями.
Есть ли способ в Matlab или C / C ++ обеспечить правильную сходимость, учитываяUtilde
как комплексное число? Может быть, я должен изменить код выше?
If there isn't a way to do this natively in Matlab, then perhaps one gist of the question is this: Is there a multivariate (i.e. Nelder-Mead or similar algorithm) optimization library that is able to work with real and complex inputs and outputs?
Yet another question is whether the function is convergent or not. I
don't know if it is the algorithm or the function. Might I need to change something in the Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x)
expression to make it convergent?