亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gps網平差程序.cpp

?? GPS網平差計算
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include<iostream.h>
#include<fstream.h>
#define MAX 100
#define PI 3.14159265358979312
#define rou (180.0*60*60/PI)
#include<math.h>
#include<string.h>

//***************************矩陣求逆函數說明**************************************
int inverse(double C[][MAX],double B[][MAX],int n);
//define the function of inverseing;
//return 0 means mat can't be inversed or;
//return 1 means mat inversed correctly, and B is inversed mat;

//***************************矩陣乘積函數說明**************************************
void AXB(double A[][MAX],double B[][MAX],double C[][MAX],int m,int n,int k);
void AXB(double a,double A[][MAX], double aA[][MAX],int m,int n); 
void AXB(double A[][MAX],double B[][1],double C[][1],int m,int n);
//define the time fuction of mats or mat and a number

//***************************矩陣轉置函數說明**************************************
void AT(double A[][MAX],double AH[][MAX],int m,int n);
void AT(double A[][1],double AH[][MAX],int m);
void AT(double A[][MAX],double AH[][1],int m);
//define the fuction to turn-over a mat 

//***************************平差計算相關函數**************************************
void ATPA(double A[][MAX],double P[][MAX],double ATPA[][MAX],int m,int n);
void ATPL(double A[][MAX],double P[][MAX],double L[][1],double ATPL[][1],int m,int n);
double VPV(double V[][1],double P[][MAX],int m);
//define initial fuctions of doadj()

//**************************矩陣顯示***********************************************
void matdis(double A[][MAX],int n,int m);
void matdis(double A[][1],int n);
//define two fuctions to output a mat to screen  

//**********************通用平差相關結構與函數*************************************
struct adj;
void ksetadj(adj &a);     //input data from keyboard 
int fsetadj(adj &aa,char name[20]);  //input data from a file 
int  doadj(adj &a);       //adjusting a adj 
int rubust(adj &a);       //抗差估計
void adjdis(adj &aa);     //output a adj results to screen 
int foutadj(adj &aa, char name[20]); //outputdate to a file
//define adj and it related fuctions

//************************************************************************************************
void AXB(double A[][MAX],double B[][MAX],double C[][MAX],int m,int n,int k)
{
   for(int i=0;i<m;i++)
	   for(int j=0;j<k;j++)
	   {
		   C[i][j]=0;
          for(int l=0;l<n;l++)
		  C[i][j]+=A[i][l]*B[l][j];
	   }
}
//************************************************************************************************

void AXB(double A[][MAX],double B[][1],double C[][1],int m,int n)
{
for(int i=0;i<m;i++)
	   for(int j=0;j<1;j++)
	   {
		   C[i][j]=0;
          for(int l=0;l<n;l++)
		  C[i][j]+=A[i][l]*B[l][j];
	   }

}
//************************************************************************************************

void AXB(double a,double A[][MAX], double aA[][MAX],  int m,int n) //void  
{
     for(int i=0;i<m;i++)
	   for(int j=0;j<n;j++)
		   aA[i][j]=a*A[i][j];

}
//************************************************************************************************

void AT(double A[][MAX],double AH[][MAX],int m,int n)   // 矩陣轉置
{
    for(int i=0;i<m;i++)
	   for(int j=0;j<n;j++)
		   AH[j][i]=A[i][j];
}
//************************************************************************************************

void AT(double A[][1],double AH[][MAX],int m)    //  列向量轉置為行向量
{
    for(int i=0;i<m;i++)
	   	   AH[0][i]=A[i][0];
}
//************************************************************************************************

void AT(double A[][MAX],double AH[][1],int m)    //  行向量轉置為列向量
{
    for(int i=0;i<m;i++)
	   	   AH[i][0]=A[0][i];
}
//************************************************************************************************


void ATPA(double A[][MAX],double P[][MAX],double ATPA[][MAX],int m,int n)
{double AH[MAX][MAX],ATP[MAX][MAX];
  AT(A,AH,m,n);  
  AXB(AH,P,ATP,n,m,m);
  AXB(ATP,A,ATPA,n,m,n);
}
//************************************************************************************************


double VPV(double V[][1],double P[][MAX],int m)
{double VH[1][MAX],VTP[1][MAX];
     for(int i=0;i<m;i++)  
		 VH[0][i]=V[i][0];
       for(i=0;i<m;i++)
	   {		   
		   VTP[0][i]=0;
	       for(int j=0;j<m;j++)
			   VTP[0][i]+=VH[0][j]*P[j][i];		   
	   }
		   
  double dd(0);
  for (i=0;i<m;i++)
	  dd+=VTP[0][i]*V[i][0];
  return dd;
}
//************************************************************************************************
void ATPL(double A[][MAX],double P[][MAX],double L[][1],double ATPL[][1],int m,int n)
{
  double AH[MAX][MAX],ATP[MAX][MAX];
  AT(A,AH,m,n);  
  AXB(AH,P,ATP,n,m,m);
  for(int i=0;i<n;i++)
  {
      ATPL[i][0]=0;
	  for(int j=0;j<m;j++)
		  ATPL[i][0]+=ATP[i][j]*L[j][0];
  }
}
//************************************************************************************************ 
void matdis(double A[][MAX],int n,int m) // 顯示矩陣
{//1.set B[][] I;
   for(int i=0;i<n;i++)
   {  cout<<"     ";
	  for(int j=0;j<m;j++)
	  cout<<A[i][j]<<"  ";
		 cout<<endl;
   }
}
//************************************************************************************************
void matdis(double A[][1],int n)       //  顯示列向量
{//1.set B[][] I;
   for(int i=0;i<n;i++)
      cout<<"     "<<A[i][0]<<endl;
 
}
//************************************************************************************************
int inverse(double C[][MAX],double B[][MAX],int n)
{//1.set B[][] I;
	double A[MAX][MAX],e;
   for(int i=0;i<n;i++)
	   for(int j=0;j<n;j++)
	   {
		   A[i][j]=C[i][j];
		   if(i==j) B[i][j]=1;
	       else B[i][j]=0;
	   
	   }
	
 //2. inverse and judge the Matrix inversable
     for(i=0;i<n;i++)
	 {
		 //對主元為零的處理
		 if(A[i][i]==0)
			 for(int j=i+1;j<n;j++)
			 {
				 if(A[j][i]!=0) 
				 for(int k=0;k<n;k++)
				 	 {
						 A[i][k]+=A[j][k];
						 B[i][k]+=B[j][k];
					 }
			    break;
			 }					
				 if(fabs(A[i][i])<0.000000000000001) 
				 {
					  for(int i=0;i<n;i++)
	                    for(int j=0;j<n;j++)
							B[i][j]=0;
				     return 0;
				 }//MAT can't be inversed
    	// line processing
		e=A[i][i];
		for(int j=0;j<n;j++)  
		 {
		   A[i][j]=A[i][j]/e;
		   B[i][j]=B[i][j]/e;
		 }
        // row processing
		for(j=0;j<n;j++)
		{
			e=A[j][i];
			for(int k=0;k<n;k++)
			 if(i!=j)
			 {
              A[j][k]+=-1*e*A[i][k];			 
			  B[j][k]+=-1*e*B[i][k];
			 }
		}
	 }
return 1;
}
//************************************************************************************************
double setf(double a, int t)
{
   double b=fabs(a);
   for(int i=0;i<t;i++)
	   b*=10;
   if(b-floor(b)>0.5) b=floor(b)+1;
   else b=floor(b);
   for(i=0;i<t;i++)
	   b/=10;
   if(a<0) b=-b;
    return b;
}
//************************************************************************************************
 struct adj{
// adjustment model :
//     	V=AX-L P 
//  	A[m][n], P[m][m], L[m][1]
char name[40];       //	V=AX-L P 
int m;               // the number of observations
int n;               // the number of unknown data
double A[MAX][MAX];  // paremater mat of unknown data 
double P[MAX][MAX];  // observation weight mat
double l[MAX][1];    // fix data mat
double X[MAX][1];    // unknown data mat
double QXX[MAX][MAX];// coherance date mat 
double m0;           // unit weight error  
double V[MAX][1];
int flag;            // flag=1 means adjustment successfully
}; 
//************************************************************************************************
void ksetadj(adj &a) //keyboard and screen input
{
  cout<<"  input the object  name:   ";
  cin>>a.name;cout<<endl;
  
  cout<<"  input observation number:   ";
  cin>>a.m;cout<<endl;
  
  cout<<"  input unknown data number:   ";
  cin>>a.n;cout<<endl;

  cout<<"  input data of mat A["<<a.m<<"]["<<a.n<<"]"<<endl;
  
  for(int i=0;i<a.m;i++)
	  for(int j=0;j<a.n;j++)
		  cin>>a.A[i][j];

cout<<"  input data of mat P["<<a.m<<"]["<<a.m<<"]"<<endl;
  
  for(i=0;i<a.m;i++)
	  for(int j=0;j<a.m;j++)
		  cin>>a.P[i][j];

cout<<"  input data of mat L["<<a.m<<"][1]"<<endl;
  
  for(i=0;i<a.m;i++)
	cin>>a.l[i][0];
 }
//************************************************************************************************
int fsetadj(adj &aa,char *name) //keyboard and screen input
{
  
	ifstream in(name,ios::nocreate);
	if(!in) return 0;
// 輸入平差項目名    
	in>>aa.name;
  
// input observation number:  
	in>>aa.m;
  
// input unknown data number: 
    in>>aa.n;

// input data of mat A[m][n]:
  
  for(int i=0;i<aa.m;i++)
	  for(int j=0;j<aa.n;j++)
		  in>>aa.A[i][j];

// input data of mat P[m][m]:
  
  for(i=0;i<aa.m;i++)
	  for(int j=0;j<aa.m;j++)
		  in>>aa.P[i][j];

// input data of mat L[m][1]:
  
  for(i=0;i<aa.m;i++)
	in>>aa.l[i][0];
  in.close();
return 1;
}

//*******************************************************************************************

int  doadj(adj &a)            // 普通最小二乘平差
{
	double APA[MAX][MAX];
	ATPA(a.A,a.P,APA,a.m,a.n);
	int flag=inverse(APA,a.QXX,a.n);
	if(flag!=1) 
	{
		a.flag=0;
		return 0;
	}
	double AX[MAX][1];
	ATPL(a.A,a.P,a.l,AX,a.m,a.n);
	AXB(a.QXX,AX,a.X,a.n,a.n);
    AXB(a.A,a.X,AX,a.m,a.n);
	for(int i=0;i<a.m;i++)
		a.V[i][0]=AX[i][0]-a.l[i][0];
   double cc=VPV(a.V,a.P,a.m);
	a.m0=sqrt(cc/(a.m-a.n));
	a.flag=1;
	return 1;

}

//*******************************************************************************************
int doadj(adj &a,int known,int r)        // 極大權法最小二乘平差,known--控制點已知數據個數;
{                                        // r-固定數據個數+測站數(平面網)
double APA[MAX][MAX];
	ATPA(a.A,a.P,APA,a.m,a.n);
	double add(0);
	for(int i=0;i<a.n;i++)
     if(add<=APA[i][i]) add=APA[i][i];
	add*=1000;
	for(i=0;i<known;i++)                 // 對已知點方法程系數陣的處理:
		APA[i][i]+=add;                  // 控制點點號對應矩陣主元加平均權的10000倍
	int flag=inverse(APA,a.QXX,a.n);
	if(flag!=1)                          // 不可求逆的判斷及處理 
	{ a.flag=0;  return 0;}
	double AX[MAX][1];                   // 極大權平差過程
	ATPL(a.A,a.P,a.l,AX,a.m,a.n);
	AXB(a.QXX,AX,a.X,a.n,a.n);
    AXB(a.A,a.X,AX,a.m,a.n);
	for(i=0;i<a.m;i++)
		a.V[i][0]=AX[i][0]-a.l[i][0];
   double cc=VPV(a.V,a.P,a.m);           // VTPV計算
	a.m0=sqrt(cc/(a.m-a.n+known-r));     // 單位權中誤差計算,必要觀測數為(a.n-knownp)
	a.flag=1;                            // 平差完畢
	return 1;
}
//*******************************************************************************************

void adjdis(adj &aa)   
{
cout<<"   平差項目名 :"<<aa.name<<endl<<endl;
 
cout<<" 誤差方程陣:"<<endl;
  matdis(aa.A,aa.m,aa.n);
 
  cout<<endl<<endl<<" 觀測值權矩陣:"<<endl;
  matdis(aa.P,aa.m,aa.m);

  cout<<endl<<endl<<" 常數項:"<<endl;
  matdis(aa.l,aa.m);
  cout<<endl<<endl;

  cout<<endl<<endl<<"  未知數解:"<<endl;
  matdis(aa.X,aa.n);
  
  cout<<endl<<endl<<" 未知數協因數陣:"<<endl;
  matdis(aa.QXX,aa.n,aa.n);

  cout<<endl<<endl<<" 改正數:"<<endl;
  matdis(aa.V,aa.m);

  cout<<endl<<endl<<" 單位權中誤差:+-"<<aa.m0<<endl;

}
//************************************************************************************************
int foutadj(adj &aa, char *name)
{
ofstream on(name);
	if(!on) return 0;
// 輸出平差項目名    
	on<<aa.name<<endl<<endl;
  
// output observation number:  
	on<<aa.m<<endl;
  
// output unknown data number: 
    on<<aa.n<<endl<<endl;

//out unknown data results 
  for(int i=0;i<aa.n;i++)
	  on<<aa.X[i][0]<<endl;
      on<<endl;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区精华| 亚洲成人av资源| 亚洲最新视频在线观看| 国产一区视频在线看| 欧美性高清videossexo| 国产人伦精品一区二区| 蜜臀av性久久久久av蜜臀妖精 | 亚洲国产成人高清精品| 成人精品视频一区二区三区| 欧美一区二区视频观看视频| 一区二区三区精品| 91小视频免费看| 亚洲国产成人一区二区三区| 久久99精品国产91久久来源| 欧美精品一卡两卡| 亚洲精品国产视频| av一二三不卡影片| 国产欧美一区二区精品仙草咪| 蜜臂av日日欢夜夜爽一区| 欧美在线999| 亚洲在线观看免费| 日本韩国精品在线| 亚洲乱码国产乱码精品精的特点 | 中文字幕国产一区| 国产成人午夜视频| 国产欧美日本一区二区三区| 国产精品一二三| 久久婷婷国产综合精品青草| 日韩成人一级大片| 6080午夜不卡| 久久成人免费网| 久久这里只有精品视频网| 国产在线麻豆精品观看| 精品欧美乱码久久久久久1区2区| 麻豆成人在线观看| 欧美va在线播放| 国产乱子伦一区二区三区国色天香 | 69精品人人人人| 免费的成人av| 久久久天堂av| 成人性色生活片免费看爆迷你毛片| 国产欧美视频一区二区| 成人综合日日夜夜| 亚洲天堂免费看| 欧美吻胸吃奶大尺度电影| 亚洲一二三区不卡| 日韩欧美国产三级| 国产精品一级在线| 一区在线观看视频| 欧美亚洲图片小说| 轻轻草成人在线| 精品国产亚洲在线| 不卡的电视剧免费网站有什么| 国产精品久久毛片| 欧美三级乱人伦电影| 蜜桃视频在线观看一区| 国产日产欧美一区二区视频| 99久久精品免费精品国产| 一区二区三区在线观看动漫| 欧美区一区二区三区| 九色porny丨国产精品| 国产女主播视频一区二区| 99这里只有精品| 日本91福利区| 中文字幕日韩欧美一区二区三区| 欧美日韩亚洲高清一区二区| 激情久久久久久久久久久久久久久久| 中文字幕乱码日本亚洲一区二区| 欧美性色欧美a在线播放| 久久99精品久久只有精品| 1区2区3区精品视频| 欧美二区三区91| 丰满放荡岳乱妇91ww| 亚洲成人tv网| 国产精品传媒入口麻豆| 欧美一区二区女人| 91免费看`日韩一区二区| 秋霞成人午夜伦在线观看| 亚洲视频电影在线| 欧美精品一区视频| 欧美另类久久久品| 99九九99九九九视频精品| 精品写真视频在线观看| 亚洲人成人一区二区在线观看| 日韩欧美国产1| 欧美色视频一区| 99v久久综合狠狠综合久久| 蜜臀99久久精品久久久久久软件| 亚洲男人的天堂在线观看| 国产蜜臀av在线一区二区三区 | 日本高清成人免费播放| 国产一区激情在线| 日韩av午夜在线观看| 樱花影视一区二区| 国产精品久久久久久久浪潮网站 | 在线电影欧美成精品| 色悠悠亚洲一区二区| 国产一区久久久| 久久精品72免费观看| 亚洲成人av中文| 亚洲制服丝袜一区| 亚洲欧美日韩中文播放 | 日韩成人免费看| 亚洲自拍欧美精品| 亚洲日本一区二区三区| 一区在线观看免费| 中文字幕中文字幕中文字幕亚洲无线| 久久蜜桃av一区精品变态类天堂 | 国产精品久久毛片a| 国产精品视频免费看| 日本一区二区在线不卡| 国产欧美一区二区三区鸳鸯浴 | 亚洲一区二区三区美女| 日本一区二区成人| 亚洲一区二区三区影院| 一区二区三区四区不卡在线 | 天天综合日日夜夜精品| 亚洲国产中文字幕在线视频综合 | 欧美国产丝袜视频| 国产偷国产偷精品高清尤物| 精品免费国产一区二区三区四区| 日韩限制级电影在线观看| 日韩欧美专区在线| 久久综合久久鬼色中文字| 久久免费偷拍视频| 国产人成一区二区三区影院| 国产精品欧美久久久久无广告 | 成人国产精品免费观看视频| 成人久久18免费网站麻豆 | 91精品国产福利| 欧美videos大乳护士334| 国产欧美日本一区视频| 亚洲女人的天堂| 天天操天天综合网| 国产一区999| 色综合欧美在线视频区| 欧美日本精品一区二区三区| 精品国产免费人成在线观看| 中文字幕免费观看一区| 亚洲黄色录像片| 美脚の诱脚舐め脚责91 | 国产69精品久久99不卡| 91碰在线视频| 日韩欧美激情四射| 国产清纯在线一区二区www| 一区二区三区蜜桃网| 日本aⅴ免费视频一区二区三区| 国产一区二区三区四区五区入口| 欧美三级中文字幕| 日韩精品一区二区三区在线 | 白白色 亚洲乱淫| 宅男噜噜噜66一区二区66| 久久久久高清精品| 亚洲成年人网站在线观看| 国产乱码精品一区二区三区av | av在线播放一区二区三区| 欧美日韩高清一区| 国产精品久久久一区麻豆最新章节| 亚洲香蕉伊在人在线观| 国产美女精品人人做人人爽| 欧美色电影在线| 国产精品久久久久久久午夜片| 免费观看日韩av| 91一区一区三区| 国产偷国产偷精品高清尤物 | 日韩手机在线导航| 一区二区三区在线视频观看58| 精品无人区卡一卡二卡三乱码免费卡| 91久久精品一区二区二区| 国产午夜精品久久久久久免费视| 午夜精彩视频在线观看不卡| av资源站一区| 久久一区二区三区四区| 亚洲成av人影院在线观看网| 99精品桃花视频在线观看| 欧美变态口味重另类| 亚洲自拍另类综合| 日韩在线一二三区| 亚洲视频一区在线| 国产精品66部| 日韩欧美在线1卡| 五月激情综合色| 欧美三级日韩三级| 亚洲国产欧美在线| 色综合av在线| 亚洲欧洲中文日韩久久av乱码| 国产成人精品www牛牛影视| 欧美不卡一区二区三区| 男女视频一区二区| 日韩欧美成人激情| 理论片日本一区| 欧美va在线播放| 国产在线一区二区综合免费视频| 欧美一区二区三区免费大片 | 国产精品免费丝袜| 成人91在线观看| 国产欧美精品一区二区色综合| 国产成人亚洲综合a∨婷婷| 国产日韩精品一区| 99国产精品久|