锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

C#,数值计算,高斯消元法与列主元消元法的源代码及数据动态可视化

时间:2022-10-06 21:30:01 球阵式集成电路

高斯消元法!

一、高斯消元法 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#源代码

///  /// 线性方程组 ///  ///  ///  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#源代码

///  /// 线性方程组列出主要高斯消除法 ///  ///  ///  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!

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章