2012-06-04 139 views
3

我的問題很標準,但找不到解決方案。plot 3D line,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) 

我有一個。 因此等式可能是

points*a+dist=0 

其中dist是最小值。與起源的距離。

現在我的問題是如何在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 +一個。* 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()來代替,在這種情況下,您只需要一對點。由於一條線的定義是無限的,因此決定它應該從哪裏開始和結束(取決於應用程序)。