我想知道是否有 C/C++ 库或 Matlab 代码技术来使用最小化求解器确定实数和复数。这是一个代码片段,显示了我想做的事情。例如,假设我知道Utilde
,但不知道x
和U
变量。我想使用 optimization( fminsearch
) 来确定x
and 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 中本地执行此操作,那么问题的一个要点可能是:是否有能够处理真实和复杂输入的多元(即 Nelder-Mead 或类似算法)优化库和输出?
还有一个问题是函数是否收敛。不知道是算法还是函数。我可能需要更改
Utilde = U * (1 / exp(2 * x)) * exp( 1i * 2 * x)
表达式中的某些内容以使其收敛吗?