最大化复数的绝对实部的总和

时间:2016-02-28 06:11:11

标签: math language-agnostic complex-numbers

假设复数 a1..an ,那么角度 phi 这些数字必须旋转(=乘以exp(i * phi))才能最大化实部的绝对值之和?

in:=complex[N]
out:=in.*exp(i*phi)
f:=sum(abs(real(out))) 

- >哪个phi最大化f?

是否有一个优雅的解决方案(如不在phi中迭代)?

要找到每个数字必须乘以的角度才能使其成为现实并不困难,但加权这些角度以找到所有这些角度的单个最佳角度很困难,因为旋转显然不是线性的 - 类似于

sum(phiN.*abs(in))/sum(abs(in)) 

不起作用(产生的总和低于通过迭代-pi到pi找到的角度)

任何想法都受到赞赏..

1 个答案:

答案 0 :(得分:0)

虽然存在分析解决方案,但通常很难计算它(对于少量输入变量(n)可能是可行的)。我将首先讨论这个解决方案,然后提出替代方案。

分析解决方案

根据输入数字(l1, phi1), (l2, phi2), ... (ln, phin),其中li是数字的长度phii,您希望找到:

arg max_phi Sum_i abs(li cos(phii + phi))

您只有一个自变量。因此,我们首先推导出与phi

相关的函数
f'(phi) = Sum_i (-li sin(phii + phi) * abs'(l cos(phii + phi))

abs'(x)可以是+1-1。由于它的不连续性,我们不会尝试各种组合。因此,您最终得到2^n f'个变体。那么最佳值是f'(phi)=0中的一个(通常是四个)参数。这可以如下计算。我用si表示第i个词的符号,你需要修改它:

numerator = Sum_i si li sin(phii)
denominator = (Sum_i li^2) + (Sum_i Sum_{j>i} 2 * li * lj * si * sj 

cos(phii - phij))

然后,四个候选解决方案是:

phi*    = -arc cos( numerator / sqrt(denominator))
phi**   = -arc cos(-numerator / sqrt(denominator))
phi***  =  arc cos( numerator / sqrt(denominator))
phi**** =  arc cos(-numerator / sqrt(denominator))

查找每个变体的所有候选项,并选择最大f(phi)的候选项。但是,如上所述,这种方法不适合大n。您需要2^n f种变体,每种变体都需要O(n^2)时间来构建解决方案。

数值解

另一种选择是数值优化方法。挑战在于你的功能不凸。因此,如果您找到局部最大值,则不能说它是否是全局最大值。大多数算法需要良好的初始您可以通过对phi的域进行抽样并选择最佳点来找到初始点。然后,尝试一些标准方法(Newton,Levenberg-Marquardt,BFGS)。