绘制3D线,matlab

时间:2012-06-04 08:07:35

标签: matlab plot line least-squares data-fitting

我的问题非常标准,但无法找到解决方案。

我有点= [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是min。与原点的距离。

现在我的问题是如何在3D中绘制最佳过滤线。

1 个答案:

答案 0 :(得分: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坐标中的误差具有相等的预期幅度。

[图片来源:Roger Stafford,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(),在这种情况下你只需要一对点。由于定义的行是无限的,因此您需要确定它应该从哪里开始和结束(取决于应用程序)。