[NowCoder5666D]Quadratic Form

本文探讨了一个数学优化问题,目标是最小化二次形式约束下的线性函数,并求解该函数平方模998244353的值。通过引入兰格朗日函数和KKT条件,推导出最优解的形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

max ⁡ x b T x s . t . x T A x − 1 ≤ 0 \begin{aligned} \max_x &\quad b^Tx\\ {\rm s.t.} &\quad x^TAx-1\le0 \end{aligned} xmaxs.t.bTxxTAx10
( b T x ) 2 m o d    998244353 (b^Tx)^2\mod 998244353 (bTx)2mod998244353.

A A A n × n n\times n n×n对称矩阵, b , x ∈ R n b,x\in\mathbb{R}^n b,xRn
n ≤ 200 , 0 ≤ ∣ A i , j ∣ , ∣ b i ∣ ≤ 1 0 9 n\le200,0\le|A_{i,j}|,|b_i|\le10^9 n200,0Ai,j,bi109
∀ x ∈ R n /   { 0 } , x T A x > 0 \forall x\in\mathbb{R}^n/\ \{\boldsymbol0\},x^TAx>0 xRn/ {0},xTAx>0
det ⁡ ( A ) ≢ 0 ( m o d 998244353 ) \det(A)\not\equiv0\pmod{998244353} det(A)0(mod998244353)


题解

设兰格朗日函数 L ( x , λ ) = b T x + λ ( x T A x − 1 ) \mathcal{L}(x,\lambda)=b^Tx+\lambda(x^TAx-1) L(x,λ)=bTx+λ(xTAx1),根据向量求导法则,有
∂ L ∂ x = b + λ ( A + A T ) x = b + 2 λ A x \frac{\partial\mathcal{L}}{\partial x}=b+\lambda(A+A^T)x=b+2\lambda Ax xL=b+λ(A+AT)x=b+2λAx
∂ L ∂ x = 0 \displaystyle\frac{\partial\mathcal{L}}{\partial x}=0 xL=0,可得 x = − A − 1 b 2 λ \displaystyle x=-\frac{A^{-1}b}{2\lambda} x=2λA1b。由KKT条件 λ ( x T A x − 1 ) = 0 , λ ≤ 0 \lambda(x^TAx-1)=0,\lambda\le0 λ(xTAx1)=0,λ0。将 x x x带入得
λ [ ( − A − 1 b 2 λ ) T A ( − A − 1 b 2 λ ) − 1 ] = 0 ⇒ b T ( A − 1 ) T A A − 1 b = 4 λ 2 , ( A − 1 ) T = A − 1 ⇒ λ = − 1 2 b T A − 1 b \begin{aligned} &\lambda[(-\frac{A^{-1}b}{2\lambda})^TA(-\frac{A^{-1}b}{2\lambda})-1]=0\\ \Rightarrow&\qquad b^T(A^{-1})^TAA^{-1}b=4\lambda^2,\quad (A^{-1})^T=A^{-1}\\ \Rightarrow&\qquad \lambda=-\frac12\sqrt{b^TA^{-1}b} \end{aligned} λ[(2λA1b)TA(2λA1b)1]=0bT(A1)TAA1b=4λ2,(A1)T=A1λ=21bTA1b

b T x = b T ( − A − 1 b 2 λ ) = − b T A − 1 b b T A − 1 b = b T A − 1 b b^Tx=b^T(-\frac{A^{-1}b}{2\lambda})=-\frac{b^TA^{-1}b}{\sqrt{b^TA^{-1}b}}=\sqrt{b^TA^{-1}b} bTx=bT(2λA1b)=bTA1b bTA1b=bTA1b
最终的答案为 ( b T x ) 2 = b T A − 1 b (b^Tx)^2=b^TA^{-1}b (bTx)2=bTA1b。用高斯消元求出 A A A的逆再相乘即可。

单组数据时间复杂度 O ( n 3 ) O(n^3) O(n3)

### CVX 中 `quad_form` 函数引发的 ValueError 问题解决方案 当在 CVX 或其他凸优化工具包中遇到错误提示 `'Quadratic form matrices must be symmetric/Hermitian'` 时,这通常是因为输入矩阵未满足对称性或厄米特性质的要求。即使理论上该矩阵应为实数且正定,在数值计算过程中可能会引入微小误差,从而破坏其严格对称性。 #### 数值稳定性调整方法 为了修复这一问题,可以采取以下措施: 1. **强制构建对称矩阵** 如果理论上的矩阵 \( A \) 是对称的,但由于浮点运算导致轻微不对称,则可以通过取平均来重建对称版本: ```matlab A_symmetric = (A + A') / 2; ``` 这一操作能够有效消除由于舍入误差引起的非对称部分[^1]。 2. **验证并修正复数成分** 若矩阵可能含有虚部分量(尽管预期为零),则需显式移除这些接近于零的小虚部: ```matlab A_real = real(A); ``` 此外,对于复杂情况下的共轭转置形式 \( x^H A x \),确保 \( A \) 的确是厄米特矩阵(即 \( A = A^H \))。如果存在偏差,同样可通过如下方式重构: ```matlab A_hermitian = (A + conj(A')) / 2; ``` 3. **利用近似正定化技术** 对于几乎正定但因数值扰动失去完全正定性的矩阵,可加入一个小的恒等阵乘子以增强正定特性: ```matlab epsilon = 1e-8; % 小常数用于稳定化处理 A_positive_definite = A + epsilon * eye(size(A)); ``` 以上三种策略单独或者组合应用均有助于规避由细微数值不精确所触发的技术障碍。 ```matlab % 示例代码展示综合修正过程 function fixed_matrix = fix_quad_form_input(A, tol) % tol 定义容忍度阈值,默认设为机器精度级别 if nargin < 2 || isempty(tol), tol = eps(class(A)); end % 去掉极小虚部影响 A_cleaned = real(A); % 构建更严格的对称(厄密)结构 A_fixed = (A_cleaned + conj(A_cleaned.')) / 2; % 添加微量正值偏移保障正定条件 lambda_min = min(eig((A_fixed+A_fixed.')/2)); shift_value = max(-lambda_min+tol,0); fixed_matrix = A_fixed + shift_value*eye(size(A_fixed)); end ``` 通过上述手段预处理数据后再传递给 `quad_form()` 调用即可大幅减少报错几率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值