Оптимизация для поиска комплексного числа на входе

Мне интересно, есть ли библиотека 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как комплексное число? Может быть, мне нужно изменить код выше?

  • Если нет способа сделать это изначально в Matlab, то, возможно, один суть вопроса в следующем :Существует ли многомерность (т.е. Нелдер -Алгоритм Мида или аналогичный )библиотека оптимизации, способная работать с реальными и сложными входами и выходами?

  • Другой вопрос, сходится функция или нет. я не знаю, алгоритм это или функция. Может, мне нужно что-то изменить в выражении Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x), чтобы сделать его сходящимся?

6
задан Nicholas Kinar 25 July 2012 в 00:36
поделиться