2013-04-10 156 views
0

我有一個2維的橢圓,由正定矩陣X定義如下:如果x'* X * x < = 1,則點x在橢圓中。我在matlab中繪製這個橢圓?我做了一些搜索,同時發現很少。在矩陣形式給出的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{:}) 
+1

我明白了,但它不會讓我發表答案。如果我記得的話,我明天就會發布它 – John 2013-04-10 01:59:26

回答

3

,即使它的解決,我想我如果矩陣是對稱的,可能會提供另一個更簡單的解決方案。

這樣做的另一種方法是使用在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π。然後乘以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 

希望這可以幫助!