测量平差实习报告

课程编号:                         课程性质:选修

平差实习

     院: 

     业: 

     级: 20##03 

     2011301610***

姓     名    ******    

指导教师 :    ******* 

           


目录

一、题目内容................................................. 2

二、函数模型................................................. 3

三、计算框图、程序说明及源程序

1、计算框图:........................................... 3

2、程序说明............................................... 3

3、源程序................................................... 8

三、计算过程............................................... 29

四、计算结果............................................... 29

五、结果检核

第一题...................................................... 31

第二题...................................................... 32

六、实习心得............................................... 34


一、题目内容

    第一题:1为一水准网,A、B、C为已知高程点,P1~P9为9个待定高程点,第一次观测了图中1~15条水准路线的高差,各水准路线的观测高差、距离及已知点高程均列于表4,试求(1)1公里高差平差值中误差;(2)各待定点高程平差值及中误差;

如果准备加测5段高差16~20(图中用虚线表示),(3)试估算平差后各待定点的精度;(4)精度最弱的点发生改变没有;(5)哪一点精度提高得最多。

图1

      表1                       水准网观测数据


     第二题:见平差辅助软件

二、函数模型

第一题:本题采用间接平差模型即,误差方程为

第二题:本题采用间接平差模型即,误差方程为

三、计算框图、程序说明及源程序

1、计算框图:

 

2、程序说明

    这两个程序由matlab写成。

第一题

    可以适用于任何闭合水准平差,先要把数据写进一个txt文件,格式为:

    已知点个数 未知点数 观测值个数 增加观测值个数

    已知点点号 已知点高程

    起点点号 终点点号 高程 距离

    …

    …

    注意已知点点号变为数字,按字母顺序接在未知点点号之后。

    然后运行程序,程序会弹出一个窗口,选择刚刚写的txt文件,程序就可算出1公里高程平差值中误差(q0),各待定点高程平差值及中误差,以及加测5段高差后各待定点精度,精度最弱点的点号,各待定点精度的变化。

    1 水准网数据结构的设计水准网根据其网形可分为附合、闭合和支水准。其中应用最广的为附合和闭合水准网。不管何种网形,一条水准路线包括四个数据: 起始点、高差、距离、终点,且H起+ h高差= H终,因此在进行数据结构的设计中,必须体现出终点、起点从而判断其与高差关系。在本程序设计中,利用qd[],zd[],h[],jl[],分别表示起点点号、终点点号、高差、距离所组成的矩阵。

    2. 1 水准网所有点高程确定

在水准网间接平差计算过程中,按照已知点的个数确定参数个数,有已知点时,参数个数等于未知点个数,没有已知点时参数个数等于未知点个数减1,但是在进行方程列立时,为了计算方便首先要求得参数X 的近似值,但是对于用程序实现其自动求取近似值比较麻烦,为了Matlab 实现运算简单,因此在本程序中,所有未知点的高程起始值均为0,通过以下代码实现。HHH = HH; % HH 为读取文件中已知点高程矩阵,HHH 为未知点高程%zd 总点数,wz 未知点数,

for i = 1: b

HHH( zd - wz + i) = 0; % 给未知高程点添加高程零生成HHH,b 为未知点个数

    2. 2 水准网误差方程系数矩阵生成

    对于水准网间接平差而言,最重要的计算步骤不外乎误差方程的列立,而对于程序设计重点和难点就是自动生成误差方程系数矩阵B 和常数项L。在本程序的设计过程中,利用起始点、终点、高差。距离之间的对应关系,利用循环计算常数项L,由于水准网比较特殊,系数阵B 也特殊基本上是0、1 、- 1 组成的矩阵,根据这一特点利用对应关系确定其系数阵B。%qd,zd 存放的是与各边相对应的点的点号,通过自定义函数实现,方便确定B 与L。

for i=1:s

    e=qh(i);

    f=zh(i);

    L(i)=h(i)-(HHH(f)-HHH(e));

end

L=L';

%常数项L

for i=1:s

    e=qh(i);

    f=zh(i);

    if(e<=wd)

        B(i,e)=-1;

    end

    if(f<=wd)

        B(i,f)=1;

    end

end

    2. 3 水准网平差计算与结果输出

    1) 对于水准网平差计算,相对Matlab 而言。仅需几行代码可以实现

P = diag( 1. /s) ; %解权阵

x = inv( B’* P* B) * ( B’* P* l) ; % 高程改正数x,B 系数阵,l 为常数项阵

v = B* x - l; %观测值改正数

q0 = sqrt( v’*P* v /( s-wd) ) ;

Qxx = inv( B’* p* B) ;

q = q0* sqrt( diag( Qxx) ) ; % 待定点高程平差值中误差

第二题

    也适用于任何已知数据为已知点坐标(其中有两个已知点相邻)的闭合导线网平差,把题目软件输出的观测值表用word处理一下,删掉汉字,前面加上几个数据,分别是边观测值个数,角观测值个数,已知点个数,点总个数,去掉角度编号前面的角标志和后面角度值的度分秒标志,在文本的末尾加上已知点点号和已知点坐标。另外,要把所有0点号改成最大点号再加上1。

    程序先计算各个待定点坐标的估计值。由观测角出发,按观测顺序检索,若第i个角的末点的坐标未知,则判断起点和中点坐标是否已知,若已知,则根据这两个点的坐标算出后视方向方位角,再结合前视方向边长观测值(根据点号给每个角的两条边按边长观测矩阵顺序编个号,方便引用)及第i个观测角的大小,推算出末点的坐标。再用同样的方法算出未知起点的坐标。然后跳到下一个角进行计算,如此完成一遍计算,制作一个循环,重复刚才的运算直到所有未知点的坐标都估算出来。

    然后程序根据刚算出的未知点坐标估计值和已知点坐标算出所有边和角的估算值(边和角的各个点可由点号矩阵检索到,然后再结合标矩阵得到各个坐标),以此为基础,计算系数矩阵B。先默认B为0,再针对每个角,结合导线网间接平差的误差方程,求出每个观测值改正数用参数式时参数前面的系数,然后组成B矩阵。因为对于某些观测边来说,它们的端点为已知点,已知点的坐标不是参数,因此还要把刚生成的矩阵中去掉几列,已知点点号是多少,就去掉第几列,(注意要按照点号大小,从大往小删除。)在求B矩阵时要注意要把估计值中的角化成角度值,边化成以mm为单位。然后算出矩阵l.对于权阵,角度的权全部定为1,边的权定为144/边观测值。

算出B,l,P矩阵后,就可以算出坐标改正数x,观测值改正数v,以及单位权中误差了,代码如下:

x=inv(B'*P*B)*B'*P*l;

v=B*x-l;   %v是改正数,角以秒为单位,边以mm位单位

u0=sqrt( v'*P*v/( (zg-yg)*2 ) );   %单位权中误差

    注意坐标改正数和边长改正数以mm为单位,而角度改正数以秒为单位。

    求出改正数后,即可求出坐标平差值和观测值平差值,继而还可求出坐标平差值中误差及各观测值平差值中误差。对平差结果进行整合时,把坐标平差值带入,反算出每个边长和角的大小,与观测值平差值对照,若能对应上,则说明结果符合要求。

3、源程序

第一题:

[f_name1,filepath]=uigetfile('*.txt','pick a file for read');

fid=fopen(strcat(filepath,f_name1),'rt');

yd=fscanf(fid,'%f',1);  %已知点个数

wd=fscanf(fid,'%f',1);%未知点数

s=fscanf(fid,'%f',1);%观测值个数

s2=fscanf(fid,'%f',1);%增加观测值个数

yh=fscanf(fid,'%f',yd);%已知点点号

HH=fscanf(fid,'%f',yd);%已知点高程

jz=fscanf(fid,'%f',[4,s+s2]);%第四行到末尾的观测数矩阵

jz=jz';

qh=jz(:,1);%起点点号

zh=jz(:,2);%终点点号

h=jz(:,3);%高差

jl=jz(:,4);%距离

fclose('all');

for i=(wd+1):(wd+yd)

    HHH(i)=HH(i-wd);

end

for i=1:wd

    HHH(i)=0;% 给未知高程点添加高程零生成HHH

end

for i=1:s

    e=qh(i);

    f=zh(i);

    l(i)=h(i)-(HHH(f)-HHH(e));

end

l=l';

%常数项l

for i=1:s

    e=qh(i);

    f=zh(i);

    if(e<=wd)

        B(i,e)=-1;

    end

    if(f<=wd)

        B(i,f)=1;

    end

end

jl1=jl(1:s,:);%未算上第二题加上的几个测段

P=diag(1./jl1);

xg=inv(B'*P*B)*B'*P*l;%xg是参数改正数;

V=B*xg-l;

q0=sqrt(V'*P*V/(s-wd));

disp('****************各待测点高程平差值为***************');

XP=xg

disp('**************************************************');

%q0为单位权中误差,xg为参数改正值,由于参数的估计值为0,所以各参数的平差值,即各待定点高程的平差值等于xg

%第二小题

Qxx=inv(B'*P*B);%协因数阵

disp('*****************各待定点高程平差值中误差为:*********');

q = q0* sqrt( diag( Qxx) )

disp('**************************************************');

%各待定点的中误差为:

k=q(1);

for i=1:wd

    if q(i)>k

        k=q(i);

        m=i;

%m为精度最弱点的点号

    end

end

%寻找精度最弱的点

disp('****************精度最弱的点点号为:********************');

disp(m);

disp('******************************************************');

%求出加测段后的B矩阵

for i=s+1:s+s2

    e=qh(i);

    f=zh(i);

   

   

    if(e<=wd)

        B(i,e)=-1;

    end

    if(f<=wd)

        B(i,f)=1;

    end

end

P2=diag(1./jl);%加测段后的权阵P

Qxx2=inv(B'*P2*B);%加测段后的协方差

disp('*****************平差后各待定点的中误差为:*****************');

q2=q0*sqrt(diag(Qxx2))

disp('**************************************************');

disp('****************精度最弱的点点号为:********************');

disp(m);

disp('**************************************************');

tisheng=q-q2;

if tisheng(m)>0

    disp('最弱点的精度提升了');

else

    disp('最弱点的精度没有提升');

end

k=tisheng(1);

for i=1:wd

    if tisheng(i)>tisheng(1)

        k=tisheng(i);

        n=i;

    end

end

disp('*******************精度提升最高的点点号为*********************');

disp(n);

disp('**************************************************');

   

%结果检核

%求出根据各点平差高程算出的各水准路线的高差,与观测高差的平差值比较,若符合,则说明结果符合要求

for i=wd+1:wd+yd

    XP(i)=HH(i-wd);

end

%加入已知点高程

for i=1:s

    e=qh(i);

    f=zh(i);

    hy(i)=XP(f)-XP(e);

end

hy=hy';

for i=1:s

    hp(i)=h(i)+V(i);

end

hp=hp';

chabie=hy-hp;   

 

第二题:

[f_name1,filepath]=uigetfile('*.txt','pick a file for read');

fid=fopen(strcat(filepath,f_name1),'rt');

bg=fscanf(fid,'%f',1);%边长观测值个数

jg=fscanf(fid,'%f',1);%角度观测值个数

yg=fscanf(fid,'%f',1);%已知点个数

zg=fscanf(fid,'%f',1);%点总数

wg=zg-yg;%未知点个数

BIAN=fscanf(fid,'%f',[3,bg]);%读入所有边长

BIAN=BIAN';   %读入后发生了转置,得重新转过来

q=BIAN(:,1);%边起点点号

m=BIAN(:,2);%边末点点号

sg=BIAN(:,3);%边长观测值

JIAO=fscanf(fid,'%f',[6,jg]);%读入所有角度

JIAO=JIAO';

Q=JIAO(:,1);%角度起点点号

Z=JIAO(:,2);%角度中点点号

M=JIAO(:,3);%角度末点点号

DU=JIAO(:,4);%角度观测值度

FEN=JIAO(:,5);%角度观测值分

MIAO=JIAO(:,6);%角度观测值秒

HD=(DU+FEN/60+MIAO/3600)/180*pi;%角度值转换为弧度值   在matlab里以弧度计算

W=zeros(zg,1);%生成矩阵

X=W(:,1);

Y=X;     

%定义两个向量X,Y作为点坐标估计值

yh=fscanf(fid,'%f',yg);%已知点点号

for i=1:yg

   

        X(yh(i))=fscanf(fid,'%f',1);

        Y(yh(i))=fscanf(fid,'%f',1);

end   %if条件句或循环语句要以end结尾

%求未知点坐标估计值,

 for i=1:jg

     for j=1:bg

       if( ( q(j)==Z(i)&m(j)==M(i) )| ( q(j)==M(i) & m(j)==Z(i) )   )

          

           qbh(i)=j;

           break;

       end

     end

     for j=1:bg

       if( ( q(j)==Q(i)&m(j)==Z(i) )| ( q(j)==Z(i) & m(j)==Q(i) )   )

          

           hbh(i)=j;

           break;

       end

     end

 end

 %找到所有角对应的前边编号

 

k=0;

%注意,只算角末点坐标不够,因为对有一些图来说,已知点(两相邻的)点号靠后,很多点没法计算,得再加上计算起点坐标

while(k<wg)%开始时判断语句为k<zg,死循环!

   

    for i=1:jg

        if(X(M(i))==0 &Y(M(i))==0)

        if( (X(Z(i))~=0 | Y(Z(i))~=0) & (X(Q(i))~=0 |Y(Q(i))~=0))    %下标不能为0  所以将所有0点号变成zg+1

            fj=atan( (Y(Z(i))-Y(Q(i)))/(X(Z(i))-X(Q(i)) ) );

            if ( X(Z(i))>X(Q(i)) )

                fj=fj+pi;

            end

            %fj为方位角

          

            k=k+1;

            X(M(i))=X(Z(i))+sg(  qbh(i)  )*cos(fj+HD(i));

            Y(M(i))=Y(Z(i))+sg(  qbh(i)  )*sin(fj+HD(i));

           

        end

    end

   

    if(X(Q(i))==0 &Y(Q(i))==0)

        if( (X(Z(i))~=0 | Y(Z(i))~=0) & (X(M(i))~=0 |Y(M(i))~=0))    %下标不能为0  所以将所有0点号变成zg+1

            fj=atan( (Y(Z(i))-Y(M(i)))/(X(Z(i))-X(M(i)) ) );

            if ( X(Z(i))>X(M(i)) )

                fj=fj+pi;

            end

            %fj为方位角

          

            k=k+1;

            X(Q(i))=X(Z(i))+sg(  hbh(i)  )*cos(fj+2*pi-HD(i));

            Y(Q(i))=Y(Z(i))+sg(  hbh(i)  )*sin(fj+2*pi-HD(i));

           

        end

    end

    end

end

       

    %求边估计值

for i=1:bg

    sj(i)=sqrt( ( X(m(i))-X(q(i)) )^2 + ( Y(m(i))-Y(q(i)) )^2   );%sj为边估计值(由坐标估计值推出)

end

sj=sj';

%求角估计值

for i=1:jg

    fj1=atan( (Y(Z(i))-Y(Q(i)))/(X(Z(i))-X(Q(i)) ) );

    if ( X(Z(i))>X(Q(i)) )

           fj1=fj1+pi;

    end    %后视方位角

    fj2=atan( (Y(Z(i))-Y(M(i)))/(X(Z(i))-X(M(i)) ) );

    if ( X(Z(i))>X(M(i)) )

           fj2=fj2+pi;

    end    %前视方位角

   

    jj(i)=fj2-fj1;

    if (jj(i)<0)

        jj(i)=jj(i)+2*pi;   %保证所求夹角为我们需要的角,fj1和fj2的范围为-90度到270度,若fj2>fj1,则fj2-fj1就为所求,否则要加360度

    end

end

jj=jj';

  %计算系数矩阵B

  %计算角部分

for i=1:jg

    B1(i,Q(i))=(  Y(Q(i))-Y(Z(i))  )/(sj( hbh(i) ))^2;

    B1(i,M(i))=(  Y(M(i))-Y(Z(i))  )/sj( qbh(i) )^2;

    B1(i,Z(i))=B1(i,M(i))-B1(i,Q(i));

    B1(i,Q(i)+zg)=-(  X(Q(i))-X(Z(i))  )/sj( hbh(i) )^2;

    B1(i,M(i)+zg)= (  X(M(i))-X(Z(i))  )/sj( qbh(i) )^2;

    B1(i,Z(i)+zg)=-( B1(i,Q(i)+zg) + B1(i,M(i)+zg) );

end

   %计算边部分

for i=1:bg

    B2(i,m(i))=(   X(m(i))-X(q(i))  )/sj(i);

    B2(i,q(i))=- B2(i,m(i));

    B2(i,m(i)+zg)=(   Y(m(i))-Y(q(i))  )/sj(i);

    B2(i,q(i)+zg)=- B2(i,m(i)+zg);

end

B=[B1*180*3600/pi/1000;B2];  %注意此处B1要化为角度值,以秒为单位,另外要注意统一边长单位,后面都是毫米级,所以要除以1000(*1000/1000^2)

for i=1:yg

    B(:,yh(yg+1-i)+zg)=[];%去掉已知点坐标对应的系数,但注意删除时要从后往前

end

for i=1:yg

    B(:,yh(yg+1-i) )=[];

end

%计算矩阵l

l1=(HD-jj)*180*3600/pi;   %,角度,以秒为单位

l2=(sg-sj)*1000;  %边,注意此处要以mm为单位

l=[l1;l2];

%计算权阵P

for i=1:jg

    P(i,i)=1;

end

for i=(jg+1):(jg+bg)

    P(i,i)=144/sg(i-jg);  %定权方法见课本141页

end

x=inv(B'*P*B)*B'*P*l;

v=B*x-l;   %v是改正数,角以秒为单位,边以mm位单位

u0=sqrt( v'*P*v/( (zg-yg)*2 ) );   %单位权中误差

%求角平差值,此处只需把秒部分改正

DU1=DU;

FEN1=FEN;

for i=1:jg

    MIAO1(i)=MIAO(i)+v(i);

    MIAO1=MIAO1';

    if (MIAO1(i)>=60)

        MIAO1(i)=MIAO1(i)-60;

       

        FEN1(i)=FEN(i)+1;

        if FEN1(i)==60

            FEN1(i)=0;

            DU1(i)=DU(i)+1;

        end

    end

     if (MIAO1(i)<0)

        MIAO1(i)=MIAO1(i)+60;

        FEN1(i)=FEN(i)-1;

        if FEN1(i)<0

            FEN1(i)=FEN1(i)+60;

            DU1(i)=DU(i)-1;

        end

     end

end

disp('角度平差值为');

jp=[DU1 FEN1 MIAO1]

%求边平差值

for i=1:bg

    sp(i)=sg(i)+v(i+jg)/1000;%注意单位

end

disp('边平差值为:');

sp=sp'   %sp为边平差值

%求坐标平差值

%由于坐标阵X,Y中包括已知点坐标,因此坐标改正数x必须在插上几个0元素

%要从前往后插

for i=1:wg*2

    x1(i)=x(i);

end

for i=1:yg

    %先把要插入元素位置后面的元素全部后移一位

    k=wg*2+i-1;%末尾元素位置

    for j=yh(i):k

        e=yh(i)+k;

        x1(e-j+1)=x1(e-j);%倒着移

    end

    x1(yh(i))=0;

end

for i=1:yg

    %先把要插入元素位置后面的元素全部后移一位

    k=wg*2+yg+i-1;%末尾元素位置

    for j=yh(i)+zg:k

        e=yh(i)+zg+k;

        x1(e-j+1)=x1(e-j);%倒着移

    end

    x1(yh(i)+zg)=0;

end

for i=1:zg

    XP(i)=X(i)+x1(i)/1000;%注意单位

    YP(i)=Y(i)+x1(i+zg)/1000;%注意单位

end

disp('待定点坐标平差值为:(此处把已知点包含了进来,直接忽略掉)');

XP=XP'

YP=YP'

disp('各待定点坐标平差值中误差为:(此处还是按点号顺序,但去掉了已知点)');

disp('(前面一半是X,后面一半是Y)');

%求待定点坐标平差值中误差

Qxx=inv(B'*P*B);

Qxd=diag(Qxx);

uz=u0*sqrt(Qxd)

%还是按点号顺序,只是除去了已知点

%求各待测点点点位中误差

k=u0*sqrt(Qxd(1)+Qxd(1+wg));

for i=1:wg

    up(i)=u0*sqrt(Qxd(i)+Qxd(i+wg));

    if up(i)>k;

        k=up(i);

        w2=i;%精度最弱点点号

    end

end

up=up';

%求各观测值平差值中误差

QLP=B*inv(B'*P*B)*B';%观测值协因数阵

u=u0*sqrt(diag(QLP));%各观测值中误差

mu=u(jg+1)/sg(1);%第一个边边长相对中误差

for i=jg+1:jg+bg

    xu(i-jg)=u(i)/sg(i-jg);%各边长相对中误差

    if xu(i-jg)>mu

        mu=xu(i-jg);%精度最弱边相对中误差

        w=i-jg;%精度最弱边边号

    end

end

disp('精度最弱边边号为:');

disp(w);

disp('精度最弱边相对中误差为:');

disp(mu);

%检验结果是否闭合

%求边检验值

for i=1:bg

    sy(i)=sqrt( ( XP(m(i))-XP(q(i)) )^2 + ( YP(m(i))-YP(q(i)) )^2   );%sj为边估计值(由坐标估计值推出)

end

sy=sy';

%求角检验值

for i=1:jg

    fj1=atan ( (YP(Z(i))-YP(Q(i)))/( XP(Z(i))-XP(Q(i)) ) );

    if  ( XP(Z(i))>XP(Q(i)) )

           fj1=fj1+pi;

    end    %后视方位角

    fj2=atan( (YP(Z(i))-YP(M(i)))/(XP(Z(i))-XP(M(i)) ) );

    if ( XP(Z(i))>XP(M(i)) )

           fj2=fj2+pi;

    end    %前视方位角

    jy(i)=fj2-fj1;

    if (jy(i)<0)

        jy(i)=jy(i)+2*pi;   %保证所求夹角为我们需要的角,fj1和fj2的范围为-90度到270度,若fj2>fj1,则fj2-fj1就为所求,否则要加360度

    end

end

jy=jy';

bchabie=sy-sp;

HDY=(DU1+FEN1/60+MIAO1/3600)/180*pi;%角度值转换为弧度值   在matlab里以弧度计算

jchabie=HDY-jy;

%求极值

Qxx=inv(B'*P*B);

for i=1:wg

    K(i)=sqrt( ( Qxx(i,i)-Qxx(i+wg,i+wg))^2+4*Qxx(i,i+wg)^2 );

    E(i)=sqrt( u0^2/2*( Qxx(i,i)+Qxx(i+wg,i+wg)+K(i) ) );

    F(i)=sqrt( u0^2/2*( Qxx(i,i)+Qxx(i+wg,i+wg)-K(i) ) );

    JF(i)=atan(2*Qxx(i,i+wg)/(Qxx(i,i)-Qxx(i+wg,i+wg)))/2;

end

E=E'/1000%极大值

F=F'/1000%极小值

JF=JF'/pi*180%极值方向

disp('精度最弱点的误差椭圆的E,F,极值方向(弧度制)分别为');

disp(E(w2));

disp(F(w2));

disp(JF(w2));

x=x/1000%以m为单位

fclose('all');

三、计算过程

直接运行程序即可得到结果。

四、计算结果

第一题计算结果如下:

第二题计算结果如下:

 

五、结果检核

第一题

源程序中以下语句为对结果的检核:

%结果检核

%求出根据各点平差高程算出的各水准路线的高差,与观测高差的平差值比较,若符合,则说明结果符合要求

for i=wd+1:wd+yd

    XP(i)=HH(i-wd);

end

%加入已知点高程

for i=1:s

    e=qh(i);

    f=zh(i);

    hy(i)=XP(f)-XP(e);

end

hy=hy';

for i=1:s

    hp(i)=h(i)+V(i);

end

hp=hp';

chabie=hy-hp;

若chabie为0或很小,则说明结果符合要求,经检验得结果符合要求。

第二题

源程序中以下语句为结果的检核:

%求边检验值

for i=1:bg

    sy(i)=sqrt( ( XP(m(i))-XP(q(i)) )^2 + ( YP(m(i))-YP(q(i)) )^2   );%sj为边估计值(由坐标估计值推出)

end

sy=sy';

%求角检验值

for i=1:jg

    fj1=atan ( (YP(Z(i))-YP(Q(i)))/( XP(Z(i))-XP(Q(i)) ) );

    if  ( XP(Z(i))>XP(Q(i)) )

           fj1=fj1+pi;

    end    %后视方位角

    fj2=atan( (YP(Z(i))-YP(M(i)))/(XP(Z(i))-XP(M(i)) ) );

    if ( XP(Z(i))>XP(M(i)) )

           fj2=fj2+pi;

    end    %前视方位角

   

    jy(i)=fj2-fj1;

    if (jy(i)<0)

        jy(i)=jy(i)+2*pi;   %保证所求夹角为我们需要的角,fj1和fj2的范围为-90度到270度,若fj2>fj1,则fj2-fj1就为所求,否则要加360度

    end

end

jy=jy';

bchabie=sy-sp;%边差别

HDY=(DU1+FEN1/60+MIAO1/3600)/180*pi;%角度值转换为弧度值   在matlab里以弧度计算

jchabie=HDY-jy;%角差别

当bchabie和jchabie非常小时,说明计算结果满足条件。经检验知结果符合要求。

 

 

六、实习心得

为期两周的实习在不断地学习、尝试、修正的过程中圆满结束了。这次实习让我对许多问题有了深刻的认识。我认识到编程的重要性,认识到自学能力的重要性,认识到从书本到实践还有很长一段路要走。

熟练掌握一门或多门编程语言,会让我们处理专业问题时更加得心应手。

在这次实习过程中,我的很多同学都是通过编程序完成的实习,还有一部分同学是自己计算(用计算器或者Matlab)。比较这两种办法,繁琐与简便不言而喻。我是通过编写Matlab程序完成实习的。其实很多不同的程序都可以解决这次的实习问题,实习时通过同学之间的交流知道,大家有用C的,有用C#的,还有用excel的,这些都可以很好地解决问题。看着那些计算的火热的同学,我深刻地认识到了学会编程的重要性,而编程语言有很多,我们只需要精通一到两门就可以了,这个对我们将来的工作有很大的帮助。

我们在平时一定要注重培养自己的自学能力,自学能力真的是一项很重要的能力。

这次实习过程中,遇到了很多不懂的知识,这些不懂的地方都是我求助百度解决的。值得一提的是,这次实习中,我参考了一篇论文(《基于Matlab的水准网平差设计》作者系兰州交通大学教授),我的这两个程序的很多巧妙之处都是参考那篇论文的。我想如果我不看那篇论文的话,不会很好的编写出这两个程序的。也通过这件事,我认识到我们一定要培养自己的自学能力,增强自己利用有利外界条件的本领。

这次实习,我深刻的认识到了书本到实践的路是长且艰。

记得上学期学习平差和Matlab时,自己学得很轻松,可是到实习时,发现运用学习到的知识很好地解决实际问题真的很难,这个时候我们经常会遇到许多新的问题,这个时候就需要我们对所学到的知识进行二次学习,在这个过程中,我的逻辑思维和编程思维得到了很大的锻炼,也加强了把实际问题转化为数学模型,进而转化为程序算法的能力。

除了上面提到的,在实习过程中,我分析问题的能力,解决问题的能力得到了提升,同时也增加了我的自信,我相信在以后的学习生活中,只要我努力,没有解决不了的困难,没有达不到的目标。

这次实习收获颇丰,再此感谢学院为我们安排了这次实习,也感谢在实习过程中给予我帮助和指导的老师。

综合评语:

相关推荐