Мне интересно, есть ли библиотека 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)
, чтобы сделать его сходящимся?