在 MATLAB 中绘制以矩阵形式给出的椭圆

1 matlab geometry ellipse

我有一个二维椭圆,由正定矩阵 X 定义,如下所示:如果 x'*X*x <= 1,则点 x 在椭圆中。如何在 matlab 中绘制这个椭圆?我做了一些搜索,但发现的东西却少得惊人。

实际上找到了答案:我会将其作为答案发布,但它不会让我(新用户):

经过一番修补后弄清楚了。基本上,我们将椭圆边界 (x'*X*x = 1) 上的点表示为 X 特征向量的加权组合,这使得查找这些点的一些数学运算变得更加容易。我们可以写成 (au+bv)' X (au+bv)=1 并算出 a,b 之间的关系。Matlab 代码如下(抱歉,它很乱,只是使用了我用笔/纸使用的相同符号):

function plot_ellipse(X, varargin)
% Plots an ellipse of the form x'*X*x <= 1

% plot vectors of the form a*u + b*v where u,v are eigenvectors of X

[V,D] = eig(X);
u = V(:,1);
v = V(:,2);
l1 = D(1,1);
l2 = D(2,2);

pts = [];

delta = .1;

for alpha = -1/sqrt(l1)-delta:delta:1/sqrt(l1)+delta
    beta = sqrt((1 - alpha^2 * l1)/l2);
    pts(:,end+1) = alpha*u + beta*v;
end
for alpha = 1/sqrt(l1)+delta:-delta:-1/sqrt(l1)-delta
    beta = -sqrt((1 - alpha^2 * l1)/l2);
    pts(:,end+1) = alpha*u + beta*v;
end

plot(pts(1,:), pts(2,:), varargin{:})
Run Code Online (Sandbox Code Playgroud)

fho*_*iau 6

我在搜索这个主题时偶然发现了这篇文章,即使它已经解决,我想如果矩阵是对称的,我可能会提供另一个更简单的解决方案。

另一种方法是使用 Matlab 中实现的半定正矩阵 E 的 Cholesky 分解作为函数chol。它计算上三角矩阵 R,使得 X = R' * R。如果我们将 z 定义为 R,则 x'*X*x = (R*x)'*(R*x) = z'*z *X。

因此,要绘制的曲线变为 z'*z=1,这是一个圆。因此,一个简单的解决方案是 z = (cos(t), sin(t)),其中 0<=t<=2 pi。然后乘以 R 的倒数即可得到椭圆。

这很容易翻译成以下代码:

function plot_ellipse(E)
 % plots an ellipse of the form xEx = 1
 R = chol(E);
 t = linspace(0, 2*pi, 100); % or any high number to make curve smooth
 z = [cos(t); sin(t)];
 ellipse = inv(R) * z;
 plot(ellipse(1,:), ellipse(2,:))
end 
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!