• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: Matlab
  • 标签: 水准网  matlab  

资源简介

matlab编写的水准网平差文件,能够将已知的高程信息经过数据整理读入,自动计算出平差结果

资源截图

代码片段和文件信息

%-------------------------------
% 水准网数据读入
%-------------------------------
[filenamefilepath]=uigetfile(‘水准网.txt‘‘TEXT file‘);
fn=num2str(filename);
fid1=fopen(fn);
if(fid1==-1)
    msgbox(‘Input File or Path is not correct‘‘Warning‘‘want‘);
return;
end
% open a file to read
ed=fscanf(fid1‘%f‘1);                %  已知点个数
dd=fscanf(fid1‘%f‘1);                %  未知点个数
sd=ed+dd;                              %  总点数
gd=fscanf(fid1‘%f‘1);                %  观测值个数
pn=fscanf(fid1‘%f‘sd);               %  点号
%known data
H0=fscanf(fid1‘%f‘[2ed]);           %  2*3矩阵形式的已知点点号及高程
H0=H0‘;                                %  3*2矩阵形式的已知点点号及高程
h01=H0(:1);                           %  已知点点号
h0=H0(:2);                            %  已知点高程
h0(dd+1:dd+ed)=h0(1:ed)
heightdiff=fscanf(fid1‘%f‘[4gd]);   %  水准网观测数据信息
heightdiff=heightdiff‘;
k1=heightdiff(:1);                    %  起点点号
k2=heightdiff(:2);                    %  终点点号
h1=heightdiff(:3);                    %  高差观测值
dis=heightdiff(:4);                   %  距离观测值
fclose(‘all‘);
%-----------------------------------
%近似高程计算
%-----------------------------------
h0(1:dd)=20000;
ie=0;
while(1)
    for k=1:gd
        i=k1(k);
        j=k2(k);
        for a=1:sd
            if(pn(a)==i)
                m=a;
            end
        end
        for b=1:sd
            if(pn(b)==j)
                n=b;
            end                        %  点号转换
        end
        if(h0(m)<=1e4&h0(n)>=1e4)
            h0(n)=h0(m)+h1(k);
            ie=ie+1;
        end
        if(h0(m)>=1e4&h0(n)<=1e4)
            h0(m)=h0(n)-h1(k);
            ie=ie+1;
        end
    end
    if(ie==dd)
        break;
    end
end
%---------------------------------
%水准网平差
%---------------------------------
A=zeros(gddd);
for k=1:gd
    i=k1(k);
    j=k2(k);
    for a=1:sd
        if(pn(a)==i)
            m=a;
        end
    end
    for b=1:sd
        if(pn(b)==j)
            n=b;
        end
    end
    if n<=dd
        A(kn)=1;
    end
    if m<=dd
    A(km)=-1;
    end
    tl(k)=h0(m)-h0(n)+h1(k);
end                                  %  至此为构建系数矩阵A及常数项L
[nt]=size(A);                       
r=n-t;
l=tl‘;
p=diag(1./dis);                      %  权阵
Delt_X=inv(A‘*p*A)*A‘*p*l;
h00=h0(ed+1:sd);
h0=h0(1:ed);
Xp=h0+Delt_X;
V=A*Delt_X-l;
Lp=h1+V;
%精度评定
uw0=sqrt(V‘*p*V/r);
Qxx=inv(A‘*p*A);
uwh=uw0*sqrt(diag(Qxx));
uwh(dd+1:ed+dd)=0.0;
Qff=A*Qxx*A‘;
uwl=uw0*sqrt(diag(Qff));
Xp=[Xp;h00];
h0=[h0;h00];
Delt_X=[Delt_X;zeros(ed1)];
%------------------------------------
%成果输出
%------------------------------------
[filenamepathname]=uiputfile(‘resultdata.txt‘‘TEXT file‘);
fn=num2str(filename);
fid2=fopen(fn‘wt‘);
if(fid2==-1)
    msgbox(‘Error by Opening Output File‘‘Warning‘‘warn‘);
end
fprintf(fid2‘待定点高程平差值及中误差: \n  pn   h0(m)    Delt_X(m)    Xp(m)    hm\n‘);
fprintf(fid2‘%5d %10.4f %10.4f %10.4f %10.4f\n‘[pnh0Delt_XX

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        737  2017-12-06 22:50  第5章 高程控制网平差程序设计\resultdata.txt

     文件       3377  2017-12-06 22:50  第5章 高程控制网平差程序设计\ShuiZhunWang.m

     文件        664  2017-11-07 15:42  第5章 高程控制网平差程序设计\SZWchengguoshuchu.m

     文件       1167  2017-11-07 15:43  第5章 高程控制网平差程序设计\SZWduru.m

     文件        684  2017-11-07 15:42  第5章 高程控制网平差程序设计\SZWjinsigaocheng.m

     文件        749  2017-11-07 20:34  第5章 高程控制网平差程序设计\SZWpingcha.m

     文件        123  2017-11-07 20:49  第5章 高程控制网平差程序设计\test.txt

     文件        183  2017-11-07 21:26  第5章 高程控制网平差程序设计\水准网.txt

     目录          0  2017-11-07 22:29  第5章 高程控制网平差程序设计

----------- ---------  ---------- -----  ----

                 7684                    9


评论

共有 条评论