水准网平差c++代码

水准网平差c++代码
水准网平差c++代码

水准网平差

结果

#include

#include

#include

#include

#define max 50

class CMatrix

{

public:

CMatrix(){row=0; column=0;}; // 默认构造函数

CMatrix(int i, int j){row=i;column=j;} // 构造函数一

CMatrix(const CMatrix& m); // 复制构造函数

~CMatrix(void){/*cout<<"谢谢使用,矩阵所占空间以释放!"<

CMatrix& operator=(const CMatrix& m); // 赋值运算符

bool operator==(const CMatrix& m); // 比括较运算符

bool operator!=(const CMatrix& m); // 比括较运算符

CMatrix operator+(const CMatrix& m); // 加运算符

CMatrix operator-(const CMatrix& m); // 减运算符

CMatrix& operator+=(const CMatrix& m); // 自加运算符

CMatrix& operator-=(const CMatrix& m); // 自减运算符

CMatrix operator-();// 取负数

CMatrix& operator*(const CMatrix& m); // 乘法运算符

void input(); //输入矩阵

void outputMatrix(); // 输出该矩阵

void setValue(int row, int column, double value) { A[row-1][column-1] = value; }// 设

置(i,j)的值

double getValue(int row, int column) const { return A[row-1][column-1]; }// 设置行、列的值

void setRow(const int i) { row = i; }

int getRow() const { return row; }

void setColunm(const int i) { column = i; }

int getColumn() const { return column; }

CMatrix& change(int i, int j);//交换矩

阵的行

CMatrix& transpose(); // 矩阵转置

CMatrix& inverse(); // 矩阵求逆

void find(int& f)const;// 判断该矩阵

是否可用于迭代求解

friend void jocabi(const CMatrix& a) ; //迭代求解

void lzys(); //列主元素法求解

void solve(); //可逆线性矩阵求解

void qxnh(); //曲线拟合

private:// 成员变量

double A[max][max];

int row;// 行

int column;// 列

};

void CMatrix::input() //输入

{ cout<<"开始输入矩阵值:"<

int i, j;

double z;

for(i=0;i

{ cout<<"请输入第"<

for(j=0;j

{ cin>>z;

A[i][j]=z;

}

}

cout<

CMatrix::CMatrix(const CMatrix& m) // 复制构造函数

{ int i, j;

for(i=0;i

for(j=0;j

this->A[i][j]=m.A[i][j];

};

CMatrix& CMatrix::operator=(const CMatrix& m) // 赋值运算符

{

int i,j;

for(i=0;i

{

for(j=0;j

A[i][j]=m.A[i][j];

}

return *this;

};

bool CMatrix::operator ==(const CMatrix& m) // 比括较运算符

{ int i,j,k;

for(i=0;i

{ for(j=0;j

if(this->A[i][j]=m.A[i][j])

k=1;

else k=0;

}

if(k=1) return true;

else return false;

};

bool CMatrix::operator !=(const CMatrix& m) // 比括较运算符

{ int i,j,k;

for(i=0;i

{ for(j=0;j

if(this->A[i][j]=m.A[i][j])

k=1;

else k=0;

}

if(k=0) return true;

else return false;

};

CMatrix CMatrix::operator+(const CMatrix& m)// 加运算符

{ int i,j;

if((this->row==m.row)&&(this->column==m

.column))

{ for(i=0;i

for(j=0;j

this->A[i][j]+=m.A[i][j];

}

else { cout<<"此两矩阵不能相加,请检查!"<

return *this;

};

CMatrix CMatrix::operator-(const CMatrix& m)// 减运算符

{ int i,j;

if((this->row==m.row)&&(this->column==m

.column))

{ for(i=0;i

for(j=0;j

this->A[i][j]-=m.A[i][j];

}

else { cout<<"此两矩阵不能相加,请检查!"<

return *this;

};

CMatrix& CMatrix::operator+=(const CMatrix& m) //自加运算符

{ int i,j;

for(i=0;i

for(j=0;jA[i][j]=2*m.A[i][j];

return *this;

};

CMatrix& CMatrix::operator-=(const CMatrix& m) //自减运算符

{ int i,j;

for(i=0;i

for(j=0;j

this->A[i][j]=m.A[i][j]-m.A[i][j];

return *this;

};

void CMatrix::find(int& f)const

{ int i;

for(i=0;irow;i++)

if(this->A[i][i]!=0) f=1;

else f=0;

};

CMatrix CMatrix::operator-() // 取负数

{ int i,j;

for(i=0;irow;i++)

for(j=0;jcolumn;j++)

this->A[i][j]=-this->A[i][j];

return *this;

};

CMatrix& CMatrix::operator*(const CMatrix& m)

// 乘法运算符

{ int i,j,t;

CMatrix n;

if(this->column==m.row)

{

for(i=0;irow;i++)

for(j=0;j

{ double sum=0.0;

for(t=0;t

sum+=this->A[i][t]*m.A[t][j];

n.A[i][j]=sum;

}

}

else {cerr<<"此两矩阵不能相乘,请检查!"<

return n;

};

void CMatrix::outputMatrix()// 输出该矩阵{ int i,j;

for(i=1;i<=row;i++)

{ for(j=1;j<=column;j++)

cout<

cout<

}

};

CMatrix& CMatrix::transpose()// 矩阵转置

{ int i,j;

CMatrix m(this->column,this->row);

for(i=0;irow;i++)

for(j=0;jcolumn;j++)

{ m.A[j][i]=this->A[i][j];}

return m;

};

void jocabi(const CMatrix& a) //高斯迭代求解

{ int f=1;

a.find(f);

if(f==0) {cerr<<"该矩阵不满足迭代求解条件!"<

else

{

CMatrix x,w;

x.setColunm(1);

x.setRow(a.getColumn());

w.setColunm(1);

w.setRow(a.getColumn());

int i;

double z;

for(i=1;i<=x.row;i++)

{ cout<<"请输入等式右侧的第"<

cin>>z;

w.A[i-1][0]=z;

}

for(i=1;i<=x.row;i++)

{ cout<<"请输入X"<

cin>>z;

x.setValue(i, 1, z);

}

i=1;

while(i<=20)

{ int j, k;

for(j=1;j<=x.row;j++)

{ double sum=0.0;

for(k=1;k

{sum=sum-(a.A[j-1][k-1])*(x.A[k-1][0]); }

for(k=j+1;k<=x.row;k++)

{sum=sum-(a.A[j-1][k-1])*(x.A[k-1][0]); }

sum+=w.A[j-1][0];

x.A[j-1][0]=sum/a.A[j-1][j-1];

}

i++;

}

for(i=1;i<=x.row;i++)

cout<<"X"<

};

double jdz(double a) //绝对值

{ if(a>0.0) return a;

else return -a;

};

CMatrix& CMatrix::change(int i, int j)//交换矩阵的行

{ int k;

double z;

for(k=1;k<=this->column;k++)

{ z=A[i-1][k-1];

A[i-1][k-1]=A[j-1][k-1];

A[j-1][k-1]=z;

}

return *this;

};

void CMatrix::lzys() //列主元素法求解

{ CMatrix x,w;

x.setColunm(1);

x.setRow(getColumn());

w.setColunm(1);

w.setRow(getColumn());

int i;

double z;

for(i=0;i

{for(int j=0;j

w.A[i][j]=0.0;

}

for(i=1;i<=x.row;i++)

x.setValue(i, 1, 0.0);

for(i=1;i<=x.row;i++)

{ cout<<"请输入等式右侧的第"<

cin>>z;

w.A[i-1][0]=z;

}

i=0;

while(i

{ int j,t,h=i;

for(j=i;j

{ if(jdz(A[j][i])

h=j+1; }

this->change(i+1,h+1);

w.change(i+1,1);

for(j=i+1;j

{ double k;

k=A[j][i]/A[i][i];

for(t=i;t

{

A[j][t]=A[j][t]-k*A[i][t];

}

w.A[j][0]=w.A[j][0]-k*w.A[i][0];

}

i++;

}

if(this->A[row-1][column-1]==0)

{cerr<<"此矩阵对应的方程组有无穷解!"<

i=column-1;

while(i>0)

{ int j, t;

for(j=i-1;j>=0;j--)

{ double k;

k=A[j][i]/A[i][i];

for(t=i;t>j;t--)

{ A[j][t]=A[j][t]-k*A[i][t]; }

w.A[j][0]=w.A[j][0]-k*w.A[i][0];

}

i--;

}

int j;

for(j=0;j

{

x.A[j][0]=w.A[j][0]/this->A[j][j];

}

for(i=1;i<=x.row;i++)

cout<<"X"<

CMatrix& CMatrix::inverse() //矩阵求逆

{ if(this->row!=this->column) {cerr<<"该矩阵不符合求逆条件!"<

else

{

CMatrix w;

w.setColunm(this->getRow());

w.setRow(getColumn());

int i;

for(i=0;i

{

for(int j=0;j

{w.A[i][j]=0.0;}

w.A[i][i]=1;

}

i=0;

while(i

{ int j,t,h=i;

for(j=i;j

{

if(jdz(A[j][i])

h=j+1;

}

this->change(i+1,h+1);

w.change(i+1,h+1);

for(j=i+1;j

{ double k;

k=A[j][i]/A[i][i];

for(t=i;t

{

A[j][t]=A[j][t]-k*A[i][t];

w.A[j][t]=w.A[j][t]-k*w.A[i][t];

}

}

i++;

}

if(this->A[row-1][column-1]==0)

{cerr<<"此矩阵求逆不成功,其所对应的方程组有无穷解!"<

while(i>0)

{ int j, t;

for(j=i-1;j>=0;j--)

{ double k;

k=A[j][i]/A[i][i];

for(t=i;t>j;t--)

{ A[j][t]=A[j][t]-k*A[i][t]; }

for(t=column-1;t>=0;t--)

{w.A[j][t]=w.A[j][t]-k*w.A[i][t];}

}

i--;

}

int j,k;

for(j=0;j

{ for(k=0;k

{w.A[j][k]=w.A[j][k]/this->A[j][j];}

this->A[j][j]=this->A[j][j]/this->A[j][j];

}

return w;

}

};

void CMatrix::solve() //可逆线性矩阵求解{

CMatrix x,w,c;

x.setColunm(1);

x.setRow(getColumn());

w.setColunm(1);

w.setRow(getColumn());

c.setColunm(getColumn());

c.setRow(getRow());

int i;

double z;

for(i=1;i<=x.row;i++)

{ cout<<"请输入等式右侧的第"<

cin>>z;

w.A[i-1][0]=z;

}

c.operator =(this->inverse());

x.operator =(c.operator *(w));

cout<<"求解结果:"<

for(i=1;i<=x.row;i++)

cout<<"X"<

void CMatrix::qxnh() //曲线拟合

{

cout<<"用矩阵曲线拟合:"<

int i, j,k,t;

double x, y;

cout<<"请输入已知坐标点的个数:";

cin>>i;

CMatrix a(i,1), g(i,i) , w(i,1),c(i,i),q(i,i),p(i,i);

for(j=1;j<=i;j++)

{ cout<<"请输入第"<

cin>>x>>y;

w.A[j-1][0]=y;

g.A[j-1][0]=1.0;

for(k=1;k

{ g.setValue(j,k+1,1.0);

for(t=1;t<=k;t++)

g.A[j-1][k]*=x;

}

}

c=g.transpose();

q=c*g;

p=q.inverse();

w=c*w;

a=p*w;

cout<<"Y="<

for(j=1;j

{ cout<<'+'<<'('<

for(k=0;k

cout<<"*x";

}

cout<

cout<<" 1 .求取其它点坐标 0. 退出 "<

{ cout<<"请选择:";

cin>>k;

switch(k)

{ case 1:

{ double x, y,sum;

cout<<"请输入待求点的横坐标(x):";

cin>>x;

y=a.A[0][0];

for(j=1;j

{ sum=a.A[j][0];

for(k=0;k

{sum*=x;}

y+=sum;

}

cout<<"纵坐标:y="<

}

case 0:

{

cerr<<"谢谢使用!"<

break;

}

default: cout<<"选择有误,请检查!"<

}

}

};

struct CElvDif

{

double value; // 观测值

double weight; // 权重

long startPoint; // 起始点编号

long endPoint; // 终点编号

};

//水准点类的设计

struct CLevelPoint

{ // 高程平差值=高程值+高程值改正数

long index; // 水准点编号

double eleValue; // 高程值

double dv; // 高程值改正数(初始化为0)

bool isKnown; // 是否为已知点};

class CElevationNet

{

public: // 成员函数

CElevationNet(){numElvDif=0;numPoints=0 ;numKnPoint=0;}; // 构造函数

~CElevationNet(){}; // 析构函数 void input();

void output();

void jsgc();

int getgz(){return numElvDif;} //返回观测值数目

int getzs(){return numPoints;} //返回总点数

int getys(){return numKnPoint;} //返回已知点数

int getws(){return numPoints-numKnPoint;} //返回未知点数 double geteleValue(int i){return this->lpVec[i-1].eleValue;} //获得高程值 long getindex(int i){return lpVec[i-1].index;} //返回高程点编号

void seteleValue(int i, double value){lpVec[i-1].eleValue+=value;} //修改高程值

void setdv(int i,double value){this->lpVec[i-1].dv=value;} //修改改正数

double getdv(int i){return lpVec[i-1].dv;} //返回改正数

friend void xishu(CMatrix& B, CMatrix& X,CElevationNet A); //求取系数矩阵和未知点高程矩阵

friend void quanzhen(CMatrix& Q, CElevationNet A); //求取权阵

friend void l_zhen( CMatrix& l ,CMatrix& L, CElevationNet A); //求取观测值L矩阵和l阵

private: // 成员变量

int numElvDif; // 高差总数

int numPoints; // 控制网中点的总数目

int numKnPoint; //控制网中已知点的数目

CElvDif edVec[max]; // 观测值数组

CLevelPoint lpVec[max]; // 高程值数组

};

void CElevationNet::input()

{ int a,b,c,i;

double z,l,g; cout<<"请对已知点和未知点进行编号,注意已知点的编号应小于未知点的编号!"<

cin>>a>>b;

numPoints=a;

numKnPoint=b;

for(i=0;i

{ lpVec[i].index=i+1;

lpVec[i].eleValue=0.0;

lpVec[i].dv=0.0;

lpVec[i].isKnown=0;

}

for(i=0;i

{ cout<<"请输入第"<

cin>>z;

lpVec[i].eleValue=z;

lpVec[i].isKnown=1;

}

cout<<"请输入观测值个数:";

cin>>c;

numElvDif=c;

for(i=0;i

{ cout<<"请输入第"<

cin>>g>>l>>a>>b;

edVec[i].value=g;

edVec[i].weight=l;

edVec[i].startPoint=a;

edVec[i].endPoint=b;

}

};

void CElevationNet::output()

{

int i;

for(i=0;inumPoints;i++)

cout<<"编号为"<lpVec[i].index<<"的点的高程值为:"<lpVec[i].eleValue<

for(i=0;inumElvDif;i++)

cout<<"观测段"<

为:"<edVec[i].value<

};

void CElevationNet::jsgc()

{ int i,j;

for(i=0;inumElvDif;i++)

{ if((lpVec[edVec[i].startPoint-1].eleValu e!=0.0)&&(lpVec[edVec[i].endPoint-1].eleVal ue==0.0))

{lpVec[edVec[i].endPoint-1].eleValue=(l pVec[edVec[i].startPoint-1].eleValue)+(edVe c[i].value);}

else

if(lpVec[edVec[i].startPoint-1].eleValue==0 .0&&lpVec[edVec[i].endPoint-1].eleValue!=0.

0)

{lpVec[edVec[i].startPoint-1].eleValue= (lpVec[edVec[i].endPoint-1].eleValue)-(edVe c[i].value);}

}

for(j=numKnPoint;jnumPoints;j++) {

if(this->lpVec[j].eleValue==0.0)

{

for(i=0;inumElvDif;i++)

{ if(this->edVec[i].startPoint==lpVec[ j].index&&this->lpVec[this->edVec[i].endPoi nt-1].eleValue!=0.0)

this->lpVec[j].eleValue=this->lpVec[thi s->edVec[i].endPoint-1].eleValue-this->edVe c[i].value;

else

if(this->edVec[i].endPoint==lpVec[j].index& &this->lpVec[this->edVec[i].startPoint-1].e leValue!=0.0)

{this->lpVec[j].eleValue=this->lpVec[this-> edVec[i].startPoint-1].eleValue+this->edVec [i].value;}

}

}

//cout<<"第"<lpVec[j].index<<"个点的高程近似值:"<lpVec[j].eleValue<

}

};

void xishu(CMatrix& B, CMatrix& X,CElevationNet A)

{

int i,j;

for(i=1;i<=B.getRow();i++)

for(j=1;j<=B.getColumn();j++)

{ B.setValue(i,j,0);}

for(i=0;i

{ if(A.lpVec[A.edVec[i].startPoint-1].isKn own==1&&A.lpVec[A.edVec[i].endPoint-1].isKn own==0)

{B.setValue(i+1,A.edVec[i].endPoint-A.numKn Point,1);}

else

if(A.lpVec[A.edVec[i].startPoint-1].isKnown ==0&&A.lpVec[A.edVec[i].endPoint-1].isKnown ==1)

{ B.setValue(i+1,A.edVec[i].startPoint -A.numKnPoint,-1);}

else

if(A.lpVec[A.edVec[i].startPoint-1].isKnown ==0&&A.lpVec[A.edVec[i].endPoint-1].isKnown ==0)

{ B.setValue(i+1,A.edVec[i].endPoint-A. numKnPoint,1);

B.setValue(i+1,A.edVec[i].startPoint-A. numKnPoint,-1);

}

}

for(i=0;i

X.setValue(i+1,1,A.lpVec[A.numKnPoint+i ].eleValue);

};

void quanzhen(CMatrix& Q, CElevationNet A) {

int i,j;

double sum=0.0;

for(i=0;i

sum+=A.edVec[i].weight;

sum=sum/A.numElvDif;

for(i=1;i<=Q.getRow();i++)

for(j=1;j<=Q.getColumn();j++)

{ Q.setValue(i,j,0);}

for(i=1;i<=Q.getRow();i++)

Q.setValue(i,i,sum/A.edVec[i-1].weight) ;

};

void l_zhen( CMatrix& l ,CMatrix& L, CElevationNet A)

{

int i;

double m;

for(i=0;i

L.setValue(i+1,1,A.edVec[i].value);

for(i=0;i

{

m=(A.lpVec[A.edVec[i].startPoint-1].ele Value+A.edVec[i].value-A.lpVec[A.edVec[i].e ndPoint-1].eleValue)*1000;

l.setValue(i+1,1,m);

}

};

void main()

{

CElevationNet A;

A.input();

A.jsgc();

CMatrix

B(A.getgz(),A.getws()),Q(A.getgz(),A.getgz( )),X(A.getws(),1),l(A.getgz(),1),b(A.getws( ),A.getgz()),V(A.getgz(),1);

CMatrix

NBB(A.getws(),A.getws()),x(A.getws(),1) ,N(A.getws(),A.getws()),L(A.getgz(),1),M(A. getws(),A.getgz()),R(A.getws(),A.getgz()),W (A.getws(),A.getgz());

CMatrix

vz(1,A.getgz()),vp(1,A.getgz()),p(1,1);

xishu(B,X,A);

quanzhen(Q,A);

l_zhen(l,L,A);

b.operator =(B.transpose());

M.operator =(b.operator *(Q));

NBB.operator =(M.operator *(B));

N.operator =(NBB.inverse());

R.operator =(N.operator *(b));

W.operator =(R.operator *(Q));

x.operator =(W.operator *(l));

int i,j;

for(i=A.getys()+1;i<=A.getzs();i++)

{

A.setdv(i,(x.getValue(i-A.getys(),1)/10

00));

A.seteleValue(i,A.getdv(i));

cout<<"平差后编号为"<

}

V.operator =(B.operator *(x));

V.operator -(l);

for(j=0;j

cout<<"第"<

vz.operator =(V.transpose());

vp=(vz.operator *(Q));

p=(vp.operator *(V));

cout<<"平差后单位权中误差为:"<<"+_"<

毫米"<

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计(https://www.360docs.net/doc/447384900.html,)》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号:0405090204 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 ?巩固过程的定义与调用 ?巩固类的创建与使用 ?巩固间接平差模型及平差计算 ?掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算:

3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例

实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;//点名 CString strID;//点号 float H; bool flag;//标记是否已经计算出近似高程值,若计算出则为,否则为}; class CDhObs { public: CDhObs(void); ~CDhObs(void); public: LevelControlPoint* cpBackObj;//后视点 LevelControlPoint* cpFrontObj;//前视点 double ObsValue;//高差值 double Dist;//测站的距离 }; #include"StdAfx.h" #include"LevelControlPoint.h" LevelControlPoint::LevelControlPoint(void) {

水准网按条件平差算例

在图 表9-1 试求: (1)1P 、2P 及3P 点高程之最或然值; (2)1P 、2P 点间平差后高差的中误差。 解:(1)列条件方程式,不符值以“mm ”为单位。 已知3,7==t n ,故437=-=r ,其条件方程式为 ??? ? ???=--+=-+--=-+--=++-01030707742643765521v v v v v v v v v v v v (2)列函数式: 555v h x F +== 故 15=f 0764321======f f f f f f (3)组成法方程式。 1)令每公里观测高差的权为1,按1/i i s p =,将条件方程系数及其与权倒数之乘积填于表9-2中。 2)由表9-2数字计算法方程系数,并组成法方程式:

????????????----------5221251021411013????????????d c b a k k k k +????? ???????---1377=0 表9-2 条件方程系数表 (4)法方程式的解算。 1)解算法方程式在表9-3中进行。 2)[]pvv 计算之检核。 [][]wk pvv -= []467.35=-wk 由表9-3中解得[]47.35-=pvv ,两者完全一致,证明表中解算无误。 (5)计算观测值改正数及平差值见表9-4。 (6)计算321,,P P P 点高程最或然值。 359.3611=+=x H H A P m 012.3722=+=x H H A P m

表9-4 改正数与平差值计算表 (7)精度评定。 1)单位权(每公里观测高差)中误差 2)21,P P 点间平差后高差中误差 mm 0.34 47.35±=±=μmm P m F F 2.252.00.31 ±=±=±=μ

水准网平差(VB代码)

(误差理论与测量平差础) 课程设计报告 系(部):土木工程系 实习单位:山东交通学院 班级:测绘084 学生姓名:田忠星学号080712420 带队教师:夏小裕﹑周宝兴 时间:10 年12 月13日到10 年12 月19日 山东交通学院

目录: 1.摘要P3 2.概述P3 3.水准网间接平差程序设计思路P3—P4 4. 平差程序流程图P4—P6 5. 程序源代码及说明P7—P23 6. 计算结果P23—P26 7. 总结P26—P27

一:摘要 在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。在一个平差问题中,当所选的独立参数X?的个数等于必要观测数t时,可将每个观测值表达成这t个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。 二:概述: 该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。 三:水准网间接平差程序设计思路 1.根据平差问题的性质,选择t个独立量(既未知点的高程)作为参数X? 2. 将每一个观测量的平差值(既观测的高程差值)分别表达成 3.由误差方程系数B和自由项组成法方程,法方程个数等于参数的个数t ; 4. 解算法方程,求出参数X?,计算参数(高程)的平差值 X?=X0 +x?; 5.由误差方程计算V,求出观测量(高差)平差值6.评定精度 单位权中误差 V L L+ = ∧ V L L+ = ∧

平差值函数的中误差 四:平差程序流程图 1. 已知数据的输入 需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后) 第三行:已知高程(顺序与上一行的点号对应) 第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。 本节中使用的算例的数据格式如下 2,3,7 1,2,3,4,5 5.016,6.016 1,3,1.359,1.1 1,4,2.009,1.7 2,3,0.363,2.3 ,?20s u n PV V r PV V T T +-==σ. ???0????σσQ =

平差易软件数据输入实例

导线实例 这就是一条符合导线的测量数据与简图,A、B、C与D就是已知坐标点,2、3与4就是待测的控制点。 测站点角度(°′″) 距离(米) X (米) Y(米) B 8345、8709 5216、6021 A 85、30211 1474、4440 7396、2520 5530、0090 2 254、32322 1424、7170 3 131、04333 1749、3220 4 272、20202 1950、4120 C 244、18300 4817、6050 9341、4820 D 4467、5243 8404、7624 导线原始数据表 导线图如下: 导线图 在平差易软件中输入以上数据,如下图“数据输入”所示:

数据输入 在测站信息区中输入A、B、C、D、2、3与4号测站点,其中A、B、C、D为已知坐标点,其属性为10,其坐标如“原始数据表”;2、3、4点为待测点,其属性为00,其它信息为空。如果要考虑温度、气压对边长的影响,就需要在观测信息区中输入每条边的实际温度、气压值,然后通过概算来进行改正。 根据控制网的类型选择数据输入格式,此控制网为边角网,选择边角格式。 如下图“选择格式”所示: 选择格式 在观测信息区中输入每一个测站点的观测信息,为了节省空间只截取观测信息的部分表格示意图,如下表 B、D作为定向点,它没有设站,所以无观测信息,但在测站信息区中必须输入它们的坐标。 以A为测站点,B为定向点时(定向点的方向值必须为零),照准2号点的数据输入如下图“测站A的观测信息”所示: 测站A的观测信息 以C为测站点,以4号点为定向点时,照准D点的数据输入如下图“测站C的观测信息”所示: 测站C的观测信息 2号点作为测站点时,以A为定向点,照准3号点,如下图“测站2的观测信息”所示: 测站2的观测信息 以3号点为测站点,以2号点为定向点时,照准4号点的数据输入如下图“测站3的观测信息”所示: 测站3的观测信息 以4号点为测站点,以3号点为定向点时,照准C点的数据输入如下图“测站4的观测信息”所示:

水准网间接平差程序设计(C++)

//////////////////////////////////////////////////// // visual C++6.0 编译通过 // //////////////////////////////////////////////////// /////////////////////////////////////////////////// // 参考资料 // // 部分网络资料 // // 宋力杰《测量平差程序设计》 // //连壁《基于matlab的控制网平差程序设计》 // /////////////////////////////////////////////////// #include #include #include #include #include using namespace std; //////////////////////////////////////////////////////////////////////////class class SZWPC { private: int gcz_zs; //高差总数 int szd_zs; //总点数 int yz_szd_zs; //已知点数 double m_pvv; //[pvv] int *qsd_dh; //高差起点号 int *zd_dh; //高差终点号 char **dm; //点名地址数组 double *gcz; //观测值数组 double *szd_gc; //高程值数组 double *P; //观测值的权 double *ATPA,*ATPL; //法方程系数矩阵与自由项 double *dX; //高程改正数、平差值 double *V; //残差 double m_mu; //单位权中误差 public: SZWPC(); ~SZWPC(); int ij(int i,int j);//对称矩阵下标计算函数 bool inverse(double a[],int n);//对称正定矩阵求逆(仅存下三角元素)(参考他人)

测绘程序设计实验八水准网平差程序设计报告完整版

测绘程序设计实验八水准网平差程序设计报告 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

《测绘程序设计》上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法

5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void);

public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=Sea rchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1; break; } } if(m_pUnknownPoint[i].flag!=1)pBackObj- >strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpFrontObj->flag==1 ) { =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;

水准路线平差计算程序

水准路线平差计算程序 一.基本概念 在施工过程中,水准测量贯穿着始终 水准测量一般分为三种类型 1.附合水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到另一高级水准点 2.闭合水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到原起点高级水准点 3.支水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到另一未知水准点在施工过程中,我们一般常用到附合水准、闭合水准,因为这两种水准测量可以检验我们测量成果的精度和正确性。支水准则不然,所以不建议使用支水准。本程序重点考虑附合水准、闭合水准两种情况。 二.程序清单(主程序文件名:SZPC) 适用于CASIO fx-4850p A〝BMA〞:B〝BMB〞: C〝∑(NI,DI)〞: D〝∑(HAB)〞 A:〝fh=〞:E=D+A-B◢ Lbl 1 {FG}:F〝NN,DN〞:G〝hN〞 A:〝BMN〞:H=-EE÷C+G+A◢ A=H Goto 1 适用于CASIO fx-4800p A〝BMA〞:B〝BMB〞: C〝∑(NI,DI)〞: D〝∑(HAB)〞 E〝fh〞=D+A-B◢ Lbl 1 {FG}:F〝NN,DN〞:G〝hN〞 H〝BMN〞=-EE÷C+G+A◢ A=H Goto 1 三.程序算例及相关操作说明 1.程序算例(例一) 已知某附合水准路线的测量资料,见图一和表6-3,求各待定点的高程。 图一

2.操作步骤 程序文件名:SZPC 输入: BMA=56.345 BMB=59.039 ∑(NI,DI)=54 ∑(HAB)=2.741 出:fh=0.047 输入NN,DN=12,Hn=2.785;出:BMN=59.120 输入NN,DN=18,Hn=-4.369;出:BMN=54.735 输入NN,DN=13,Hn=1.980;出:BMN=56.704 输入NN,DN=11,Hn=2.345;出:BMN=59.039 3.程序算例(例二) 已知某闭合水准路线的测量资料,见图二和表6-4,求各待定点的高程。 图二

MATLAB水准网间接平差课程作业程序

条件平差 A=[1 -1 0 0 1 0 0;0 0 1 -1 1 0 0;0 0 1 0 0 1 1;0 1 0 -1 0 0 0]; Q=diag(s); W=zeros(4,1); W(1)=h(1)-h(2)+h(5); W(2)=h(3)-h(4)+h(5); W(3)=h(3)+h(6)+h(7); W(4)=h(2)-h(4)+H(1)-H(2); W=W.*1000; Naa=A*Q*(A'); K=-1.*inv(Naa)*W; V=Q*(A')*K; L=h'+V./1000; X=zeros(1,3); X(1)=H(1)+L(1); X(2)=H(1)+L(2); X(3)=H(2)-L(7); ZWC=sqrt(V'*inv(Q)*V/4); QLL=Q-Q*A'*inv(Naa)*A*Q; ZWC_h5=ZWC*sqrt(QLL(5,5)); 间接平差 h1=1.359; h2=2.009; h3=0.363; h4=1.012; h5=0.657; h6=0.238; h7=-0.595; H1=5.016 H2=6.016 h=[h1 h2 h3 h4 h5 h6 h7]' s=[1.1 1.7 2.3 2.7 2.4 1.4 2.6]' B=[1 0 0 ;0 1 0; 1 0 0;0 1 0 ; -1 1 0 ; -1 0 1 ;0 0 -1 ] p=diag(1./s) l=[0;0;4;3;7;2;0] W=B'*p*l Nbb=B'*p*B x=inv(Nbb)*W V=(B*x-l) H=h+V/1000 Q=inv(Nbb) n=7;

水准网的条件平差

目录 目录 (1) 观测误差 (2) 摘要: (2) 关键词: (2) 引言 (3) 1水准测量 (4) 1.1水准测量的原理 (4) 1.2水准网 (5) 2条件平差 (6) 2.1衡量精度的指标 (6) 2.2条件平差的原理 (8) 3水准网的平差 (14) 3.1必要观测与多余观测 (14) 3.2条件方程 (14) 3.3条件平差法方程式 (14) 3.4条件平差的精度评定 (15) 3.5水准网的条件平差 (18) 致谢 (20) 参考文献 (21)

观测误差 —由观测者、外界环境引起的偶然误差 学生: xxx 指导教师:xxx 摘要: 对一系列带有偶然误差的观测值,采用合理的的方法消除它们间的不符值,得出未知量的最可靠值;以及评定测量成果的精度。 关键词: 偶然误差;观测值;精度

引言 测量工作中,要确定地面点的空间位置,就必须进行高程测量,确定地面点的高程。几何水准测量是高程测量中最基本、最精密的一种方法。通过测量仪器,工具等任何手段获得的以数字形式表示的空间信息,即观测量。然而,测量是一个有变化的过程,受仪器、观测值、外界环境因素的影响,观测的结果与客观上存在的一个能反映其真正大小的数值,即真值(理论值),有一定的差异。可以说在测量中产生误差是不可避免的。所以,观测值不能准确得到,在测量上称这种差异为观测误差。根据其对观测结果影响的性质,可将误差分为系统误差和偶然误差两种。前者可以通过在观测过程中采取一定的措施和在观测结果中加入改正数,消除或减弱它的影响,使其达到忽略不计的程度。但是,观测结果中,不可避免地包含了后者,它是不可消除的,但可以选择较好的观测条件或采用适当的数据处理方法减弱它。现在我们要讨论的就是采用适当的数据处理方法来减弱其对水准测量中的影响。

水准网平差c++代码

水准网平差 结果 #include #include #include #include #define max 50 class CMatrix { public: CMatrix(){row=0; column=0;}; // 默认构造函数 CMatrix(int i, int j){row=i;column=j;} // 构造函数一 CMatrix(const CMatrix& m); // 复制构造函数 ~CMatrix(void){/*cout<<"谢谢使用,矩阵所占空间以释放!"<

结点水准网外业检核及平差计算

结点水准网外业检核及平差计算 如图所示结点水准网,BM1、BM2、BM3为已知水准点,高程分别为 m H 099.971=,m H 065.1002=, m H 475.963=,观测高差和水准路线 长度见下表,试计算A1点的高程平差值及其中误差。 一、三等水准测量外业检核 1、测站限差 等级 水准仪 型号 视距 (m) 前后 视距差 (m ) 前后视距累计差 (m ) 视线高度 黑红面 读数差 (mm) 黑、红面 高差之差 (mm) 三等 DS3 ≤75 ≤2 ≤5 三丝能读数 2.0 3.0 2、测段、附合路线或环线闭合差 测量等级 测段、路线往返测 高差不符值 (mm ) 附合路线或环线闭合差(mm ) 检测已测测 段高差之差 (mm ) 平原 山岭 三等 K 12± L 12± L 15± R 20± h3 h2 h1 S1 S2S3

二、测段外业计算与检核 测 段 实测高差(m) 往返测高差不符值 (mm ) 往返测高差 不符值限差 (mm ) 测段路线 长度均值(km ) 往返测高差 平均值 (m ) 往测 返测 BM1-A1 -0.178 +0.180 +2 ±5 0.240 -0.179 BM2-A1 -3.147 +3.147 0 ±5 0.175 -3.147 BM3-A1 +0.443 -0.442 +1 ±4 0.127 +0.442 三、外业附合路线或闭合路线计算与检核 附合路线 起点高程 (m ) 实测高差(m ) 终点高程 (m ) 路线长度(km ) 闭合差 (mm ) 限差 (mm ) h 1 h 2 BM1- BM2 97.099 -0.179 +3.147 100.065 0.415 +2 ±7 BM1- BM3 97.099 -0.179 -0.442 96.475 0.367 +3 ±7 BM2- BM3 100.065 -3.147 -0.442 96.475 0.302 -1 ±6 终始H h h H f h -++=21 (注意h2方向) 四、待定点高程最或是值及精度计算 路 线 号 起始点 高程 (m ) 实测 高差 (m ) 结点观 测高程 (m ) 路线 长度 (km ) 权 i i S C P = 改正数V (km ) Pvv 1 97.099 -0.179 96.920 0.240 4.1667 - 2 16.6668 2 100.065 -3.147 96.918 0.175 5.714 3 0 0 3 96.475 +0.442 96.917 0.127 7.8740 +1 7.8740 ∑ 17.755 24.5408 结点高程及中 误差 计算 结点高程: [][] P PH H A = 1= 96.918m 改正数:i A A i H H V 11-= 单位权误差:[] 1 ?0-=n pvv σ=±3.50mm 结点高程最或是值中误差:[] P A H 0??1 σ σ ==±0.83mm

水准网平差软件使用说明

电子水准仪数据处理及平差软件 用户操作手册 中铁二院工程集团有限责任公司 二零零九年

目录 1引言 (1) 1.1 编写目的 (1) 1.2 背景 (1) 2软件的功能和性能 (1) 2.1 软件功能和适用范围 (1) 2.1.1软件的主要功能有: (1) 2.1.2软件的主要输出内容包括: (1) 2.2 软件的性能 (2) 3运行环境 (2) 3.1 硬件设备 (2) 3.2 支持软件 (2) 3.3 数据存储 (2) 4软件安装说明 (3) 5“电子水准仪数据处理及平差软件”使用说明 (3) 5.1选择工作路径 (3) 5.2“电水数据处理”菜单 (4) 5.2.1设置转换参数 (4) 5.2.2生成高差文件 (5) 5.2.3生成平差文件 (6) 5.2.4输出观测手簿 (6) 5.3“高程平差处理”菜单 (6) 5.3.1选择平差文件 (7) 5.3.2闭合差计算 (7) 5.3.3网平差处理 (8) 5.4“结果显示”菜单 ........................................................................ 错误!未定义书签。6“电子水准仪数据处理与平差软件”文件说明 (8)

1引言 1.1编写目的 《“电子水准仪数据处理及平差软件”用户操作手册》是高速铁路沉降观测评估软件之一“电子水准仪数据处理及平差软件”的使用说明,能够指导测量技术人员正确使用“电子水准仪数据处理及平差软件”。 1.2背景 为了满足高速铁路线下沉降变形观测与评估的需要,适应铁路施工与评估单位对其数据处理的要求,中铁二院工程集团有限责任公司研制了自主版权的“电子水准仪数据处理及平差软件”。 2软件的功能和性能 2.1软件功能和适用范围 电子水准仪数据处理及平差软件,是专为我国高速铁路线下沉降观测评估而设计的电子水准仪数据处理与高程平差计算软件。 2.1.1软件的主要功能有: 1、根据需要选择工作路径; 2、根据设置生成高差文件; 3、生成平差文件; 4、输出观测手簿; 5、闭合环自动搜索与闭合差计算; 6、网平差处理与成果输出; 2.1.2软件的主要输出内容包括: 1、可输出高程控制网测段实测高差数据;

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日 实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例: 近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权;

(5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1;

水准网间接平差程序设计(C++)

水准网间接平差程序设 计(C++) -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

//////////////////////////////////////////////////// // visual C++ 编译通过 // //////////////////////////////////////////////////// /////////////////////////////////////////////////// // 参考资料 // // 部分网络资料 // // 宋力杰《测量平差程序设计》 // //姚连壁《基于matlab的控制网平差程序设计》 // /////////////////////////////////////////////////// #include #include #include <> #include<> #include using namespace std; //////////////////////////////////////////////////////////////////////////class class SZWPC { private: int gcz_zs; //高差总数 int szd_zs; //总点数 int yz_szd_zs; //已知点数 double m_pvv; //[pvv] int *qsd_dh; //高差起点号 int *zd_dh; //高差终点号 char **dm; //点名地址数组 double *gcz; //观测值数组 double *szd_gc; //高程值数组 double *P; //观测值的权 double *ATPA,*ATPL; //法方程系数矩阵与自由项 double *dX; //高程改正数、平差值 double *V; //残差 double m_mu; //单位权中误差 public: SZWPC(); ~SZWPC(); int ij(int i,int j);//对称矩阵下标计算函数

单一结点或附合的水准路线的精度评定

单一结点或附合的水准路线的精度评定 修涛 Abstract: Measure in the level is different to constitute to shut to match, attach to match because of the route testing with the form of crunode.Therefore is even bad method as well along with different.In Gao Cheng Wang, if the even bad method choice is fitting, can get the effect of half effort and double results.Only this text introduction has a crunode of three or four level routes and an illustrated manual table of level route attaching to match is even to differ.The method has a homework step simple, characteristics easily control, can also satisfy 3, 4 to etc. level to measure at the same time even bad accuracy request. Key word: Level instrument Leveling network Node Precision evaluation Analysis 摘要:在水准测量中,由于施测的路线不同可组成闭合、附合和结点的形式。因此平差方法亦随着不同.在高程网中,如果平差方法选择恰当,可以得到事半功倍的效果.本文仅介绍具有一个结点的三条或四条水准路线和附合的一条水准路线的图解平差。该方法具有作业步骤简单,容易掌握的特点,同时也能满足三、四等水准测量平差的精度要求。 关键词:水准仪水准网结点精度评定分析 一、基本原理(见图1-1) 利用水准仪提供的水平视线读取竖立于两个点上的水准尺上的读数,来测定两点间的高差,再根据已知点高程计算待定点高程。 图1-1 水准测量原理

多功能测量平差软件

工程控制网平差软件介绍 工程控制网平差软件(Engineering Control Network Adjustment Software,简称:ECNAS)是一套针对常见工程控制网,带有多种数据处理功能并提供多种定权方案,能进行方差一致性检验以及具有较高运算效率的控制网数据处理软件,能实现常见工程施工控制测量和建(构)筑物变形监测数据的精准化、自动化处理。下文将从软件的主要架构与功能、软件的对比测试、软件的主要优势和与软件相关的学术论文等方便进行详细介绍。 1 主要架构和功能 ECNAS包括“项目设置”、“水准网数据处理”、“平面网数据处理”、“全站仪三维网数据处理”、“GPS网数据处理”、“坐标转换”和“工具”等七部分,其中四大类常见工程控制网(水准网、平面网、全站仪三维网和GPS网)的数据预处理和平差计算是本软件的核心内容。见下图1所示。 图1 ECNAS的核心架构 1.1 项目设置 (1)新建工程:根据用户指定位置新建工程集合,集合内部自动分成若干子集。 (2)打开工程:方便用户对上次建立的工程项目进行查看、修改和另存。

(3)参数设置:对控制网的验前精度、仪器的标称精度、控制网的等级、工程椭球、投影面、中央子午线和显著性水平等进行设置,如下图2所示。 图2 ECNAS参数设置对话框 1.2 水准网数据处理 (1)导入观测文件:读取主流电子水准仪(Trimble DINI型或Leica DNA 型)的各种观测形式(BF、aBF、BFFB和aBFFB)的原始文件,如图3所示。 图3 导入数据对话框 (2)生成高差文件:根据软件提示,自动执行用户指令,处理转点,生成高差文件(如下图4所示),并自动生成“按测站数定权”、“按距离定权”和“分类定权”这三种定权方法的高程网平差文件。

控制测量学水准网按条件平差算例

在图h 5 h 2 A P 2 h 1 P 1 h 6 h 7P 3 h 4 h 3 B 表9-1 观测号 观测高差(m ) 路线长度(km ) 观测号 观测高差(m ) 路线长D (km ) 已知高程(m ) 1 2 3 4 1 1 2 2 5 6 7 1 1 2 000.35=A H 000.36=H H 试求: (1)1P 、2P 及3P 点高程之最或然值; (2)1P 、2P 点间平差后高差的中误差。 解:(1)列条件方程式,不符值以“mm ”为单位。 已知3,7==t n ,故437=-=r ,其条件方程式为 ??? ? ? ?? =--+=-+--=-+--=++-01030707742643765521v v v v v v v v v v v v (2)列函数式: 555v h x F +== 故 15=f 0764321======f f f f f f (3)组成法方程式。 1)令每公里观测高差的权为1,按1/i i s p =,将条件方程系数及其与权倒数之乘积填于表9-2中。 2)由表9-2数字计算法方程系数,并组成法方程式:

????????????----------5221251021411013????????????d c b a k k k k +????? ???????---1377=0 表9-2 条件方程系数表 观测号 a b c d s s ' 1 1 1 1 2 -1 1 0 0 3 -1 -1 -1 4 -1 1 0 0 5 1 -1 0 1 1 6 -1 1 0 0 7 1 -1 0 0 ∑ 1 -1 -1 1 0 0 1 1 1 观测号 p 1 p a p b p c p d p s p f p s ' 1 1 1 1 1 2 1 -1 1 3 2 -2 -2 -2 4 2 -2 2 5 1 1 -1 1 1 6 1 -1 1 7 2 2 -2 ∑ 1 -3 1 -1 -1 1 0 0 (4)法方程式的解算。 1)解算法方程式在表9-3中进行。 2)[]pvv 计算之检核。 [][]wk pvv -= []467.35=-wk 由表9-3中解得[]47.35-=pvv ,两者完全一致,证明表中解算无误。 (5)计算观测值改正数及平差值见表9-4。 (6)计算321,,P P P 点高程最或然值。 359.3611=+=x H H A P m 012.3722=+=x H H A P m f

水准网平差、矩阵运算MFC代码

误差理论与测量平差上机指导书 钱建国张恒憬编写 辽宁工程技术大学 测绘与地理科学学院测绘工程系

目录 Visual C++平差编程实现 (2) 1矩阵加法 (2) 2矩阵乘法 (2) 3 矩阵转置 (4) 4 矩阵求逆 (4) 5 水准网间接平差实例(分组选做) (11) Matlab平差编程实现(分组选做) (19) 1 间接平差 (19)

Visual C++平差编程实现 一、实验名称:解算法方程。 二、实验目的和任务:掌握矩阵加法、乘法与求逆的通用程序的编写。 三、实验要求: 1每人独立编写出矩阵加法与乘法的程序,并上机调试通过; 2采用VC++6.0开发平台,C或者C++语言编写程序; 3写出矩阵运算的结果。 四、实验内容: 1矩阵加法 矩阵加法的示例函数(C语言) void JZjiafa(double a[15][15],double b[15][15],double c[15][15],int m,int n) { for (int i=0;i<=m-1;i++) for(int j=0;j<=n-1;j++) { c[i][j]=a[i][j]+b[i][j]; } return; } 2矩阵乘法 矩阵乘法的示例程序(C语言) #include "stdafx.h" void matrixMultiply(double a[14][15],double b[15][13], double c[14][13],long m,long n,long k) { for (long i = 0; i<= m-1; i++) { for (long j=0; j<=k-1; j++) {

平差课程设计水准网,导线网解算解读

《测量平差课程设计》 设计报告 设计名称:测量平差课程设计 学院名称:矿业工程学院 专业班级:测绘12-2 学生姓名:雷蕾 学号: 2012020782 指导教师:张红华 测绘工程教研室 2014年8月

一.课程设计的目的 《测量平差》是一门理论与实践并重的课程,测量平差课程设计是测量数据处理理论学习的一个重要实践环节,是在学生学习了专业基础理论课《误差理论与测量平差基础》课程后进行的一门实践课程,其目的是增强学生对测量平差基础理论的理解,牢固掌握测量平差的基本原理和公式,熟悉测量数据处理的基本原理和方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机基础知识,编制简单的计算程序。 二.课程设计题目内容描述和要求 1.设计的任务 (1)该课的课程设计安排在理论学习结束之后进行的,主要是平面控制网和高程控制网严密平差,时间为一周。 (2)通过课程设计,培养学生运用本课程基本理论知识和技能,分析和解决本课程范围内的实际工程问题的能力,加深对课程理论的理解与应用。 (3)在指导老师的指导下,要求每个学生独立完成本课程设计的全部内容。 2.课程设计要求 2.1基本要求: 测量平差课程设计要求每一个学生必须遵守课程设计的具体项目的要求,独立完成设计内容,并上交设计报告。在学习知识、培养能力的过程中,树立严谨、求实、勤奋、进取的良好学风。 课程设计前学生应认真复习教材有关内容和《测量平差》课程设计指导书,务必弄清基本概念和本次课程设计的目的、要求及应注意的事项,以保证保质保量的按时完成设计任务。 2.2具体设计项目内容及要求: 2.2.1高程控制网严密平差及精度评定 总体思路:现有等级水准网的全部观测数据及网型、起算数据。要求对该水准网,分别用条件、间接两种方法进行严密平差,并检验。进行平差模型的正确性 水准网的条件平差: ①列条件平差值方程、改正数条件方程、法方程;

相关文档
最新文档