• 大小: 345KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-11-10
  • 语言: C/C++
  • 标签: 平差  C++  

资源简介

经典平差的程序集,包含一系列的源程序,C++写的,可直接运行

资源截图

代码片段和文件信息

// Classical.cpp: implementation of the CClassical class.
//
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “Classical.h“
#include “public.h“

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



//    === 《测量平差程序设计》-第二章 经典平差 源程序 ===
//    === 《测量平差程序设计》-第二章 经典平差 源程序 ===


//////////////////////////////////////////////////////////////////////
//  参数平差程序(观测值独立)
// 参数:
// int n - 观测值个数
// int t - 参数个数
// double A[] - 误差方程系数矩阵,数组长度为n×t
// double L[] - 观测值向量数组长度为n
// double P[] - 观测值权矩阵的对角线元素数组长度为n
// double X[] - 参数向量函数调用前为参数的先验值调用后为参数平差值,
//              数组长度为t
// double Qx[] - 函数调用前为参数的先验权逆阵,调用后为参数平差值的权逆阵,
//               仅存下三角矩阵,数组长度为t×(t+1)/2 
// double V[] - 残差向量,数组长度为n
// 返回值:验后单位权中误差
//////////////////////////////////////////////////////////////////////////
double Adjust(int nint t double A[]double L[]double P[]
   double X[]double N[]double V[])
{
double *U=new double [t]; //临时数组,存法方程自由项

//  法方程系数矩阵与自由项清零 
for(int i=0;i for(int j=0;j
//  组成法方程式 
for(int k=0;k {
for(int i=0;i {
U[i]+=A[k*t+i]*P[k]*L[k];
for(int j=0; j<=i; j++)
{
N[ij(ij)]+=A[k*t+i]*P[k]*A[k*t+j];
}
}
}

//  计 算 X 
if(!inverse(Nt))
{
delete[]U; 
return -1.0;
}
for(i=0;i {
X[i]=0.0;
for(int j=0;j }
delete []U;

//   计 算 V 
double pvv=0;
for(i=0;i {
double vi=-L[i];
for(int j=0;j V[i]=vi;
pvv+=vi*vi*P[i];
}

if(n==t)return 0.0; //n=t无多余观测
return sqrt(pvv/(n-t));

}


//////////////////////////////////////////////////////////////////////////
//     参数平差例题(观测值独立)
void Adjust_Example() 
{
char *file=“例题\\参数平差\\data.txt“;
FILE *fp=fopen(file“r“);
if(fp==NULL)
{
MyBreak(“数据文件打不开“);
return;
}

int nt;
fscanf(fp“%d%d“&n&t);

    double *A=new double[n*t];
    double  *L=new double[n];
double  *P=new double[n];
double  *X=new double[t];
double  *N=new double[t*(t+1)/2];
double  *V=new double[n];

for(int i=0;i {
for(int j=0;j {
fscanf(fp“%lf“A+i*t+j);
}
fscanf(fp“%lf“L+i); // 读取误差方程自由项
}

for(i=0;i {
fscanf(fp“%lf“P+i);
}
fclose(fp);

fp=fopen(“例题\\参数平差\\result.txt““w“);

fprintf(fp“=== 参数平差(观测值独立)计算 ===\n“);
fprintf(fp“\n误差方程:\n“);

for(i=0;i {
for(int j=0;j fprintf(fp“%7.3lf “A[i*t+j]);
fprintf(fp“%7.3lf \n“L[i]);
}

double m=Adjust( n t A L  P  X N V);

fprintf(fp“参数平差值及其中误差:\n“);
for(i=0;i {
fprintf(fp“%4d %10.4lf %10.4lf\n“i+1X[i]sqrt(N[ij(ii)])*m);
}

fprintf(fp“\n最小二乘残差(V):\n“);
for(i=0;i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-03-17 17:46  经典平差\
     文件       18616  2011-03-28 12:53  经典平差\Classical.cpp
     文件        2015  2011-03-28 12:53  经典平差\Classical.h
     目录           0  2012-03-08 12:50  经典平差\Debug\
     文件       44217  2012-03-08 12:50  经典平差\Debug\Classical.obj
     文件           0  2012-03-08 12:50  经典平差\Debug\Classical.sbr
     文件       21501  2011-03-28 12:53  经典平差\Debug\MyCpp.obj
     文件           0  2011-03-28 12:53  经典平差\Debug\MyCpp.sbr
     文件        2079  2011-03-28 12:53  经典平差\Debug\StdAfx.obj
     文件         251  2011-03-28 12:53  经典平差\Debug\StdAfx.sbr
     文件       18437  2012-03-08 12:50  经典平差\Debug\public.obj
     文件           0  2012-03-08 12:50  经典平差\Debug\public.sbr
     文件       58368  2014-03-17 17:43  经典平差\Debug\vc60.idb
     文件       53248  2012-03-08 12:50  经典平差\Debug\vc60.pdb
     文件      156672  2012-03-08 12:50  经典平差\Debug\经典平差.bsc
     文件      217144  2012-03-08 12:50  经典平差\Debug\经典平差.exe
     文件      238548  2012-03-08 12:50  经典平差\Debug\经典平差.ilk
     文件        6947  2011-03-28 12:53  经典平差\Debug\经典平差.obj
     文件      187164  2011-03-28 12:53  经典平差\Debug\经典平差.pch
     文件      549888  2012-03-08 12:50  经典平差\Debug\经典平差.pdb
     文件           0  2011-03-28 12:53  经典平差\Debug\经典平差.sbr
     文件        1220  2011-03-28 12:53  经典平差\ReadMe.txt
     文件         295  2011-03-28 12:53  经典平差\StdAfx.cpp
     文件         667  2011-03-28 12:53  经典平差\StdAfx.h
     文件        8229  2011-03-28 12:53  经典平差\public.cpp
     文件        1756  2011-03-28 12:53  经典平差\public.h
     目录           0  2014-03-18 20:12  经典平差\例题\
     文件         254  2014-03-18 20:17  经典平差\例题\read me.txt
     目录           0  2012-03-11 11:17  经典平差\例题\条件平差\
     文件         792  2014-03-17 17:43  经典平差\例题\条件平差\Result.txt
     文件         119  2012-03-11 11:16  经典平差\例题\条件平差\data.txt
............此处省略6个文件信息

评论

共有 条评论