首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将位置置信度椭圆转换为协方差矩阵

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

Stack Overflow用户
提问于 2017-01-23 13:51:17
回答 4查看 3.6K关注 0票数 3

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

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

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

到目前为止,的方法是:轴长度对应于协方差矩阵的两个特征值,并定义“扩展”。椭圆角为0,x& y. 不相关协方差矩阵之间没有相关性。

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

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

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

有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-30 13:54:30

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

它应该是:

代码语言:javascript
运行
复制
varX1 = semiMajorAxis² * cos(phi)² + semiMinorAxis² * sin(phi)²
varX2 = semiMajorAxis² * sin(phi)² + semiMinorAxis² * cos(phi)²
cov12 = (semiMajorAxis² - semiMinorAxis²) * sin(phi) * cos(phi) 
票数 1
EN

Stack Overflow用户

发布于 2017-07-29 09:08:24

感谢公开提出这个问题,因为我需要做类似的转换-从2d标准偏差椭球矩阵到2x2协方差矩阵。相反,有许多引用,但我发现的唯一引用是下面的引用,这使我得出结论,您犯了一个轻微的错误,但是您的推导带来了更多的清晰性。比较这里的http://simbad.u-strasbg.fr/Pages/guide/errell.htx

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

代码语言:javascript
运行
复制
 [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)²,它缺少方格

正确设置本征值(VarX =西格玛2)给出正确的结果。

代码语言:javascript
运行
复制
varX1 = majorAxis² * cos(phi)² + minorAxis² * sin(phi)²
varX2 = majorAxis² * sin(phi)² + minorAxis² * cos(phi)²
cov12 = (majorAxis² - minorAxis²) * sin(phi) * cos(phi)

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

票数 1
EN

Stack Overflow用户

发布于 2017-01-24 16:33:49

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

Matlab示例:

代码语言:javascript
运行
复制
% 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41807958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档