我想知道是否有一个C/C++库或Matlab代码技术可以使用最小化求解器来确定实数和复数。下面是一段代码片段,展示了我想要做的事情。例如,假设我知道Utilde
,但不知道x
和U
变量。我想使用优化(fminsearch
)来确定给定Utilde
的x
和U
。注意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)
表达式中的某些内容来使其收敛吗?
x
和U
值,那么将diff
指定为diff = abs( Utilde - U * (1 / exp(2 * x)) * exp( 1i * 2 * x ) )
是否更合适呢?或者从微分的角度来看,使用差的平方而不是绝对差更好呢? - Anders Gustafssonx
和U
收敛。例如,当x = 7
且U = 10
时,仍然存在问题。也许是我做错了什么。 - Nicholas Kinar