矩陣運算-----模板

本人第一次寫博客,寫的不好之處望多體諒。。。


由於博主在用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等數據類型,編譯器均不會報錯!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章