3

我的问题很标准,但找不到解决方案。

我有 points=[x,y,z] 并想绘制最佳拟合线。

我正在使用下面给出的函数(和 Thanx Smith)

% 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 回答