1、#include stringusing namespace std;const double pi = ;int main() fstream file(a.txt); /概念文件操作对象 string aa; fileaa; coutaaendl; /输出文件中的内容 int a = 1; /概念重复输入利用的变量 while(a) /限制循环,重复输入 float a1,a2,a3; couta1;输入分a2;输入秒a3;角度为 a1 a2 a3= 0) /判定输入度数的正负 deg = a1 + a2/60 + a3/3600; else deg = a1 - a2/60 - a3/3
2、600; double radian; radian = deg/180*pi;转换得弧度为 radianradian; bool tm = 0; deg = radian*180/pi; if(deg0) tm = 1; deg = -deg; a1 = int(deg); a2 = int( (deg-a1)*60 ); a3 = ( (deg-a1-a2/60)*3600 ); if(tm = 1) a1 = -a1; tm = 0;转换后角度为 return 0;3. 运行结果 输入度20输入分55输入秒32角度为 20 55 32转化后角度为 179 54Press any key
3、to continue4. 显现的问题角度转换进程中需要考虑角度的正负号问题,角度转化能够添加是不是超过59的判定。(二)实习2(概率计算)1.预备在误差查验、粗差探测等平差计算中常常需要计算某些特定散布函数的反函数值,为知足计算需要,利用CProbability类对相关计算进行封装。2.代码及运行结果与书上相同。(三)实习3(矩阵大体运算)矩阵的运算有加法、减法、乘法、转置、求逆,封装在一个类中。为了方便以后的计算与利用,类中还添加了从文件中读入矩阵、输出矩阵,向操纵台输入输出矩阵的函数。代入运算的矩阵均用动态的一维数组表示。先概念double型指针,在确信矩阵大小后动态申请空间,row行c
4、ol列的矩阵概念为:double *mat = new doublerow*col; 第i行j列的元素为mati*col+j。矩阵的加法、减法只需遍历两个矩阵的每一个元素,相加以后放到结果矩阵中(如有必要先判定相加的两矩阵行数与列数是不是相等)。乘法计算中设相成的两个矩阵mat一、mat2的行列别离为row一、col,col、col2,那么所求结果矩阵第i行j列的元素 用三个循环即可计算矩阵中所有的元素。矩阵转置将结果矩阵中的i行j列元素赋值为需要计算的矩阵中的j行i列个元素即可。矩阵求逆,由于平差计算中需要求逆的矩阵一样为实对称正定矩阵,为了提高大型矩阵的计算效率,能够利用对实对称正定矩阵求
5、逆的方式。设C为n阶对称正定矩阵,y、x为n维向量,其关系式为: y=Cx (3-1)确信了上的一个映像,如能写出逆关系: x=By (3-2)那么B为C的逆阵,即B=现将式(3-1)写成 . . (3-3) . .因C对称正定,必有0,用除式(3-3)第一个方程的两头,解出,把和的位置互换,并将代入其他各式得 . . (3-4)事实上式(3-4)能够改写为 . + . (3-5)若是对式(3-5)中的变量按如下规那么从头编号 (3-6) 经n次变换后恢恢复状,采纳变量循环从头编号法的计算公式如下:关于由于变量循环从头编号法求逆均在下三角阵(包括对角元素)进行,因此运行速快,在大型矩阵的计算中
6、能够专门好的适用。矩阵运算的函数封装在类mat中,函数在mat.h中概念,在mat.cpp中实现。2.代码 文件mat.h:#include=j)? i*(i+1)/2+j : j*(j+1)/2+i; ;文件mat.cpp:#include mat.hvoid mat:add(int row,int col,double m,double n,double result) for(int i=0; irow*col; i+) resulti = mi+ni;sub(int row,int col,double m,double n,double result) resulti = mi-ni
7、;double* mat:multiply(int row, int col, int col2, double m,double n) int i,j,k; double *result = new doublerow*col2; for(i=0;row; for(j=0; jcol2; j+) resulti*col2+j = 0; for(k=0; kcol; k+) resulti*col2+j += mi*col+k * nk*col2+j; return result;trans(int row, int col, double m, double result) int i,j;
8、 double *temp = new doublerow*col; resulti*row+j = mj*col+i;bool mat:inverse(double mat, int n) int i; int j; int k; double *c = new doublen; for(k=0;n; double c11 = mat0; if(c11 + = ) delete c; return false; for(i=1; double ai0 = mati*(i+1)/2; if(i=n-k-1) ci = -ai0/c11; else ci = ai0/c11; for(j=1;=i; mat(i-1)*i/2 + j -1 = mati*(i+1)/2+j + ai0*cj; mat(n-1)*n/2+i-1 = ci; matn*(n+1)/2-1 =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1