数学基础之矩阵系列
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;
}