3

私の質問はかなり標準的ですが、その解決策が見つかりません。

points=[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 で最適なフィルター ラインをプロットする方法です。

4

1 に答える 1

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() を使用することもできます。その場合、必要なのはポイントのペアだけです。線は定義上無限であるため、線の開始点と終了点を決定するのはユーザー次第です (アプリケーションによって異なります)。

于 2012-06-04T09:15:35.773 に答える