matlab 拟合_铁路选线中常见的高程拟合问题MATLAB程序

今天小编根据铁路选线中的一个常见的高程拟合问题,给大家写了一段高程拟合的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 计算结束!

计算结果如图:

ba82adb808664159da6c26dcc47eb90b.png

     童鞋们学懂了吗?有兴趣的童靴们可以关注微信公众号:闲谈测绘。小编会每天给大家普及和介绍一些小知识、小程序和小软件。

dfee7b8e2781899bc1b47c225a425598.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值