最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下:

1、Guass列选主元消去法对于AX =B

1)、消元过程:将(A|B)进行变换为,其中是上三角矩阵。即:

k从1到n-1

a、 列选主元

选取第k列中绝对值最大元素作为主元。

b、 换行

c、 归一化

d、 消元

2)、回代过程:由解出。

2、三角分解法(Doolittle分解)

将A分解为如下形式

由矩阵乘法原理

a、计算U的第一行,再计算L的第一列

b、设已求出U的1至r-1行,L的1至r-1列。先计算U的第r行,再计算L的第r列。

a)计算U的r行

b)计算L的r列

C#代码:

  代码说明:Guass列主消元法部分将计算出来的根仍然储存在增广矩阵的最后一列,而Doolittle分解,将分解后的结果也储存至原来的数组中,这样可以节约空间。。

using System;
using System.Windows.Forms;namespace Test
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Cannel_Button_Click(object sender, EventArgs e){this.textBox1.Clear();this.textBox2.Clear();this.textBox3.Clear();this.comboBox1.SelectedIndex = -1;}public double[,] GetNum(string str, int n){string[] strnum = str.Split(' ');double[,] a = new double[n, n + 1];int k = 0;for (int i = 0; i < n; i++){for (int j = 0; j < strnum.Length / n; j++){a[i, j] = double.Parse((strnum[k]).ToString());k++;}}return a;}public void Gauss(double[,] a, int n){int i, j;SelectColE(a, n);for (i = n - 1; i >= 0; i--){for (j = i + 1; j < n; j++)a[i, n] -= a[i, j] * a[j, n];a[i, n] /= a[i, i];}}//选择列主元并进行消元  public void SelectColE(double[,] a, int n){int i, j, k, maxRowE;double temp; //用于记录消元时的因数  for (j = 0; j < n; j++){maxRowE = j;for (i = j; i < n; i++)if (System.Math.Abs(a[i, j]) > System.Math.Abs(a[maxRowE, j]))maxRowE = i;if (maxRowE != j)swapRow(a, j, maxRowE, n);   //与最大主元所在行交换  //消元  for (i = j + 1; i < n; i++){temp = a[i, j] / a[j, j];for (k = j; k < n + 1; k++)a[i, k] -= a[j, k] * temp;}}return;}public void swapRow(double[,] a, int m, int maxRowE, int n){int k;double temp;for (k = m; k < n + 1; k++){temp = a[m, k];a[m, k] = a[maxRowE, k];a[maxRowE, k] = temp;}}public void Doolittle(double[,] a, int n){for (int i = 0; i < n; i++){if (i == 0){for (int j = i + 1; j < n; j++)a[j, 0] = a[j, 0] / a[0, 0];}else{double temp = 0, s = 0;for (int j = i; j < n; j++){for (int k = 0; k < i; k++){temp = temp + a[i, k] * a[k, j];}a[i, j] = a[i, j] - temp;}for (int j = i + 1; j < n; j++){for (int k = 0; k < i; k++){s = s + a[j, k] * a[k, i];}a[j, i] = (a[j, i] - s) / a[i, i];}}}}private void Exit_Button_Click(object sender, EventArgs e){this.Close();}private void Confirm_Button_Click(object sender, EventArgs e){if (this.textBox2.Text.Trim().ToString().Length == 0){this.textBox2.Text = this.textBox1.Text.Trim();}else{this.textBox2.Text = this.textBox2.Text + "\r\n" + this.textBox1.Text.Trim();}this.textBox1.Clear();}private void Calculate_Button_Click(object sender, EventArgs e){string str = this.textBox2.Text.Trim().ToString();string myString = str.Replace("\n", " ").Replace("\r", string.Empty);double[,] a = new double[this.textBox2.Lines.GetUpperBound(0) + 1, this.textBox2.Lines.GetUpperBound(0) + 2];a = GetNum(myString, this.textBox2.Lines.GetUpperBound(0) + 1);if (this.comboBox1.Text == "Guass列主消元法"){Gauss(a, this.textBox2.Lines.GetUpperBound(0) + 1);for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++){this.textBox3.Text = this.textBox3.Text + "\r\nX" + (i + 1) + "=" + a[i, this.textBox2.Lines.GetUpperBound(0) + 1];}}else if (this.comboBox1.Text == "Doolittle三角分解法"){this.textBox3.Enabled = true;Doolittle(a, this.textBox2.Lines.GetUpperBound(0) + 1);this.label3.Text = "分解后的结果:";this.textBox3.Clear();this.textBox3.Text += "L矩阵:\r\n";for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++){for (int j = 0; j < this.textBox2.Lines.GetUpperBound(0) + 1; j++){if (j < i){this.textBox3.Text += a[i, j].ToString() + "\t";}else if (i == j){this.textBox3.Text += "1\t";}else{this.textBox3.Text += "0\t";}}this.textBox3.Text += "\r\n";}this.textBox3.Text += "\r\nU矩阵:\r\n";for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++){for (int j = 0; j < this.textBox2.Lines.GetUpperBound(0) + 1; j++){if (j >= i){this.textBox3.Text += a[i, j].ToString() + "\t";}else{this.textBox3.Text += "0\t";}}this.textBox3.Text += "\r\n";}}}private void textBox1_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Enter){if (this.textBox1.Text.Trim().ToString().Length == 0){Calculate_Button_Click(sender, e);}else{Confirm_Button_Click(sender, e);}}}private void button1_Click(object sender, EventArgs e){this.textBox2.Enabled = true;}}
}

  运行截图:

  至此完毕。。。。

转载于:https://www.cnblogs.com/czx1/p/5438136.html

Guass列选主元消去法和三角分解法相关推荐

  1. 不选主元的矩阵三角分解法

    1.矩阵三角分解原理 设AAA为非奇异矩阵,且有分解式A=LU,A=LU,A=LU, A=[a11a12-a1na21a21-a2n⋮⋮⋮an1an1-ann]A=\begin{bmatrix} a_ ...

  2. 解线性方程组的python实现(2)——矩阵三角分解法

    解线性方程组的python实现2--矩阵三角分解法 1. 矩阵三角分解法 实现代码 2. LU分解 2.1 基本步骤 2.2 LU分解的计算公式 2.3 LU分解的结果表示 实现代码 3. 选主元的L ...

  3. 矩阵三角分解matlab,4矩阵三角分解法.ppt

    * 一.直接法概述 直接法是将原方程组化为一个或若干个三角形 方程组的方法,共有若干种. 对于线性方程组 其中 系数矩阵 未知量向量 常数项 根据Cramer(克莱姆)法则,若 determinant ...

  4. 2.3 数值分析: 矩阵三角分解法

    本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到 ...

  5. 广义逆矩阵A+:行列满秩法和奇异值分解法

    奇异值的物理意义是什么? 广义逆矩阵A+ SVD-矩阵奇异值分解 -- 原理与几何意义 SVD(奇异值分解)小结 超定方程 最小二乘解 奇异值分解(SVD) A=[1,0;0,1;1,0;0,1;1, ...

  6. Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)

    1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...

  7. Matlab实现 LU分解法解线性方程组(全选主元列选主元)

    选主元LU分解 实验内容:列选主元LU分解和全选主元LU分解求解线性方程组 计算方法: 全选主元消元法 1.1 初始化 根据参数A.b,记录下矩阵.右端项的尺寸n: 以得到的尺寸n初始化解向量x: 同 ...

  8. doolittle分解matlab,如何理解选主元的Doolittle分解法

    书中讲解不是很详细,理解之后总结一下 首先说一下,之所以要理解选主元的Doolittle分解是因为书中对于该分解过程的讲解比较违和.本文的目的是为了说明:选主元的Doolittle分解法分解得到的LU ...

  9. 解线性方程组的直接方法:LU分解法及其C语言算法实现

    在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...

最新文章

  1. [Android]ListView性能优化之视图缓存
  2. 2017 必备的八款最佳反勒索软件工具
  3. android nfcDemo
  4. php excel cpu高,phpexcel读文件的时候cpu99%
  5. python tuple类型,Python基础数据类型(四) tuple元祖
  6. php mysql crud demo_基于php和mysql的简单的dao类实现crud操作功能_PHP教程
  7. idea输入法候选区不跟随光标
  8. Keras实现LeNet-5网络,与可视化网络
  9. python 第3天
  10. 10.Java面向对象(一)
  11. 第三季-第21课-多线程同步
  12. axure图表元件mac_原型设计元件库-一库(Axure完善的原型设计元件库)- MacV
  13. 神器 Wineskin 基础教程
  14. GlobalMapper 脚本应用(持续更新)
  15. http server response 一览
  16. Redis集群之脑裂:一次奇怪的数据丢失
  17. 基于强化学习工具箱的自适应巡航控制系统
  18. 《众妙之门——自由网站设计师成功之道》一1.5 客户服务的重要性
  19. android ndk如何安装,android NDK安装
  20. 如何使用N1盒子实现自动撸豆

热门文章

  1. 【心慈喜讯】“心”启航青少年心理健康支持项目成功入选广州市海珠区“慈泉杯”社会组织公益创投活动
  2. ide模式ahci模式_IDE的完整形式是什么?
  3. 湖南大学大学计算机基础教程,湖南大学计算机基础试题题库及答案(26页)-原创力文档...
  4. Linux 文件内容查看
  5. Java基础篇——选择结构
  6. java-01背包(动态规划)
  7. 影响照片锐度的7个要素
  8. omap3530支持gpu模块
  9. 28 诊断偏差和方差:学习曲线 (28 Diagnosing bias and variance_ Learning curves)
  10. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)