本人第一次写博客,写的不好之处望多体谅。。。
由于博主在用c++写矩阵运算时,遇到了一系列问题,希望在这里做一个总结,也能帮到许多初学者。
在矩阵运算中,由于涉及二维数组(m行n列),若用函数直接定义数组,需要给定m、n值,这在实际应用中受到很大限制,我们在实际上中往往需要的是一个能计算任意大小的矩阵的方法(函数)。本人曾经试图将其定义为一维数组,通过定义一个a[m*n]矩阵,但是事与愿违,在实际的运算中又涉及许多算法知识,较为复杂。在这种情形下,模板(Template)成为了最好的选择。
(1)模板之矩阵的转置
template<typename T1, typename T2>void Transpose(T1*mat1, T2*mat2, int a, int b) { int i, j; for (i = 0; i<a; i++) for (j = 0; j<b; j++) mat2[j][i] = mat1[i][j]; return; }
(2)模板之矩阵相乘
template<typename T1, typename T2>void Multi(T1*mat1, T2 * mat2, T2 * result, int a, int b, int c) { int i, j, k; for (i = 0; i<a; i++) { for (j = 0; j<c; j++) { result[i][j] = 0; for (k = 0; k<b; k++) result[i][j] += mat1[i][k] * mat2[k][j]; } } }
(3)模板之矩阵相加
//矩阵相加 template<typename T1, typename T2>void Add(T1*mat1, T2 * mat2, int a, int b) { for (int i = 0; i<a; i++) for (int j = 0; j<b; j++) mat1[i][j] = mat1[i][j] + mat2[i][j]; }
(4)模板之矩阵相减
//矩阵相减 template<typename T1, typename T2>void Sub(T1 *mat1, T2 *mat2, T2 * result, int a, int b) { for (int i = 0; i<a; i++) for (int j = 0; j<b; j++) result[i][j] = mat1[i][j] - mat2[i][j]; }模板的使用,使矩阵运算能够满足double、int等数据类型,编译器均不会报错!!!