【问题标题】:how to find determinant [closed]如何找到行列式[关闭]
【发布时间】:2020-04-25 13:56:53
【问题描述】:
double Determinant(double *X, int N){

    /*Solution*/

} 

int main(void)
{

  double X[] = {3, 1, 2, 
                7, 9, 2, 
                4, 6, 9};

  if (Determinant(X,3) == 164) 
   {
    printf("✓");   
   } 

 }

如何求一维数组 NxN 行列式矩阵?有人能帮我吗?提前致谢。

【问题讨论】:

  • 由于矩阵是一个二维数组,因此您有一个约定用一维数组来表示它。它是什么?前三个元素是一行吗?还是列?
  • 请澄清您的问题。这几乎是不可能理解的。
  • 在示例中,我给出了一个一维的 3 x 3 矩阵。 {3, 1, 2, 7, 9, 2, 4, 6, 9};如果行列式的结果是正确的,打印✓
  • @RobertoCaboni:在计算行列式时,一维表示是按行(C 顺序)还是按列(Fortran 顺序)都没有关系,因为转置的行列式等于原始矩阵。

标签: c arrays determinants dimensional


【解决方案1】:

行列式通常以递归形式计算 N > 2 为 SUM(ai0 * det(Xi * (-1)i) 其中Xi是去掉第一列第i行得到的子矩阵。在C语言中可以写成:

double Determinant(double *X, int N) {
    if (N == 2) {                         // trivial for a 2-2 matrix
        return X[0] * X[3] - X[1] * X[2];
    }
    // allocate a sequential array for the sub-matrix
    double *Y = malloc((N - 1) * (N - 1) * sizeof(double));
    // recursively compute the determinant
    double det = 0.;
    for (int k = 0, s = 1; k < N; k++) {
        // build the submatrix
        for (int i = 0, l=0; i < N; i++) {
            if (i == k) continue;
            for (int j = 1; j < N; j++) {
                Y[l++] = X[j + i * N];
            }
        }
        det += X[k * N] * Determinant(Y, N - 1) * s;
        s = -s;
    }
    free(Y);                        // do not forget to de-alloc...
    return det;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多