2013-04-10 5 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

답변

3

이 주제를 검색하는 동안 나는이 게시물을 우연히 발견, 그리고 그것이 정착에도 불구하고, 나는 생각 행렬이 대칭이면 다른 간단한 솔루션을 제공 할 수 있습니다.

이 작업을 수행하는 또 다른 방법은 Matlab에서 구현 된 준결정 양의 행렬 E의 Cholesky 분해를 chol 함수로 사용하는 것입니다. x '* X * x = (R * x)'* (R * x) = z '* z를 사용하여 z를 R로 정의하면 위 삼각 행렬 R을 계산한다. *엑스.

따라서 플롯 할 곡선은 z '* z = 1이되며, 이는 원입니다. 따라서 간단한 솔루션은 0 < = t < = 2pi에 대해 z = (cos (t), sin (t))입니다. 그런 다음 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 

희망!

관련 문제