方法简述:
利用SVD分解求拟合平面 拟合方程为ax+by+cz=d,约束条件为a2+b2+c2=1,目标是使得尽可能多的点在平面上。构建矩阵为AX=0,将A矩阵进行奇异值分解之后,最小奇异值对应的特征值向量即为拟合平面的系数向量。
详细的原理可以查看:SVD分解平面拟合原理
在这里我举的例子是利用余震的三维空间坐标拟合余震的可能发震平面。
as=load('data.txt');
%根据需要选择合适经纬度范围的数据点
as1 = [];
for ir = 1:m
if (as(ir,1)>= xx &&as(ir,1)<= xx)
as1 = [as1;as(ir,:)];
end
end
as=as1;
lon=as(:,2);
lat=as(:,1);
depth=as(:,3);
mag=as(:,4);
% 将经纬度转化为UTM坐标(m)
% function [East, North, z] = LL2UTM(lat,lon, hgt,z)
[East, North, z]=LL2UTM(lat,lon); %z=43s
x=East/1000; %转换单位为km
y=North/1000; %转换单位为km
z=depth;
planeData=[x,y,z];
% 协方差矩阵的SVD变换中,最小奇异值对应的奇异向量就是平面的方向
xyz0=mean(planeData,1);
centeredPlane=bsxfun(@minus,planeData,xyz0);
[U,S,V]=svd(cent