- 1
- 0
- 约6.83千字
- 约 7页
- 2017-05-13 发布于四川
- 举报
求任何1个矩阵的逆
//*************************//*** 求任何一个矩阵的逆***//*************************#include math.h#include malloc.h#include iomanip.h#define? N? 10?? ??? ??? ??? ?//定义方阵的最大阶数为10//函数的声明部分float MatDet(float *p, int n);?? ??? ??? ??? ??? ?//求矩阵的行列式float Creat_M(float *p, int m, int n, int k);?? ?//求矩阵元素A(m, n)的代数余之式void print(float *p, int n);?? ??? ??? ??? ??? ?//输出矩阵n*nbool Gauss(float A[][N], float B[][N], int n);?? ?//采用部分主元的高斯消去法求方阵A的逆矩阵Bint main(){?? ?float *buffer, *p;?? ??? ??? ?//定义数组首地址指针变量?? ?int row, num;?? ??? ??? ??? ?//定义矩阵的行数和矩阵元素个数?? ?int i, j;?? ?float determ;?? ??? ??? ??? ?//定义矩阵的行列式?? ?float a[N][N], b[N][N];?? ?int n;?? ?cout 采用逆矩阵的定义法求矩阵的逆矩阵!\n;?? ?cout 请输入矩阵的行数: ;?? ?cin row;?? ?num = 2 * row * row;?? ?buffer = (float *)calloc(num, sizeof(float));?? ??? ?//分配内存单元?? ?p = buffer;?? ?if (NULL != p)?? ?{?? ??? ?for (i = 0; i row; i++)?? ??? ?{?? ??? ??? ?cout Please input the number of i+1 row: ;?? ??? ??? ?for (j = 0; j row; j++)?? ??? ??? ?{?? ??? ??? ??? ?cin *p++;?? ??? ??? ?}?? ??? ?}?? ?}?? ?else?? ?{?? ??? ?cout Cant distribute memory\n;?? ?}?? ?cout The original matrix : \n;?? ?print(buffer, row);?? ??? ??? ??? ?//打印该矩阵?? ??? ?determ = MatDet(buffer, row);?? ?//求整个矩阵的行列式?? ?p = buffer + row * row;?? ?if (determ != 0)?? ?{?? ??? ?cout The determinant of the matrix is determ endl;?? ??? ?for (i = 0; i row; i++)?? ?//求逆矩阵?? ??? ?{?? ??? ??? ?for (j = 0; j row; j++)?? ??? ??? ?{?? ??? ??? ??? ?*(p+j*row+i) = Creat_M(buffer, i, j, row)/determ;?? ??? ??? ?}?? ??? ?}?? ??? ?cout The inverse matrix is: endl;?? ??? ?print(p, row);?? ??? ??? ??? ?//打印该矩阵?? ?}?? ?else?? ?{?? ??? ?cout The determinant is 0, and there is no inverse matrix!\n;?? ?}?? ?free(buffer);?? ??? ?//释放内存空间?? ?cout 采用部分主元的高斯消去法求方阵的逆矩阵!\n;?? ?cout 请输入方阵的阶数: ;?? ?cin n;?? ?cout 请输入 n 阶方阵: \n;?? ?//输入一个n阶方阵?? ?for (i = 0; i n; i++)?? ?{?? ??? ?for (j = 0; j n; j++)?? ??? ?{?? ??? ??? ?cin
原创力文档

文档评论(0)