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

时间:2017-01-23 13:51:17

标签: matrix ellipse uncertainty

有没有办法从置信度/不确定性/误差椭圆计算协方差矩阵? 我知道它是如何完成的,使用2x2 covariance matrix来计算置信椭圆(例如:http://www.visiondummy.com/2014/04/draw-error-ellipse-representing-covariance-matrix/)。

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

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

我的方法到目前为止: 轴长度对应于协方差矩阵的两个特征值并定义“扩展”。椭圆角为0意味着x和amp之间没有相关性。年。 Covariance matrix without correlation

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

现在我使用了2D旋转矩阵和椭圆角来旋转先前创建的矩阵。

  

这种方法似乎不对,因为矩阵不再对称。   不幸的是,协方差矩阵必须是对称的。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

好像我有一个正确而有效的解决方案。 该解决方案来自另一个论坛的答案:here

Matlab示例:

{{1}}

答案 1 :(得分:0)

感谢公开提出这个问题,因为我需要进行类似的转换 - 从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轻松地看到不相关的案例得到恢复;

答案 2 :(得分: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

答案 3 :(得分:0)

达库的答案似乎给出了几乎正确的结果,但是在协方差术语上,不应在正弦和余弦上有平方。

应该是:

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