矩阵行列式-高斯消元法实现

数学基础之矩阵系列
1. 矩阵求逆-高斯消元法介绍及其实现
2. 矩阵行列式-高斯消元法实现


矩阵求逆-高斯消元法介绍及其实现一文中,使用高斯消元法求一个方阵的逆,根据该思想,本文给出高斯消元法求矩阵行列式的过程。

与求逆过程不同,求行列式时,在做行变换的过程中不需要添加单位矩阵构成增广矩阵,同时,当经过从上到下的行变换,将矩阵变成上三角矩阵后不需要再进行从下到上的行变换过程,因为对于一个上三角矩阵,可直接将矩阵的对角元素相乘得到矩阵的行列式。

下面是该过程的C#实现:

        private static  readonly double eps = 1e-6;
        public static double Det(double[,] matrix, int dim)
        {

            double[,] mat = new double[dim, dim];
            for(int i = 0;i < dim; i++)
            {
                for(int j = 0; j < dim; j++)
                {
                    mat[i, j] = matrix[i, j];
                }
            }

            for (int i = 0; i < dim; i++)
            {
                if (Math.Abs(mat[i, i]) < eps)
                {
                    int j = -1;
                    for (j = i + 1; j < dim; j++)
                    {
                        if (Math.Abs(mat[j, i]) > eps) break;
                    }
                    if (j == dim) return 0;
                    for (int r = i; r < dim; r++)
                    {
                        mat[i, r] += mat[j, r];
                    }
                }

                for (int j = i + 1; j < dim; j++)
                {
                    double e = -1 * (mat[j, i] / mat[i, i]);
                    for (int r = i; r < dim; r++)
                    {
                        mat[j, r] += e * mat[i, r];
                    }
                }
            }

            double det = 1.0;
            for (int i = 0; i < dim; i++) det *= mat[i, i];
            return det;

        }

猜你喜欢

转载自blog.csdn.net/qithon/article/details/80100966