本人第一次寫博客,寫的不好之處望多體諒。。。
由於博主在用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等數據類型,編譯器均不會報錯!!!