c++ - 无法使用一维数组 (c++) 计算上三角矩阵的乘积

标签 c++ arrays matrix

我正在尝试将两个上三角矩阵相乘。通过省略对角线下方的零(以节省空间),矩阵存储在一维数组中而不是通常的二维数组中。我已经弄清楚如何将给定一对索引的元素映射到单个数组的索引。但我在实际计算时遇到了问题(计算适用于较小的 n x n 方阵,但出于某种原因,对于较大的 n x n 矩阵给出了不正确的结果)。我相信我可能将不正确的参数传递给 getValue() 函数,但考虑到矩阵乘法的一般公式,我认为它们应该是正确的。任何帮助将不胜感激!

这是我的相关代码:

// mat is an array containing the upper triangle data for a square matrix of size n
// returns element at (i,j), or 0 for the lower triangle
int val(int *mat, int n, int i, int j)
{
  if (i > j) {
    return 0; // lower triangle
  } else {
    return mat[j + (i*n) - i*(i+1)/2];
  }
}

最佳答案

user101263,

为了简化,您可能不想将二维数组映射到一维数组,因为在现实中,它只会使简单的 matrix-multiplication algorithm 复杂化。 .

这是 MM 算法的一个实现:

   int main()
   {
      int[5][5] result;
      /* omitted: create your 2 2D arrays a & b */
      matrixMulitplcation(a,b, result)
   }

  int** matrixMultiplcation(int a[5][5], int b[5][5], result[5][5])
  {       
     for(int R=0;R<5;R++)
     {
       for(int C=0;C<5;C++)
       {
          result[R][C]=0;
          for(int T=0;T<5;T++)
            result[R][C]+=a[R][T]*b[T][C];
       }
     }
     return result;
  }

如有任何问题,请告诉我!

关于c++ - 无法使用一维数组 (c++) 计算上三角矩阵的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26349942/

相关文章:

c++ - qt 如何通过 connect(Signal,Slot) 将 qshortcut() 的 QkeySequence 传递给函数?

arrays - 增加数组vba中元素的值

javascript - 如何使该对象成为数组?

python - 如何在 PyTorch 中乘以矩阵?

matlab - 获取矩阵中行的平均值减去 a 值并将其放入另一个矩阵

C++无法得到中值的正确答案

c++ - 在堆栈上创建对象

C++ map 位置

arrays - C语言中数组变量是如何存储的? (不是内存本身,而是命名变量中的指针)

python - 仅使用列表理解重新排列(列表列表)矩阵