最小化ソルバーを使用して実数と複素数を決定するための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
は適切な値です。
Utilde
MatlabまたはC/C ++で、複素数として与えられた適切な収束を保証する方法はありますか?たぶん私は上記のコードを変更する必要がありますか?
Matlabでこれをネイティブに行う方法がない場合、おそらく質問の1つの要点は次のとおりです。実際の複雑な入力を処理できる多変量(つまり、ネルダーミードまたは同様のアルゴリズム)最適化ライブラリがあり、出力?
さらに別の問題は、関数が収束しているかどうかです。アルゴリズムなのか関数なのかわかりません。
Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x)
式を収束させるために、式の何かを変更する必要がありますか?