将位置置信椭圆转换为协方差矩阵

Convert position confidence ellipse to covariance matrix

有什么方法可以根据 confidence/uncertainty/error 椭圆计算协方差矩阵吗? 我知道它是如何反过来做的,使用 2x2 covariance matrix 来计算置信椭圆(例如这里描述的:http://www.visiondummy.com/2014/04/draw-error-ellipse-representing-covariance-matrix/)。

这是可能的还是缺少必要的信息?

我的置信椭圆是由两个轴的长度和椭圆旋转的角度描述的。

我目前的做法: 轴长对应协方差矩阵的两个特征值并定义"spread"。椭圆角为 0 表示 x 和 y 之间没有相关性。 Covariance matrix without correlation

我创建了一个新的空白 2x2 矩阵并假设角度为 zero,例如我使用了第一个特征值并将其设置为var_xx。与第二个特征值和var_yy相同。现在我有一个对角矩阵,它描述了方差,但没有旋转(相关)。

现在我使用一个二维旋转矩阵和椭圆角来旋转之前创建的矩阵。

This approach seems wrong, because the matrix isn't symmetric anymore. Unfortunately a covariance matrix has to be symmetric.

有什么想法吗?

看来我有一个正确有效的解决方案。 解决方案来源于另一个论坛的答案:https://math.stackexchange.com/a/1119677

Matlab 示例:

% ellipse param
longAxis = 20;
shortAxis = 10;
phi = 0;

% eigenvalues (this may vary from usecase to usecase)
eVal1 = longAxis;
eVal2 = shortAxis;

% compute eigenvectors
R = [cosd(phi), -sind(phi);
     sind(phi), cosd(phi)]; 
eVec1 = R * [eVal1; 0];
eVec2 = R * [0; eVal2];

% compute covariance matrix
% derived from: https://math.stackexchange.com/a/1119677
coVar = eVal1*(eVec1*eVec1')/(eVec1'*eVec1) + eVal2*(eVec2*eVec2')/(eVec2'*eVec2)

感谢您在 public 中提出此问题,因为我需要进行类似的转换 - 从 2d 标准差椭圆体转换为 2x2 协方差矩阵。有许多相反的参考资料,但我找到的唯一参考资料是下面的,它让我得出结论,你犯了一个小错误,但你的推导带来了更多的清晰度。在这里比较 http://simbad.u-strasbg.fr/Pages/guide/errell.htx

我们知道,对于不相关的随机值,协方差矩阵是对角线的,并且在其对角线元素中具有个体方差,即平方标准差 (sigma)。

 [varX1,   0]    (so your eigen values should be)   eVal1 = longAxis*longAxis;
 [0,   varX2]                                       eVal2 = shortAxis*shortAxis;

由于特征基u*u^T / u^T*u的变换创建了一个新的归一化基,您的特征向量集也可以设置为eVec1 = R * [1; 0]; eVec2 = R * [0; 1];(长度在特征值中)。

如果我做对了,乘以你的代码得到 varX1 = longAxis * cos(phi)² + shortAxis * sin(phi)² 缺少方块

正确设置特征值 (Var[X] = sigma²) 会给出正确的结果

varX1 = majorAxis² * cos(phi)² + minorAxis² * sin(phi)²
varX2 = majorAxis² * sin(phi)² + minorAxis² * cos(phi)²
cov12 = (majorAxis² - minorAxis²) * sin(phi) * cos(phi)

根据我提供的参考,你可以很容易地看到通过设置 phi = 0 恢复了不相关的情况;

对于应用于协方差的一般变换,有一种简单的方法可以解决这个问题。

如果我有一些线性映射A和一些协方差C,我可以通过C_new = A * C * A^T.

计算变换后的协方差

解决方案

所以对于你的问题,你可以通过计算 C = R C R^T

来计算旋转协方差

直觉

如果您将 C 视为由 cholesky 因子 C = L * L^T 组成的存在,这就有意义了,其中 cholesky 因子(或任何您喜欢的平方根)告诉我们如何变形单位圆得到 1-sigma 不确定性椭圆。

当我们变换一个分布时(你在上面试图通过变换协方差来做的事情),我们想要改变单位圆的变形。我们可以通过变换 L.

所以:L_new = A * L。那么C_new = (A * L) * (A * L)^T = (A * L) * (L^T * A^T)

因为我们知道 C = L * L^T C_new = A * C * A^T.

Daku 的回答似乎给出了几乎正确的结果,但在协方差项上,正弦和余弦不应该是正方形。

应该是:

varX1 = semiMajorAxis² * cos(phi)² + semiMinorAxis² * sin(phi)²
varX2 = semiMajorAxis² * sin(phi)² + semiMinorAxis² * cos(phi)²
cov12 = (semiMajorAxis² - semiMinorAxis²) * sin(phi) * cos(phi)