控制网平差程序设

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

间接平差编程源代码

chkdat函数(72页)

function [n1,k]=chkdat(sd,pn,n1)

n=length(n1);

k=0;

for i=1:n

i1=0;

for j=1:sd

if(n1(i)==pn(j))

i1=1;

n1(i)=j;

break;

end

end

if(i1==0)

% fprintf(fit2,'%5d %5d\n',i,n1(i)

k=1;

end

end

return

readlevelnetdata函数(73页)

function [ed,dd,sd,gd,pn,h0,k1,k2,h1,s]=readlevelnetdata global filename filepath;

global ed dd sd pn gd h0 k1 k2 h1 s k11 k12;

k1=[];k2=[];h=[];s=[];

[filename,filepath]=uigetfile('*.txt','选择高程数据文件');

fid1=fopen(strcat(filepath,filename),'rt');

if(fid1==-1)

msgbox('Input File or Path is not correct','Warning','warn');

return;

end

ed=fscanf(fid1,'%f',1);

dd=fscanf(fid1,'%f',1);

sd=ed+dd;

gd=fscanf(fid1,'%f',1);

pn=fscanf(fid1,'%f',sd);

h0=fscanf(fid1,'%f',ed);

h0(dd+1:ed+dd)=h0(1:ed);

heightdiff=fscanf(fid1,'%f',[4,gd]);

heightdiff=heightdiff';

k1=heightdiff(:,1);%起点

k2=heightdiff(:,2);%终点

k11=heightdiff(:,1);%起点

k12=heightdiff(:,2);%终点

h1=heightdiff(:,3);%高差

s=heightdiff(:,4);%距离

fclose('all');

%点号转换

[k1,k01]=chkdat(sd,pn,k1);

[k2,k02]=chkdat(sd,pn,k2);

h0(1:dd)=20000;

ie=0;

while(1)%计算近似高程

for k=1:gd

i=k1(k);

j=k2(k);

if(h0(i)<1e4&h0(j)>1e4)

h0(j)=h0(i)+h1(k);

ie=ie+1;

end

if(h0(i)>1e4&h0(j)<1e4)

h0(i)=h0(j)-h1(k);

ie=ie+1;

end

end

if(ie==dd)

break;

end

end

h0=reshape(h0,length(h0),1); return

bm1函数(75页)

function id=bm1(gd,dd,k1,k2)

%计算一维压缩存放的数组id

id=[];

for i=1:dd

k=i;

for j=1:gd

i1=k1(j);

i2=k2(j);

if(i1==i&i2

k=i2;

end

if(i2==i&i1

k=i1;

end

end

id(i)=k;

end

for i=2:dd

id(i)=id(i-1)+i-id(i)+1;

end

return

一维压缩存储法方程平差(76页)

global pathname filename

global ed dd sd pn gd h0 k1 k2 h1 s dh;

p=1./s;

id=bm1(gd,dd,k1,k2);

mm=id(dd);

a(1:mm)=0;

b(1:dd)=0;

for k=1:gd %形成法方程

i=k1(k);

j=k2(k);

h1=h1(k)+h0(i)-h0(j);

if(i<=dd)

ii=id(i)-i;

a(ii+i)=a(ii+i)+p(k);

b(i)=b(i)-h1*p(k);

end

if(j<=dd)

jj=id(j)-j;

a(jj+j)=a(jj+j)+p(k);

b(j)=b(j)+h1*p(k);

if(i<=dd)

if(i>=j)

a(ii+j)=a(ii+j)-p(k);

else

a(jj+i)=a(jj+i)-p(k);

end

end

end

end

a=gs5(dd,a,id);%变带宽下三角紧缩存储高斯消元法dh=cy6(a,b,id,dd,1);%常数项约化与回代子程序

dh(dd+1:ed+dd)=0;

hm(dd+1:ed+dd)=0;

for i=1:sd

相关文档
最新文档