抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Hello World

人よ、幸福に生きろ!

二次型简介

二次型就是可以用二元参数表示的多项式,系数用二次型矩阵表示,这个二次型矩阵很值得研究。

  1. 二次型矩阵可以表示二次曲线

  1. 二次型矩阵一定是实对称矩阵,这意味着它可以被正交对角化。
    为什么要被正交对角化呢?这是因为,如果要在合同变换前后保持二次型全等不变,变换矩阵需要满足QTQ=EQ^TQ=E,即Q是正交矩阵。
    这样的话,我们只要使用特征值分解并且确保向量正交化,就可以轻松完成对角化,进而完成标准化,获得我们所需的信息

  2. 二次型矩阵的合同变换可以转化为标准型,且不同基向量组下表示同一个二次型的实对称矩阵是一组合同矩阵。其中对应的合同变换矩阵是对应的基变换矩阵,他一定可逆。

  3. 下面开始椭圆标准化和求长短轴的过程:

我们从给定的二次型方程(椭圆)开始:

ax2+2bxy+cy2=1ax^2 + 2bxy + cy^2 = 1

这个方程是一个二次型,可以写成矩阵形式:

Q(x,y)=[xy][abbc][xy]=1Q(x, y) = \begin{bmatrix} x & y \end{bmatrix} \begin{bmatrix} a & b \\ b & c \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = 1

这里的系数矩阵是对称矩阵:

A=[abbc]A = \begin{bmatrix} a & b \\ b & c \end{bmatrix}

我们希望通过合同对角化(正交变换)将这个矩阵转化为对角矩阵,从而得到标准椭圆的形式。这样就可以得到长短轴。

假设矩阵 AA 的特征向量分别为 v1v_1v2v_2,则矩阵 PP 由这两个特征向量组成,且:

P=[v1v2]P = \begin{bmatrix} v_1 & v_2 \end{bmatrix}

如果我们使用矩阵 PP 进行坐标变换,即令新的坐标 xx' 为:

x=P1xx' = P^{-1} x

那么,经过坐标变换后,二次型方程变为:

xTΛx=1x'^T \Lambda x' = 1

其中 Λ=diag(λ1,λ2)\Lambda = \text{diag}(\lambda_1, \lambda_2) 是对角矩阵,包含了二次型的特征值。

x121λ12+x221λ22=1\frac{x_1'^2}{\frac{1}{\sqrt{\lambda_1}}^2} + \frac{x_2'^2}{\frac{1}{\sqrt{\lambda_2}}^2} = 1

这意味着:

  • 长轴的半长轴 a=1λ1a = \frac{1}{\sqrt{\lambda_1}},
  • 短轴的半长轴 b=1λ2b = \frac{1}{\sqrt{\lambda_2}}.

为了对角化矩阵 AA,我们首先求解其特征值和特征向量。特征值 λ1\lambda_1λ2\lambda_2 是矩阵 AA 的解,满足以下特征方程:

det(AλI)=0\det(A - \lambda I) = 0

即:

det[aλbbcλ]=0\det\begin{bmatrix} a - \lambda & b \\ b & c - \lambda \end{bmatrix} = 0

计算行列式:

(aλ)(cλ)b2=0(a - \lambda)(c - \lambda) - b^2 = 0

展开后得到:

λ2(a+c)λ+(acb2)=0\lambda^2 - (a + c)\lambda + (ac - b^2) = 0

这个方程的解就是矩阵 ( A ) 的特征值 ( \lambda_1 ) 和 ( \lambda_2 ),分别为:

λ1,λ2=(a+c)±(a+c)24(acb2)2\lambda_1, \lambda_2 = \frac{(a + c) \pm \sqrt{(a + c)^2 - 4(ac - b^2)}}{2}

这两个特征值即为二次型的主轴方向上的系数,它们决定了椭圆的长短轴。

1
2
3
4
5
6
7
8
float det = (cov.x * cov.z - cov.y * cov.y);
if (det == 0.0f)
return;
float det_inv = 1.f / det;
float3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv };
float mid = 0.5f * (cov.x + cov.z);
float lambda = mid + sqrt(max(0.01f, mid * mid - det));
float my_radius = extent * sqrt(lambda);

二次型与线性变换的区别

线性变换和二次型的矩阵,虽然都叫矩阵,但它们的性质是完全不同的。

线性变换作为张量是一个(1,1)型张量,而二次型是一个(0,2)型张量。这才造成了它们在基变换下的变换规则不同。前者是VV*VV的张量积,后者是VV*VV*的张量积。

评论