高斯消元法!
一、高斯消元法 GaussianElimination
高斯消元法(或翻译:高斯消去法)是线性代数中常用的算法,常用于解决线性方程组和矩阵的逆转。
本程序的运行效果:
1.动画演示高斯消元法
2.动画演示高斯列主元消元法
列主元素消除法是一种为控制舍入误差而提出的算法。列主元素消除法的计算基本上可以控制舍入误差的影响。其基本思想是:在进行中 k(k=1,2,...,n-1)从第k列步消元时 akk在以下元素中,选择绝对值最大的元素,然后通过转换将其交换到主要元素akk在位置上,然后消元。
做良心程序员,0点下载源程序:
二、高斯消元法的实用价值
1.解决线性方程组
废话。
2.求逆矩阵(矩阵逆)
高斯消元法可以用来找可逆矩阵的逆矩阵。设A 为一个N * N两个分块矩阵可以表示其逆矩阵。将一个N * N单位矩阵 放在A 右手边,形成一个N * 2N的分块矩阵B = [A,I] 。矩阵B 左手边会变成单位矩阵I ,而逆矩阵A ^(-1) 会出现在B 的右手边。 如果高斯消元法不能A 化为三角形的格式代表A 是不可逆矩阵。 在应用中,很少使用高斯消元法来找到逆矩阵。高斯消元法通常只为线性方程组解决。
3.寻求矩阵的秩序
高斯消元法可应用在任何m * n的矩阵A。在不能减去一定数量的情况下,我们只能跳到下一行。 * 9矩阵例,它可以变成梯形:
1 * 0 0 * * 0 * 0 0 0 1 0 * * 0 * 0 0 0 0 1 * * 0 * 0 0 0 0 0 0 0 1 * 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
而矩阵中的 *' 是一些数字。这个梯阵矩阵T 会有一些关于A的信息: A 因为T 有5行非0的行; A 从A 从矩阵的第1、3、4、7和9列中得知,其值在矩阵中T 之中; 矩阵中的 *' 表示了A 列中的数字组合怎么写?
三、高斯消元法和列主元消元法的代码
高斯消元法C#源代码
/// <summary> /// 线性方程组 /// </summary> /// <param name="a"></param> /// <returns></returns> public static Matrix Gaussian_Elimination(Matrix a) { Matrix x = new Matrix(a.Row, 1); ///消元计算 for (int k = 0; k <= a.Row - 2; k ) { for (int i = k 1; i <= a.Row - 1; i ) { double lik = a[i, k] / a[k, k]; for (int j = k 1; j <= a.Row; j ) { a[i, j] = a[i, j] - lik * a[k, j]; } a[i, k] = 0.0; } } ///回代求解 for (int i = a.Row - 1; i >= 0; i--) { double sum = 0; for (int j = i 1; j <= a.Row - 1; j ) { sum = sum a[i, j] * x[j]; } x[i] = (a[i, a.Row] - sum) / a[i, i]; } return x; }
2.高斯列主元消元法C#源代码
/// <summary> /// 线性方程组列出主要高斯消除法 /// </summary> /// <param name="a"></param> /// <returns></returns> public static Matrix Gaussian_Column_Principal_Elimination(Matrix a) { Matrix x = new Matrix(a.Row, 1); for (int k = 0; k < a.Row - 1; k ) { ///选择主元[本列绝对值最大值] int max_ik = 0; double ab_max = float.MinValue; for (int i = k; i < a.Column - 1; i ) { if (System.Math.Abs(a[i, k]) > ab_max) { ab_max = System.Math.Abs(a[i, k]); max_ik = i; } } if (ab_max < float.Epsilon) { throw new Exception("除0!"); } else if (max_ik != k) { slides.Add(Slide(a, x, a, max_ik, k, 1)); // 交换 for (int j = 0; j < a.Column; j ) { double temp = a[max_ik, j]; a[max_ik, j] = a[k, j]; a[k, j] = temp; } } ///消元计算 for (int i = k 1; i < a.Row; i ) { double kk = a[i, k] / a[k, k]; for (int j = k; j < a.Column; j ) { a[i, j] -= kk * a[k, j]; } } if (System.Math.Abs(a[a.Row - 1, a.Row - 1]) < float.Epsilon) { throw new Exception("除0!"); } } // 回代求解 for (int i = a.Row - 1; i >= 0; i--) { x[i] = a[i, a.Column - 1]; for (int j = i 1; j < a.Column - 1; j ) { x[i] -= a[i, j] * x[j]; } x[i] /= a[i, i]; } return x; }
3.动画显示源代码
暂时,赞加。
四、高斯消元法的性能
1.高斯消元法算法的复杂性
高斯消元法的算法复杂度是O(N^3);也就是说,如果系数矩阵是N ×N,那么高斯消元法所需的计算量大约与N^3成比例。
2.高斯消元法的局限性
任何域都可以使用高斯消元法。 对某些矩阵来说,高斯消元法是稳定的。 对于普通矩阵,高斯消元法在应用上通常是稳定的,但也有例外。
除0!