2012-06-04 4 views
3

내 질문은 꽤 표준이지만 그 해결책을 찾을 수 없습니다.플롯 3D 라인, matlab

나는 점 = [x, y, z]를 가지며 가장 잘 맞는 선을 그려보고 싶다.

나는

% LS3DLINE.M Least-squares line in 3 dimensions. 
% 
% Version 1.0  
% Last amended I M Smith 27 May 2002. 
% Created  I M Smith 08 Mar 2002 
% --------------------------------------------------------------------- 
% Input  
% X  Array [x y z] where x = vector of x-coordinates, 
%   y = vector of y-coordinates and z = vector of 
%   z-coordinates. 
%   Dimension: m x 3. 
% 
% Output 
% x0  Centroid of the data = point on the best-fit line. 
%   Dimension: 3 x 1. 
% 
% a  Direction cosines of the best-fit line. 
%   Dimension: 3 x 1. 
% 
% <Optional... 
% d  Residuals. 
%   Dimension: m x 1. 
% 
% normd Norm of residual errors. 
%   Dimension: 1 x 1. 
% ...> 
% 
% [x0, a <, d, normd >] = ls3dline(X) 

나는이 아래에 주어진 기능을 사용하여 (그리고 고맙습니다 스미스)입니다. DIST 최소이고 따라서 방정식

points*a+dist=0 

수있다. 기원과의 거리.

내 질문은 어떻게 최고의 filt 선을 3D로 플롯하는 것입니다.

답변

2

실제로 함수의 내용을 읽는 데 도움이됩니다.이 함수는 단수 값 분해를 사용합니다.

% calculate centroid 
    x0 = mean(X)'; 

% form matrix A of translated points 
    A = [(X(:, 1) - x0(1)) (X(:, 2) - x0(2)) (X(:, 3) - x0(3))]; 

% calculate the SVD of A 
    [U, S, V] = svd(A, 0); 

% find the largest singular value in S and extract from V the 
% corresponding right singular vector 
    [s, i] = max(diag(S)); 
    a = V(:, i); 

가장 직교 피팅 라인

P = X0 + A이다. 파라미터 t * t가 변화

있다. 이것은 직각 방향의 변화가 최소라는 것을 의미하는 최대 변화의 방향입니다. 이 선에 대한 점의 직교 거리의 제곱의 합이 최소화됩니다.

이것은 회귀 선으로부터의 y 변화를 최소화하는 선형 회귀와 구별됩니다. 이 회귀 분석에서는 모든 오차가 y 좌표에 있다고 가정하고 직각 피팅은 x와 y 좌표의 오차가 동일한 예상 크기 인 것으로 가정합니다.

[제공 : 로저 스탠은 http://www.mathworks.com/matlabcentral/newsreader/view_thread/294030]

그런 다음 당신은 단지 그것을 몇 t을 작성하고 플롯해야합니다

for t=0:100, 
P(t,:) = x0 + a.*t; 
end 
scatter3(P(:,1),P(:,2),P(:,3)); 

대신 plot3()을 사용할 수도 있습니다.이 경우 한 쌍의 점만 있으면됩니다. 선은 정의 상 무한하므로 선의 시작과 끝을 결정하는 것은 응용 프로그램에 따라 다릅니다.