C语言间接平差程序

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

教材《误差理论与测量平差基础》第二版武汉大学出版社

P108页的例7-1的运行结果:

源程序:

#define N 5 /*N是观测值个数*/

#define T 3 /*T是必要观测数*/

#include

#include

float Nbb[T][T],Nb[T][T],W[T][1],x[T][1];

main()

{

float D(float a[T][N],float b[N][N],float c[N][T]);

float K(float a[T][N],float b[N][N],float c[N][1]);

float G(float a[T][T]);

float F(float ca[T-1][T-1]);

float DM(float a[1][N],float b[N][N] ,float c[N][1]);

int i,j,m,n;

float B[N][T],BT[T][N],V[N][1],VT[1][N],P[N][N],C[N][1],Bx[N][1],f,g,h,x1; printf("请输入V的系数B[N][T]:\n");

for(i=0;i

for(j=0;j

scanf("%8f",&B[i][j]);

printf("请输入观测值的权阵P[N][N]:\n");

for(i=0;i

for(j=0;j

scanf("%8f",&P[i][j]);

printf("请输入常数C[N][1]:\n");

for(i=0;i

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

scanf("%8f",&C[i][j]);

for(i=0;i

for(j=0;j

BT[j][i]=B[i][j];

g=D(BT, P, B);

h=K(BT, P, C);

f=G(Nbb);

for(i=0;i

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

{

x[i][j]=Nb[i][0]*W[0][j];

for(m=1;m

x[i][j]+=(Nb[i][m]*W[m][j]);

}

for(i=0;i

x[i][0]=x[i][0]/f;

for(i=0;i

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

{

Bx[i][j]=B[i][0]*x[0][j];

for(m=1;m

Bx[i][j]+=(B[i][m]*x[m][j]);

}

for(i=0;i

V[i][0]=(Bx[i][0]-C[i][0]);

for(i=0;i

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

VT[j][i]=V[i][j];

x1=DM(VT,P,V);

x1=x1/(N-T);

printf("参数x[T][1]=\n");

for(i=0;i

printf("%15f",x[i][0]);

printf("\n");

printf("改正数V[N][1]=\n");

for(i=0;i

printf("%15f",V[i][0]);

printf("\n单位权中误差x1=%15f",sqrt(x1));

printf("\n协因数阵Qxx[T][T]:\n");

for(i=0;i

{

for(j=0;j

printf("%15f",Nb[i][j]/f);

printf("\n");

}

}

float G(float a[T][T])

{

int i,j,m,n;

float c[T-1][T-1],y=0;

for(i=0;i

for(j=0;j

{

for(m=0;m

for(n=0;n

{

if(m

c[m][n]=a[m][n];

if(m>i&&n

c[m-1][n]=a[m][n];

if(mj)

c[m][n-1]=a[m][n];

if(m>i&&n>j)

c[m-1][n-1]=a[m][n];

}

if((i+j)%2==0)

Nb[j][i]=F(c);

else

Nb[j][i]=(-1)*F(c);

}

for(m=0;m

y+=(a[0][m]*Nb[m][0]);

return (y);

}

float F(float ca[T-1][T-1])

{

int i,j,m,n,s,t,k=1;

float f=1,c,x,sn;

for (i=0,j=0;i

if (ca[i][j]==0)

{

相关文档
最新文档