“今天小编根据铁路选线中的一个常见的高程拟合问题,给大家写了一段高程拟合的MATLAB代码,和大家一起学习学习,希望能够帮助到童鞋们。”
01
—
背景及例子
背景:已知一个平面内有若干个已知X、Y、Z三个量的点,根据这些点,任意取某一只有X、Y的两个量的点,利用已知点拟合出该点的高程。
例如:已知该平面内有10个已知X、Y、Z的点,分别是:
x=[102109 105 103 108 105 115 118 116 113];
y=[110113 115 103 105 108 104 108 113 118];
z=[1518 19 17 21 15 20 15 17 22];
若一个点P,只知道X、Y,即P=[110,110];求P点的高程。
02
—
MATLAB代码编写
MATLAB代码编写:小编以上述例子为具体计算数据,编写并且运行了MATLAB代码,童鞋们可以换成自己的数据进行验证和改进。
clear all;
clc
% x=input('请输入x矩阵:');%---------------------注意按行输入数组
% y=input('请输入y矩阵:');
% z=input('请输入z矩阵:');
% P=input('请输入判断点P:');
x=[102 109 105 103 108 105 115 118 116 113];
y=[110 113 115 103 105 108 104 108 113 118];
z=[15 18 19 17 21 15 20 15 17 22];
P=[110,110];
[r,c]=size(x);
detd=0;
for i=1:c
detd(i)=sqrt((x(1,i)-P(1,1))^2+(y(1,i)-P(1,2))^2);
end
%判断距离最小值
min=sort(detd);
jh=0;
for i=1:c
for j=1:c
if min(i)==detd(j)
jh=jh+1;
if jh>1
break;
else
bz(i)=j;
end
end
end
jh=0;
%修正相同距离点号
for k=(i+1):c
if detd(i)==detd(k)
jsq(i)=k;
end
end
end
bz(3)=6;
sum1=0;
sum2=0;
for i=1:6%提取距离最近的六个点
p(i)=1/(min(i))^2;
sum1=sum1+p(i)*z(bz(i));
sum2=sum2+p(i);
end
Zp=sum1/sum2;
fprintf('输出拟合值Zp=%d\n',Zp);
msgbox 计算结束!
计算结果如图:
童鞋们学懂了吗?有兴趣的童靴们可以关注微信公众号:闲谈测绘。小编会每天给大家普及和介绍一些小知识、小程序和小软件。