Guass列选主元消去法和三角分解法
最近数值计算学了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.矩阵三角分解原理 设AAA为非奇异矩阵,且有分解式A=LU,A=LU,A=LU, A=[a11a12-a1na21a21-a2n⋮⋮⋮an1an1-ann]A=\begin{bmatrix} a_ ...
- 解线性方程组的python实现(2)——矩阵三角分解法
解线性方程组的python实现2--矩阵三角分解法 1. 矩阵三角分解法 实现代码 2. LU分解 2.1 基本步骤 2.2 LU分解的计算公式 2.3 LU分解的结果表示 实现代码 3. 选主元的L ...
- 矩阵三角分解matlab,4矩阵三角分解法.ppt
* 一.直接法概述 直接法是将原方程组化为一个或若干个三角形 方程组的方法,共有若干种. 对于线性方程组 其中 系数矩阵 未知量向量 常数项 根据Cramer(克莱姆)法则,若 determinant ...
- 2.3 数值分析: 矩阵三角分解法
本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到 ...
- 广义逆矩阵A+:行列满秩法和奇异值分解法
奇异值的物理意义是什么? 广义逆矩阵A+ SVD-矩阵奇异值分解 -- 原理与几何意义 SVD(奇异值分解)小结 超定方程 最小二乘解 奇异值分解(SVD) A=[1,0;0,1;1,0;0,1;1, ...
- Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)
1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...
- Matlab实现 LU分解法解线性方程组(全选主元列选主元)
选主元LU分解 实验内容:列选主元LU分解和全选主元LU分解求解线性方程组 计算方法: 全选主元消元法 1.1 初始化 根据参数A.b,记录下矩阵.右端项的尺寸n: 以得到的尺寸n初始化解向量x: 同 ...
- doolittle分解matlab,如何理解选主元的Doolittle分解法
书中讲解不是很详细,理解之后总结一下 首先说一下,之所以要理解选主元的Doolittle分解是因为书中对于该分解过程的讲解比较违和.本文的目的是为了说明:选主元的Doolittle分解法分解得到的LU ...
- 解线性方程组的直接方法:LU分解法及其C语言算法实现
在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...
最新文章
- [Android]ListView性能优化之视图缓存
- 2017 必备的八款最佳反勒索软件工具
- android nfcDemo
- php excel cpu高,phpexcel读文件的时候cpu99%
- python tuple类型,Python基础数据类型(四) tuple元祖
- php mysql crud demo_基于php和mysql的简单的dao类实现crud操作功能_PHP教程
- idea输入法候选区不跟随光标
- Keras实现LeNet-5网络,与可视化网络
- python 第3天
- 10.Java面向对象(一)
- 第三季-第21课-多线程同步
- axure图表元件mac_原型设计元件库-一库(Axure完善的原型设计元件库)- MacV
- 神器 Wineskin 基础教程
- GlobalMapper 脚本应用(持续更新)
- http server response 一览
- Redis集群之脑裂:一次奇怪的数据丢失
- 基于强化学习工具箱的自适应巡航控制系统
- 《众妙之门——自由网站设计师成功之道》一1.5 客户服务的重要性
- android ndk如何安装,android NDK安装
- 如何使用N1盒子实现自动撸豆
热门文章
- 【心慈喜讯】“心”启航青少年心理健康支持项目成功入选广州市海珠区“慈泉杯”社会组织公益创投活动
- ide模式ahci模式_IDE的完整形式是什么?
- 湖南大学大学计算机基础教程,湖南大学计算机基础试题题库及答案(26页)-原创力文档...
- Linux 文件内容查看
- Java基础篇——选择结构
- java-01背包(动态规划)
- 影响照片锐度的7个要素
- omap3530支持gpu模块
- 28 诊断偏差和方差:学习曲线 (28 Diagnosing bias and variance_ Learning curves)
- 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)