在C 中实现顺序LU分解

Implementation of sequential LU decomposition in C++

本文关键字:LU 分解 顺序 实现      更新时间:2023-10-16

我正在尝试遵循https://courses.engr.illinois.edu/cs554/fa2015/notes/06_lu_8up.pdf,以实现LU分解并实现LU分解,以实现与OpenMP并行化。以下算法看起来正确, l是乘数,m是矩阵?

void decompose2(double **m) {
    begin =clock();
    int i=0, j=0, k=0;
    for(k = 1; k < size - 1; k++)
    {
      for(i = k + 1; i < size; i++)
      {
        l[i][k] = m[i][k]/m[k][k];
      }
      for(j = k + 1; j < size; j++)
      {
        for(i = k + 1; k < size; k++)
        {
          m[i][j] = m[i][j] - (l[i][k]*m[k][j]);
        }
      }
    }
    end = clock();
}

我认为这是不正确的,因为根据我在相同数量的处理器上并行化的不同论文,完全不同。

"以下算法看起来正确,…" - 不,因为

  • 数组是C 中的0个索引,
  • double[size][size](您可能使用的)不可转换为double**
  • int不是迭代器的好类型(而不是使用size_t),
  • 您不检查m[k][k]是否可能(接近)零,何时您可能需要交换行。

请注意,我只查看了明显的实现错误,在可能使代码更好的情况下,例如提高计算的稳定性。