Otimização para encontrar um número complexo como entrada
Eu estou querendo saber se há uma biblioteca C / C ++ ou técnica de código Matlab para determinar números reais e complexos usando um solucionador de minimização. Aqui está um trecho de código que mostra o que eu gostaria de fazer. Por exemplo, suponha que eu saibaUtilde
, mas nãox
eU
variáveis. Eu quero usar a otimização (fminsearch
) para determinarx
eU
, dadoUtilde
. Observe queUtilde
é um número complexo.
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 ) );
O código acima não converge para os valores apropriados exout = 1.7318 88.8760
. No entanto, seU = 50
, que não é um número complexo, entãoxout = 1.5000 50.0000
, quais são os valores adequados.
Existe uma maneira em Matlab ou C / C ++ para garantir a convergência adequada, dadoUtilde
como um número complexo? Talvez eu tenha que mudar o código acima?
Se não existe uma maneira de fazer isso nativamente no Matlab, então talvez uma questão básica seja a seguinte: Existe uma biblioteca de otimização multivariada (isto é, Nelder-Mead ou algoritmo similar) que é capaz de trabalhar com entradas e saídas?
Ainda outra questão é se a função é convergente ou não. Não sei se é o algoritmo ou a função. Posso precisar mudar alguma coisa noUtilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x)
expressão para torná-lo convergente?