定位算法——多边测量法及MATLAB编程

三边测距定位算法简介

 三边测量法是多边测量法的低级应用,即已知三个点的横纵坐标和与未知点的距离 d d d,如下图所示:
在这里插入图片描述
 如图所示已知 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ( x 3 , y 3 ) (x_3,y_3) (x3,y3) d 1 d_1 d1 d 2 d_2 d2 d 3 d_3 d3就可以求出 ( x i , y i ) (x_i,y_i) (xi,yi)

多边测量法公式推导

 1.建立已知节点与未知节点的距离方程组
{ ( x 1 − x ) 2 + ( y 1 − y ) 2 = d 1 2 ⋮ ( x n − x ) 2 + ( y n − y ) 2 = d n 2 \begin{cases} (x_1-x)^2+(y_1-y)^2=d_1^2 \\ \qquad \quad \qquad \vdots \\ (x_n-x)^2+(y_n-y)^2=d_n^2\\ \end{cases} (x1x)2+(y1y)2=d12(xnx)2+(yny)2=dn2
 2.上式方程组为非线性方程组,用方程组前 n − 1 n-1 n1个方程减去第 n n n个方程后,得到线性化的方程:
A X = B AX=B AX=B
其中:
A = [ 2 ( x 1 − x n ) 2 ( y 1 − y n ) ⋮ ⋮ 2 ( x n − 1 − x n ) 2 ( y n − 1 − y n ) ] A=\begin{bmatrix} 2(x_1-x_n) & 2(y_1-y_n) \\ \vdots&\vdots\\ 2(x_{n-1}-x_n) & 2(y_{n-1}-y_n)\\ \end{bmatrix} A=2(x1xn)2(xn1xn)2(y1yn)2(yn1yn)
B = [ x 1 2 − x n 2 + y 1 2 − y n 2 + d n 2 − d 1 2 ⋮ x n − 1 2 − x n 2 + y n − 1 2 − y n 2 + d n 2 − d n − 1 2 ] B=\begin{bmatrix} x_1^2-x_n^2+ y_1^2-y_n^2+d_n^2-d_1^2 \\ \vdots\\ x_{n-1}^2-x_n^2+ y_{n-1}^2-y_n^2+d_n^2-d_{n-1}^2\\ \end{bmatrix} B=x12xn2+y12yn2+dn2d12xn12xn2+yn12yn2+dn2dn12
 3.用最小二乘法求解上边方程得:
X = ( A T A ) − 1 A T b X=(A^TA)^{-1}A^Tb X=(ATA)1ATb

三边测距定位算法MATLAB程序

%% x输入为横坐标矩阵 yx输入为纵坐标矩阵 distance为距离矩阵,距离矩阵里可能包含0值,即未给出距离的值
%%  xx,yy 分别为求得的未知点横纵坐标
function [xx,yy]=Trilat(x,y,distance)
[sz1,sz2]=size(distance);%获取距离矩阵大小
%%处理数据
for i=1:sz1
    n=1;
    for m=1:sz2
        if distance(i,m)~=0%判断距离矩阵是否为0
            x1(i,n)=x(m);%不等于0时取对应的x,y值
            y1(i,n)=y(m);
            d(i,n)=distance(i,m);
            n=n+1;         
        end
    end
end
[sz3,sz4]=size(x1);%获取处理后距离矩阵大小
%%根据三边测量法求解位置节点
for i=1:sz1
n=1;
for o=1:sz4-2
    for p=o+1:sz4-1
        for q=p+1:sz4
            A=[2*(x1(i,o)-x1(i,q)),2*(y1(i,o)-y1(i,q));2*(x1(i,p)-x1(i,q)),2*(y1(i,p)-y1(i,q))];
            B=[x1(i,o)^2-x1(i,q)^2+y1(i,o)^2-y1(i,q)^2+d(i,q)^2-d(i,o)^2;x1(i,p)^2-x1(i,q)^2+y1(i,p)^2-y1(i,q)^2+d(i,q)^2-d(i,p)^2];
            X=(A'*A)^(-1)*A'*B;            
            xx(i,n)=X(1);
            yy(i,n)=X(2);
            n=n+1;
        end
    end    
end
end

end

 多边测量法代码可私信我。创作不易,请大家多多支持!

  • 16
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会学习的小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值