我们根据矩阵乘法的计算公式和条件看两个矩阵相乘的例子:
需要注意的是,两个矩阵相乘时,只有当第一个矩阵(左侧矩阵)的列数等于第二个矩阵(右侧矩阵)的行数时,两个矩阵才能相乘。
我们来实现矩阵相乘的代码:
//矩阵相乘 int matrix_mult(s_Matrix *result, s_Matrix *src, s_Matrix *src1) { if (result == null) { return -1; } if (result->v == null) { return -1; } if (src == null) { return -1; } if (src->v == null) { return -1; } if (src->m <= 0 || src->n <= 0) { return -1; } if (src1 == null) { return -1; } if (src1->v == null) { return -1; } if (src1->m <= 0 || src1->n <= 0) { return -1; } //只有当第一个矩阵(左侧矩阵)的列数等于第二个矩阵(右侧矩阵)的行数时,两个矩阵才能相乘 if (src->n != src1->m) { return -1; } //结果矩阵的行数为第一个矩阵的行数 result->m = src->m; //结果矩阵的列数为第二个矩阵的列数 result->n = src1->n; //循环每行 for (int i = 0; i < result->m; i++) { //循环每列 for (int j = 0; j < result->n; j++) { //计算第一个矩阵与第二个矩阵的乘法结果的累加和 num v = 0; for (int k = 0; k < src->n; k++) { //乘法结果的累加和 v += src->v[i * src->n + k] * src1->v[k * src1->n + j]; } //得到结果 result->v[i * result->n + j] = v; } } return 0; }
本教程所使用的源代码完全开放、免费。你可以自由的使用和修改本教程中的所有源代码:
git@github.com:magicworldos/matrix.git https://github.com/magicworldos/matrix.git
Copyright © 2015-2023 问渠网 辽ICP备15013245号