一般来说(实数范围内),正定矩阵必是对称矩阵,但对称矩阵不一定就是正定矩阵(主子式也必须全为正)。 一个 n × n n\times n n×n 的实对阵矩阵 S n S^n Sn 为半正定矩阵,当且仅当其对所有的非零向量 z z z,都满足: z T S n z ≥ 0 z^TS^nz\geq 0 zTSnz≥0
实对称矩阵 S n S^n Sn 的维数为 n ( n + 1 ) / 2 n(n+1)/2 n(n+1)/2, 因为它有 n ( n + 1 ) / 2 n(n+1)/2 n(n+1)/2 个变量(就是矩阵上三角中的元素)( t r ( z T S n z ) = z T S n z tr(z^TS^nz)=z^TS^nz tr(zTSnz)=zTSnz)
用 S + n S^n_+ S+n 表示半正定矩阵, S + + n S^n_{++} S++n 表示正定矩阵。凸优化书中的表示: S + n = { X ∈ S n ∣ X ⪰ 0 } S + + n = { X ∈ S n ∣ X ≻ 0 } S^n_+=\{X\in S^n\mid X\succeq 0\}\\ S^n_{++}=\{X\in S^n\mid X\succ 0\} S+n={X∈Sn∣X⪰0}S++n={X∈Sn∣X≻0}
对于任意实数矩阵 X X X, X T X X^TX XTX 为半正定矩阵;半正定矩阵对角线上的元素都大于等于零。
S + n = L L T S^n_+=LL^T S+n=LLT 其中 L L L 是一个下三角矩阵,并且对角线上全是正实数
x T A A T x = ( A T x ) T A T x = A T x ⋅ A T x ≥ 0 x^TAA^Tx=(A^Tx)^TA^Tx=A^Tx\cdot A^Tx\geq 0 xTAATx=(ATx)TATx=ATx⋅ATx≥0 一个一维向量自己的内积总是大于等于零的
这个证明要用到对角矩阵可对角化的性质,对于任意一个对角矩阵 A A A,一定存在一个正交矩阵 Q Q Q,以及对角线矩阵 ∧ \land ∧,使得
A = Q T ∧ Q A=Q^T\land Q A=QT∧Q
x T A x = x T Q T ∧ Q x = ( x Q ) T ∧ ( x Q ) \begin{aligned} x^T Ax&=x^TQ^T\land Qx\\ &=(xQ)^T\land (xQ) \end{aligned} xTAx=xTQT∧Qx=(xQ)T∧(xQ)
令 y = x Q y=xQ y=xQ,显然 y y y 是一个列向量,则(令 ∧ \land ∧ 中的对角线为特征根):
x T A x = y T ∧ y = ∑ λ i y i 2 \begin{aligned} x^T Ax&=y^T\land y\\ &=\sum\lambda_iy_i^2 \end{aligned} xTAx=yT∧y=∑λiyi2
就能证明了。
半正定矩阵实际是给出了几个约束条件的函数 例如 X = [ x y y z ] ∈ S + n X=\left[\begin{array}{cc} x & y\\ y& z \end{array}\right]\in S^n_+ X=[xyyz]∈S+n 等价于下面三个约束条件: x ≥ 0 , z ≥ 0 , x z − y 2 ≥ 0 x\geq 0, z\geq 0, xz-y^2\geq 0 x≥0,z≥0,xz−y2≥0
因为对任意两点 A A A, B B B ∈ S + n \in S^n_+ ∈S+n 以及任意 θ 1 , θ 2 > 0 \theta_1, \theta_2>0 θ1,θ2>0,都有 z T ( θ 1 A + θ 2 B ) z = θ 1 z T A z + θ 2 z T B z ≥ 0 z^T(\theta_1 A+\theta_2 B)z=\theta_1z^TAz+\theta_2z^TBz\geq 0 zT(θ1A+θ2B)z=θ1zTAz+θ2zTBz≥0
所以 θ 1 A + θ 2 B ∈ S + n \theta_1 A+\theta_2 B\in S^n_+ θ1A+θ2B∈S+n
可以理解为对任意两个点 A , B A, B A,B, θ 1 A + θ 2 B \theta_1 A+\theta_2 B θ1A+θ2B 仍然满足那些约束条件(可以举两个点 ( x 1 , y 1 , z 1 ) (x_1, y_1, z_1) (x1,y1,z1), ( x 2 , y 2 , z 2 ) (x_2, y_2, z_2) (x2,y2,z2) 推出来)。
上面三个约束条件生成的图像如下:
function DefiniteCone ezmesh(@(x,z)sqrt(x.*z),[0,1],[0,1]) hold on ezmesh(@(x,z)-sqrt(x.*z),[0,1],[0,1]) xlabel('x'); ylabel('z'); zlabel('y') title('y^2=xz'); view([53,26]); end从图中可见该正定矩阵是一个凸锥。(画图时用除法时生成的图像很怪,因此只能用平方根了)