3

我需要在某些约束下最小化复杂的线性多变量函数。

x为长度为L的复数数组。

a[0], a[1], ..., a[L-1]是复系数,并且

F是复函数F(x)= x[0]*a[0] + x[1]*a[1] + ... + x[L-1]*a[L-1]必须被最小化。

b[0], b[1], ..., b[L-1]是复系数,有一个约束

1 = complexConjuate(x[0])*x[0] + complexConjuate(x[1])*x[1] + ... + complexConjuate(x[L-1])*x[L-1]有来实现。

我已经详细查看了http://math.nist.gov/javanumerics/并浏览了许多文档。但是我找不到一个可以最小化复杂功能的库。

4

2 回答 2

1

您想要最小化f平滑超曲面上的可微分实值函数S。如果存在这样的最小值——在编辑后的情况下,因为超曲面是紧致的,所以它保证存在——它出现在限制tof|S的临界点。fS

f在限制到流形的环境空间中定义的可微函数的临界点是M那些梯度f正交于T(M)流形的切线空间的点。对于一般情况,请阅读拉格朗日乘数

在流形是由g(x) = 0具有平滑函数的方程(局部)定义的超曲面(它具有实余维数 1)的情况下g,特别容易检测, 的临界点是与共线f|S的点。xSgrad(f)|xgrad(g)|x

现在这个问题实际上是一个真实的(如涉及实数)问题,而不是一个复杂的(如涉及复数)问题。

去掉不必要的虚部,我们有

  • 超曲面S,方便地是单位球体,由(x|x) = 1where(a|b)表示标量积全局定义, ata_1*b_1 + ... + a_k*b_k的梯度为gx2*x
  • 一个真正的线性函数,L(x) = (c|x) = c_1*x_1 + ... + c_k*x_k梯度独立于Lcx

因此,球面上有两个临界点L(除非c = 0在这种情况下L是常数),即通过原点的线c与球体相交的点,c/|c|以及-c/|c|

显然L(c/|c|) = 1/|c|*(c|c) = |c|L(-c/|c|) = -1/|c|*(c|c) = -|c|,所以最小值出现在-c/|c|并且值是-|c|

于 2012-04-17T13:53:57.187 回答
0

每个复变量x可以看作是两个变量,分别代表 的实部和虚部x

我的建议是,您使用每个变量或系数的实部和虚部作为独立分量来重新制定目标函数和约束。

根据评论,您只打算优化目标函数的实部,因此您最终可以得到一个需要优化的目标函数。

约束可以分为两部分,其中“真实”约束应等于 1,“虚构”约束应等于 0。

以这种方式重新制定优化问题后,您应该能够应用适用于重新制定的问题的任何优化算法。例如,Apache Commons Math库中有一套不错的优化器,算术库也包含一些优化算法。

于 2012-06-18T11:33:09.067 回答