1、水准网平差c+代码水准网平差c+代码水准平差网结果#include#include#include#include#define max 50Using namespace std;Class CMatrixpublic:CMatrix()row=0; column=0; / 默构造函数认认认认认CMatrix(int i, int j)row=i;column=j; / 构造函数一CMatrix(constCMatrix& m); / 认制构造函数CMatrix(void)/*cout认认认认认认认认认认认使用,矩所占空以放:endl;*/ / 默析构函数认认认认认CMatrix& oper
2、ator=(constCMatrix& m); / 认认运算符bool operator=(constCMatrix& m); / 比括运算符认认认认bool operator!=(constCMatrix& m); / 比括运算符认认认认CMatrix operator+(constCMatrix& m); / 加运算符CMatrix operator-(constCMatrix& m); / 减运算符CMatrix& operator+=(constCMatrix& m); / 自加运算符CMatrix& operator-=(constCMatrix& m); / 自减运算符CMatri
3、x operator-();/ 取数认认CMatrix& operator*(constCMatrix& m); / 乘法运算符void input(); /认认入矩void outputMatrix(); / 认认认认出矩void setValue(int row, int column, double value) Arow-1column-1 = value; / 认置(i,j)的认double getValue(int row, int column) const return Arow-1column-1; / 认认置行、列的voidsetRow(constint i) row =
4、i; intgetRow() const return row; voidsetColunm(constint i) column = i; intgetColumn() const return column; CMatrix& change(int i, int j);/交矩的行认认认认认CMatrix& transpose(); / 矩置认认认CMatrix& inverse(); / 矩求逆认认认void find(int& f)const;/ 判断矩是否可用于迭代求解认认认认认认认认认认认认friend void jocabi(constCMatrix& a) ; /迭代求解void
5、 lzys(); /列主元素法求解void solve(); /可逆性矩求解认认认认认认void qxnh(); /曲合认认认private:/ 成量认认认double Amaxmax;int row;/ 行int column;/ 列;void CMatrix:input() /认 入 cout认认认认认认认始入矩:endl;int i, j;double z;for(i=0;irow;i+) cout认认入第i+1行的:认认endl;for(j=0;jz;Aij=z;coutendl;CMatrix:CMatrix(constCMatrix& m) / 认制构造函数 int i, j;fo
6、r(i=0;im.row;i+)for(j=0;jAij=m.Aij;CMatrix&CMatrix:operator=(constCMatrix& m) / 认认运算符 inti,j;for(i=0;irow;i+)for(j=0;jcolumn;j+)Aij=m.Aij;return *this;boolCMatrix:operator =(constCMatrix& m) / 比括运算符认认认认 inti,j,k;for(i=0;im.row;i+) for(j=0;jAij=m.Aij) k=1;else k=0;if(k=1) return true;else return fals
7、e;boolCMatrix:operator !=(constCMatrix& m) / 比括运算符认认认认 inti,j,k;for(i=0;im.row;i+) for(j=0;jAij=m.Aij) k=1;else k=0;if(k=0) return true;else return false;CMatrixCMatrix:operator+(constCMatrix& m)/ 加运算符 inti,j;if(this-row=m.row)&(this-column=m.column) for(i=0;im.row;i+)for(j=0;jAij+=m.Aij; else cout此
8、两矩不能相加,:认认认认认认认认认认row=m.row)&(this-column=m.column) for(i=0;im.row;i+)for(j=0;jAij-=m.Aij; else cout此两矩不能相加,:认认认认认认认认认认endl; return *this;CMatrix&CMatrix:operator+=(constCMatrix& m) /自加运算符 inti,j;for(i=0;im.row;i+)for(j=0;jAij=2*m.Aij;return *this;CMatrix&CMatrix:operator-=(constCMatrix& m) /自减运算符 i
9、nti,j;for(i=0;im.row;i+)for(j=0;jAij=m.Aij-m.Aij;return *this;voidCMatrix:find(int& f)const int i;for(i=0;irow;i+)if(this-Aii!=0) f=1;else f=0;CMatrixCMatrix:operator-() / 取数认认 inti,j;for(i=0;irow;i+)for(j=0;jcolumn;j+) this-Aij=-this-Aij;return *this;CMatrix&CMatrix:operator*(constCMatrix& m) / 乘法运
10、算符 inti,j,t;CMatrix n;if(this-column=m.row) for(i=0;irow;i+)for(j=0;jm.column;j+)double sum=0.0;for(t=0;tAit*m.Atj;n.Aij=sum;else cerr此两矩不能相乘,:认认认认认认认认认认endl; exit(1);return n;void CMatrix:outputMatrix()/ 认认认认出矩 inti,j;for(i=1;i=row;i+) for(j=1;j=column;j+)coutAi-1j-1 ;coutcolumn,this-row);for(i=0;i
11、row;i+)for(j=0;jcolumn;j+) m.Aji=this-Aij;return m;void jocabi(constCMatrix& a) /高斯迭代求解 int f=1;a.find(f);if(f=0) cerr认认认认认认认认认认认认矩不足迭代求解条件:endl; exit(1); elseCMatrixx,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认认认认认入等式右的第iz;w
12、.Ai-10=z;for(i=1;i=x.row;i+) cout认认入Xiz;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;kj;k+)sum=sum-(a.Aj-1k-1)*(x.Ak-10);for(k=j+1;k=x.row;k+)sum=sum-(a.Aj-1k-1)*(x.Ak-10);sum+=w.Aj-10;x.Aj-10=sum/a.Aj-1j-1;i+;for(i=1;i=x.row;i+)coutXi = x.Ai-100.0) return
13、a;else return -a;CMatrix&CMatrix:change(int i, int j)/交矩的行认认认认认 int k;double z;for(k=1;kcolumn;k+)z=Ai-1k-1;Ai-1k-1=Aj-1k-1;Aj-1k-1=z;return *this;void CMatrix:lzys() /列主元素法求解 CMatrixx,w;x.setColunm(1);x.setRow(getColumn();w.setColunm(1);w.setRow(getColumn();int i;double z;for(i=0;irow;i+)for(int j=
14、0;jrow; j+)w.Aij=0.0;for(i=1;i=x.row;i+)x.setValue(i, 1, 0.0);for(i=1;i=x.row;i+) cout认认认认认入等式右的第iz;w.Ai-10=z;i=0;while(ix.row-1) intj,t,h=i;for(j=i;jx.row-1;j+)if(jdz(Aji)change(i+1,h+1);w.change(i+1,1);for(j=i+1;jrow;j+) double k;k=Aji/Aii;for(t=i;tArow-1column-1=0)cerr此矩的方程有无解:认认认认认认认认认认认认0) int
15、j, t;for(j=i-1;j=0;j-) double k;k=Aji/Aii;for(t=i;tj;t-) Ajt=Ajt-k*Ait; w.Aj0=w.Aj0-k*w.Ai0;i-; int j;for(j=0;jAjj;for(i=1;i=x.row;i+)coutXi = x.Ai-10row!=this-column) cerr认认认认认认认认认认矩不符合求逆条件:getRow();w.setRow(getColumn();int i;for(i=0;irow;i+)for(int j=0;jrow; j+)w.Aij=0.0;w.Aii=1;i=0;while(icolumn-
16、1) intj,t,h=i;for(j=i;jrow-1;j+)if(jdz(Aji)change(i+1,h+1);w.change(i+1,h+1);for(j=i+1;jrow;j+) double k;k=Aji/Aii;for(t=i;tArow-1column-1=0)cerr此矩求逆不成功,其所的方程有无解:认认认认认认认认认认认认认认认认认认认认0) int j, t;for(j=i-1;j=0;j-) double k;k=Aji/Aii;for(t=i;tj;t-) Ajt=Ajt-k*Ait; for(t=column-1;t=0;t-)w.Ajt=w.Ajt-k*w.A
17、it;i-; intj,k;for(j=0;jrow;j+)for(k=0;kAjj;this-Ajj=this-Ajj/this-Ajj;return w;void CMatrix:solve() /可逆性矩求解认认认认认认 CMatrixx,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认认认认认入等式右的第iz;w.Ai-1
18、0=z;c.operator=(this-inverse();x.operator=(c.operator *(w);cout求解果:认认认endl;for(i=1;i=x.row;i+)coutXi = x.Ai-10endl;void CMatrix:qxnh() /曲合认认认cout用矩曲合:认认认认认认endl;int i, j,k,t;double x, y;couti;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认认入第jxy;w.Aj-10=y;g.Aj-10=1.0;for(k
19、=1;ki;k+) g.setValue(j,k+1,1.0);for(t=1;t=k;t+)g.Aj-1k*=x; c=g.transpose();q=c*g;p=q.inverse();w=c*w;a=p*w;coutY=a.A00;for(j=1;ji;j+) cout+(a.Aj0);for(k=0;kj;k+)cout*x; coutendl;cout 1 .求取其它点坐认 0. 退出 endl;while(1) coutk;switch(k) case 1: double x, y,sum;coutx;y=a.A00;for(j=1;ji;j+)sum=a.Aj0;for(k=0;
20、kj;k+)sum*=x;y+=sum;cout认认认坐:y=yendl;break;case 0: cerr认认使用:endl; exit(1);break;default: cout认认认认认认认认有,:lpVeci-1.eleValue; /认认得高程long getindex(int i)return lpVeci-1.index; /返回高程点号认认void seteleValue(int i, double value)lpVeci-1.eleValue+=value; /修改高程认void setdv(inti,double value)this-lpVeci-1.dv=valu
21、e; /修改改正数double getdv(int i)return lpVeci-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:/ 成量认认认intnumElvDif;/ 高差数认认intnumPoints;/ 控制网中点的数目认认认intnumKnPoint;/控制网中已知点的数目CElvDifedVecmax
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1