如何实现这个三角多项式最大寻找半定程序

计算科学 半定规划
2021-12-15 10:51:32

大家好,我在 math.se 网站上发布了这个,但这可能是一个更好的位置。

我需要一种找到实值三角多项式最大值的方法,我可以在其中以准确性换取速度。这个问题的公认答案:

https://mathoverflow.net/questions/35538​​/the-maximum-of-a-real-trigonometric-polynomial

给出一个使用半定规划的方法:

f(x)=F(eix)在哪里F(z)=n=NNcnzn, 和cn=12(anibn)cn=c¯n. 然后minxf(x)等于减去以下半定程序的值:使得 for c0minFtr(F)F0p=kNFp,pk=ckk=1,,N

但是,我不明白这是什么意思。任何人都能够用更简单的术语解释并给出如何在 MATLAB 中编写代码的想法吗?

更新:

一些澄清:

  • 如何实现半定程序?我知道的广泛的问题!也许更好的是什么 MATLAB 包最适合这种半定程序问题?将在 3 到 15 之间,所以我想要一个快速求解小矩阵的方法。N
  • 在问题中是一个函数,是一个矩阵(我假设它们是不同的)?当 SDP 求解时,我如何获得对应于 F(z) 最大值的值?F(z)FFzF(z)F(z)
3个回答

我不建议使用 SDP 来解决这个问题。如果roots已经获得正确答案,我认为您应该坚持下去或找到某种方法来加速该方法;因为 SDP 方法会更慢,更不准确。但万一我错了,或者万一你因为其他原因坚持尝试,让我继续。

Johan 的包 YALMIP/SDPT3 对于这个半定程序来说当然是一个不错的选择。CVX 也是如此,这是我合着的(完全披露)。我认为 Johan 的约束条件不太正确,但错误很小,我相信它会在适当的时候得到修复。(编辑:已修复。)同时我将分享 CVX 模型。

假设您已将的正系数存储在长度为的MATLAB 向量中,因此位于其中(因为 MATLAB 索引从 1 开始,而不是 0)。然后假设你引用的定理是正确的,下面的 CVX 模型应该解决它:cN+1cckc(k+1)

cvx_begin sdp
    variable F(N+1,N+1) Hermitian
    maximize(c(1)-trace(F))
    for k = 1 : N,
        sum(diag(F,k)) == c(k+1)
    end
    F >= 0
cvx_end

请注意,目标函数包括项,并减去的迹,因此包括该步骤。c0F

免责声明:虽然我确信我准确地代表了您在问题中陈述的模型,但我并不是 100% 相信模型本身是正确的。肯定很接近了——我对相关论文很熟悉——但如果你走这条路,你会想仔细检查一下。

编辑添加:对此类模型的潜在应用感兴趣的读者可能希望查阅Candès 和 Fernandez-Granda 的最新论文“Towards a Mathematical Theory of Super-Resolution”。他们描述了使用三角多项式优化来解决连续频率稀疏恢复应用程序。

如果您安装 YALMIP(我开发的一个建模层)和一个半定解算器(例如 SDPT3),如果我正确解释它,代码将会是。

F = sdpvar(N+1,N+1,'hermitian','complex')
Constraints = F >= 0;
for k = 1:N
     Constraints = [Constraints, sum(diag(F,k)) == c(k+1)];
end
solvesdp(Constraints,trace(F));
double(F)

请注意 F 中索引的变化。看起来矩阵 F 使用基于 0 的索引,这与基于 1 的 MATLAB 发生冲突。

http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Main.HomePage

http://www.math.nus.edu.sg/~mattohkc/sdpt3.html

我不清楚你在这里要求什么。您是否正在寻找问题的半定规划 (SDP) 公式的推导?您是否在寻找 SDP 是什么的解释?您是否正在寻找有关如何解决 SDP 的信息?

MATLAB 没有任何用于解决半定规划问题的内置函数。您可以安装许多开源软件包,这些软件包会将这一功能添加到 MATLAB。看看 SeDuMi、SDPT3 和 CSDP。快速的谷歌搜索将引导您找到这些包中的每一个。