最小二乘法拟合空间直线的原理及实现

前言

由于项目需求,需要根据空间圆柱的一段曲面,估计出圆柱中轴所在直线。近期查阅并整理了部分资料,望大家一起学习交流。

一、最小二乘法拟合直线原理

原理部分主要参考链接: 空间直线的最小二乘拟合,这里重新整理了一下。

空间直线的简化形式为:在这里插入图片描述
即:在这里插入图片描述矩阵形式为:在这里插入图片描述直线上第i个点满足:在这里插入图片描述
则有:在这里插入图片描述左右乘以
在这里插入图片描述则有:最小二乘法拟合空间直线的原理及实现_第1张图片最后可得:
最小二乘法拟合空间直线的原理及实现_第2张图片

二、Matlab代码

代码部分主要参考链接: 空间直线最小二乘拟合。

data = load('data.txt');%12行3列数据,x,y,z
xData=data(:,1)';%读取n行,一列数据,并转置
yData=data(:,2)';
zData=data(:,3)';
L=length(xData);%获取数组长度
ZM=[zData;ones(1,L)];%对应为12列数据
MM=ZM*ZM';
XM=xData*ZM';%1*2
YM=yData*ZM';%1*2
A=(XM/MM);%1行*2列,用XM/MM比XM*inv(MM)速度快
B=(YM/MM)';

z1=400:430;%设置直线z的范围
x1=A(1)*z1+A(2);%空间直线子方程1:x=a*z+b
y1=B(1)*z1+B(2);%空间直线子方程2:y=c*z+d
plot3(x1,y1,z1,'r',xData,yData,zData,'o');
axis([20 60,3,5,400,500])

三、可视化结果最小二乘法拟合空间直线的原理及实现_第3张图片

空间直线方程x=az+b;y=cz+d中的a,b,c,d,即为最后求得的A(1),A(2),B(1),B(2)。

你可能感兴趣的:(matlab,可视化)