这是goku写的程序,我做了修改,请高手帮我看看有什么问题。虽然运行没问题,但是拟合的
误差很大。是不是我的程序有问题啊。
function [a,b,w] = fit_line(a0,b0,fr,se)
% 对三维数据进行直线拟合并求出其夹角,将直线拟合成如下形式:
% x-a(1) y-a(2) z-a(3)
% ------ = ------ = ------
% a(4) a(5) a(6)
% 原理:下面的 d 是各数据点到拟合直线的距离,利用 lsqnonlin 对 d 进行最小二乘
% 先将数据分成两段, 再分别对直线拟合。
% a0 是初始值,data 是三维数据,第一列是 x,第二列是 y,第三列是 z。fr是第一个断点,se是第二个
% by GoKu
global fr se data xdata1 ydata1 zdata1
data=load ('E:\line12.txt', '-ascii');
xdata1=data(:,1);
ydata1=data(:,2);
zdata1=data(:,3);
[a] = lsqnonlin(@fit_line_fun1,a0);
= lsqnonlin(@fit_line_fun2,b0);
% 求两条直线的夹角,异面直线夹角公式。
q=abs((a(4)*b(4)+a(5)*b(5)+a(6)*b(6)))/(no