資源簡介
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
評論
共有 條評論