在给定一般形式的情况下找到椭圆体的矩阵形式

计算科学 线性代数
2021-12-04 18:58:40

我有想要拟合椭圆体的数据,我目前正在通过以下 Matlab 命令拟合它:

xs = pts(:,1);
ys = pts(:,2);
zs = pts(:,3);

A0 = [xs.^2 ys.^2 zs.^2 xs.*ys ys.*zs xs.*zs xs ys zs ones(size(xs))];
B0 = [ones(size(xs))];

A = A0'*A0;
B = A0'*B0;

X = A\B;

但我C++稍后会重写这个。现在,我有X哪些是 3 空间中椭圆体的一般形式的参数。我现在如何将这些参数转换为3x3矩阵来计算

(xC)TA(xC)
这样我就可以有效地计算点为中心的椭球内此外,不是这些参数的原始计算的任何部分,所以在执行 LS 拟合之前,我需要将 、 和 移动到原始位置吗?xCCxsyszs

2个回答

您实际上还没有定义一个椭球

(xc)TA(xc)

椭圆体由不等式定义

(xc)TA(xc)1

请记住,没有这种形式的椭球对应于您可能从最小二乘解中得到的X

如果有解,则二次项与相关联。 X(1)X(6)

A=[X(1)X(4)X(6);X(4)X(2)X(5);X(6)X(5)X(3)]

然后解决

2AC=[X(7);X(8);X(9)]

CTC=X(10)

如果没有这样的解,或者不是正定的,则不对应于椭球。AX

在实践中,这很可能无法产生解决方案。还有其他方法可以将椭球拟合到确实有效的数据,但它们并不是基于您已经完成的首先拟合最小二乘二次形式。

将所有点包含在椭球体中让我想起了最小体积椭球体问题。这很容易用Khachiyan 算法解决。MATLAB 代码可在此处获得。话虽如此,我认为值得提醒您的是,矩阵实际上是逆协方差矩阵。A