伴随矩阵的计算方法比较简单,但是它的计算需要用到我们之前的行列式计算的函数。它的定义是:将矩阵中的每一个元素抹去它所在的行和列,从而得到新的行列式的值作为这个元素所在位置的值。这样,这个新矩阵就叫作原矩阵的伴随矩阵。
我们来看一下代码:
//伴随矩阵 int matrix_adjoint(s_Matrix *result, s_Matrix *src) { if (result == null) { return -1; } if (result->v == null) { return -1; } if (result->m <= 0 || result->n <= 0) { return -1; } if (src == null) { return -1; } if (src->v == null) { return -1; } if (src->m <= 0 || src->n <= 0) { return -1; } //必须是方阵 if (src->m != src->n) { return -1; } result->m = src->m; result->n = src->n; if (src->m == 1) { result->v[0] = 1; return 0; } int cm = src->m - 1; int cn = src->n - 1; s_Matrix cofactor; matrix_init(&cofactor, cm, cn); //计算每一个元素的代数余子式并作为这个元素所在位置的值 for (int i = 0; i < src->m; i++) { for (int j = 0; j < src->n; j++) { for (int k = 0, ck = 0; k < src->m; k++) { //抹去第i行 if (k != i) { for (int l = 0, cl = 0; l < src->n; l++) { //抹去第j列 if (l != j) { //计算值 cofactor.v[ck * cofactor.n + cl] = src->v[k * src->n + l]; cl++; } } ck++; } } num det = 0; //计算代数余子式 matrix_determinant(&det, &cofactor); //用代数余子式做为新元素 result->v[j * result->n + i] = pow(-1, i + j) * det; } } matrix_destory(&cofactor); return 0; }
本教程所使用的源代码完全开放、免费。你可以自由的使用和修改本教程中的所有源代码:
git@github.com:magicworldos/matrix.git https://github.com/magicworldos/matrix.git
Copyright © 2015-2023 问渠网 辽ICP备15013245号