条件平差程序

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

条件平差程序

#include <stdio.h>

#include <math.h>

#include <conio.h>

#define N_max 15

int n,m,r,p; //n:观测值的个数,m:待定点个数,r:多余观测值个数,p:已知高程的水准点个数

float Hd[6]={0};

void Choose()

{

int i;

printf("此程序能够解决闭合水准路线、附和水准路线、支水准路线的条件平差。\n");

printf("请问已知高程的水准点个数为:(不要太多喔,~ 。~):");

scanf("%d",&p);

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

{

printf("已知点%c点的高程为:",64+i);

scanf("%f",&Hd[i]);

}

}

void Input(float Hgao[][3]) //输入各测点的高程差以及它们之间的距离

{

int i;

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

{

printf("请输入h%d的数值:",i);

scanf(" %f",&Hgao[i][1]);

printf("请输入S%d的数值:",i);

scanf("%f",&Hgao[i][2]);

}

}

void Equation(int A[][N_max],char Equa[][50],int asd[][6],float Hgao[][3],float W[],int flag)//输入条件方程或者求某待定点的表达式

{

int i,j,k,ppt;

if(flag==1)

{

ppt=r;

printf("请输入%d个条件方程:\n",r);

printf("如:h1+h2+h3+Ha-Hb=0.请务必使等号右边等于0,输入的时候中间不要有空格!\n");

getchar();

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

{

printf("方程%d\t",i);

gets(Equa[i]);

}

}

else

{

ppt=m;

printf("为求得待定点的高程,请分别给出每个待定点的一个与Ha或者Hb\n以及各个高程差h之间的关系式。\n");

printf("比如,Hc=Ha-h1+h2.你只需要输入Ha-h1+h2。中间不要有空格!\n"); for(i=1;i<=m;i++)

{

printf("待定点%d\t\t",i);

gets(Equa[i]);

}

}

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

{

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

{

for(k=0;Equa[i][k]!='\0';k++)

{

if(k==0)

{

if(Equa[i][1]==j+48){A[i][j]=1;break;}

}

else

{

if(Equa[i][k]=='+' && Equa[i][k+2]==j+48)

{A[i][j]=1;break;}

else if(Equa[i][k]=='-' && Equa[i][k+2]==j+48)

{A[i][j]=-1;break;}

}

}

}

}

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

{

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

{

for(k=0;Equa[i][k]!='\0';k++)

{

if(k==0)

{

if(Equa[i][1]==64+j || Equa[i][1]==96+j)

{asd[i][j]=1;break;}

}

else

{

if(Equa[i][k]=='+' && (Equa[i][k+2]==64+j || Equa[i][k+2]==96+j)) {asd[i][j]=1;break;}

else if(Equa[i][k]=='-' && (Equa[i][k+2]==64+j || Equa[i][k+2]==96+j)) {asd[i][j]=-1;break;}

}

}

}

}

if(flag==1)

{

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

{

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

{

W[i]+=Hgao[j][1]*A[i][j];

}

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

{

W[i]+=asd[i][k]*Hd[k];

}

}

}

}

void InitialQ(float Q[][N_max],float Hgao[][3]) //初始化协因数阵

{

int i,j;

相关文档
最新文档