列主元高斯消去法和列主元三角分解法解线性方程
- 格式:docx
- 大小:247.10 KB
- 文档页数:9
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。
用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
然后换行使之变到主元位子上,在进行消元计算。
设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。
目录摘要....................................................................................... 错误!未定义书签。
第1章绪论 ......................................................................... 错误!未定义书签。
第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)c231730658" 2.1.1高斯消元法的消元过程 (2)c231730658" 2.1.2高斯消元法的回带过程 (3)c231730658" 2.1.3高斯消元法的复杂度分析 (4)c231730658" 2.2列主高斯消元法原理简介 (5)c231730658" 2.2.1列主高斯消元法的消元过程 (6)c231730658" 2.2.2列主高斯消元法的回带过程 (6)c231730658" 2.2.3列主高斯消元法的算法描述 (6)c231730662"第3章高斯消元法的物理应用 (9)3.1c231730663"电网模型的描述 (9)c231730658" 3.2电网模型的问题分析 (9)c231730658"3.3求解计算 (11)c231730693"参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
矩阵化简的方法技巧
矩阵化简是一种常见的数学操作,用于简化矩阵的表示和计算。
下面介绍几种常用的矩阵化简方法技巧:
高斯消元法
高斯消元法是一种基本的矩阵化简方法,适用于解线性方程组
和计算矩阵的逆等。
其步骤如下:
1. 使用初等行变换,将矩阵转化为上三角矩阵。
2. 使用回代法,求解上三角矩阵对应的线性方程组。
列主元高斯消元法
列主元高斯消元法是对高斯消元法的改进,能够提高矩阵化简
的准确性。
其步骤如下:
1. 在每一列中选择绝对值最大的元素作为主元。
2. 使用初等行变换,将矩阵转化为上三角矩阵。
3. 使用回代法,求解上三角矩阵对应的线性方程组。
LU分解法
LU分解法是一种将矩阵分解为下三角矩阵和上三角矩阵的方法,可以简化矩阵计算。
其步骤如下:
1. 使用初等行变换,将矩阵化为上三角矩阵。
2. 将上三角矩阵中的主元移到对角线上得到上三角矩阵U。
3. 将初等行变换的逆操作应用到单位矩阵得到下三角矩阵L。
特征值分解法
特征值分解是一种将矩阵分解为特征值和特征向量的方法,可以简化矩阵计算和求解线性方程组。
其步骤如下:
1. 求解矩阵的特征值。
2. 求解每个特征值对应的特征向量。
3. 组成特征值矩阵和特征向量矩阵。
以上是矩阵化简的几种常用方法技巧,根据不同的需求和实际情况,可以选择合适的方法来进行矩阵化简操作。
列主元三角分解法例题解析列主元三角分解法是一种用于求解线性方程组的方法。
它将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U,使得A=LU。
在该分解过程中,每一步选取一个列主元,确保主元所在的列进行了交换,以避免出现除以零的情况。
接下来,我将通过一个例题来详细解析列主元三角分解法的具体步骤和计算过程。
假设有如下线性方程组:2x1+3x2-x3=94x1+4x2-3x3=12x1-x2+6x3=12首先,将方程组转化为矩阵形式:Ax=b。
A=[[2,3,-1],[4,4,-3],[2,-1,6]]b=[9,1,12]接下来,我们开始进行列主元三角分解的计算过程。
第一步:选取第一列的主元,并确保主元所在的行是当前列中绝对值最大的。
在第一列中,主元为4。
由于4所在的行已经是绝对值最大的行,因此不需要进行行交换。
第二步:通过高斯消元法,将主元所在列下方的元素消为零。
将第二行乘以2并减去第一行的两倍,得到新的第二行:[0,-2,1]将第三行乘以1并减去第一行的一倍,得到新的第三行:[0,-4,7]更新后的矩阵A为:[[2,3,-1],[0,-2,1],[0,-4,7]]第三步:重复上述过程,选取第二列的主元,并确保主元所在的行是当前列中绝对值最大的。
在第二列中,主元为-4。
由于-4所在的行已经是绝对值最大的行,因此不需要进行行交换。
第四步:通过高斯消元法,将主元所在列下方的元素消为零。
将第三行乘以2并加上第二行的两倍,得到新的第三行:[0,0,15]更新后的矩阵A为:[[2,3,-1],[0,-2,1],[0,0,15]]现在,我们已经得到了分解后的矩阵U:U=[[2,3,-1],[0,-2,1],[0,0,15]]接下来,我们需要求解下三角矩阵L。
L的主对角线元素都为1,而且L的非零元素是通过进行消元操作得到的。
根据之前的计算过程,可以得到L的非零元素:l21=2/4=0.5l31=2/2=1l32=4/2=2因此,L的形式为:L=[[1,0,0],[0.5,1,0],[1,2,1]]最后,我们可以将原始方程组写成LUx=b的形式,并求解出x的值。
多元变量的方程组求解在许多实际问题中,常常需要求解由多个变量组成的方程组。
这些方程组一般无法用简单的代数方法求解,需要借助计算机等工具进行求解。
本文将介绍一些常见的多元变量方程组的求解方法。
一、高斯-约旦消元法高斯-约旦消元法是求解线性方程组的一种常见方法,其基本思想是通过多次消元,使方程组限制的范围不断缩小,最终求得方程组的解。
具体步骤如下:1.将方程组写成增广矩阵的形式;2.选定一个系数矩阵的元素作为主元,通常选择第一行第一列元素,即A[1][1];3.对于其他行的该列元素,减去主元所在行对应元素的倍数,使其变为0;4.重复2-3步骤,直到将矩阵化为上三角矩阵;5.从最后一行开始,依次计算出未知变量的值。
高斯-约旦消元法的复杂度为O(n^3),当方程组的规模较大时,求解速度会非常慢。
二、雅可比迭代法雅可比迭代法是通过迭代求解变量的值,直到收敛于方程组的解的方法,其基本思想是将方程组的每个变量下一次迭代时的值,视为其它变量的当前值,通过逐步迭代,求解出未知变量的值。
具体步骤如下:1.将方程组表示为矩阵形式:Ax=b;2.选择一个初值向量x0,设x^(k)为第k次迭代的结果;3.根据迭代公式x_i^(k+1)=[b_i-(sum(A_ij*x_j^(k)))/(A_ii)]/A_ii,计算x^(k+1),其中i表示第i个未知变量,j表示其它未知变量;4.重复3步骤,直到收敛于方程组的解。
雅可比迭代法适用于系数矩阵为对角占优矩阵的情况,当矩阵的条件数较大时,迭代次数可能会非常多,计算速度较慢。
三、列主元高斯消元法列主元高斯消元法是对高斯-约旦消元法的改进,其主要思想是在每次消元时,选择系数矩阵中绝对值最大的元素作为主元,以此来避免出现数值精度过低等问题。
具体步骤如下:1.将方程组写成增广矩阵的形式;2.选定一个未知数作为主元,使得该列元素的绝对值最大;3.将该列中主元所在行交换到最上面;4.对于其他行的该列元素,减去主元所在行对应元素的倍数,使其变为0;5.重复2-3-4步骤,直到将矩阵化为上三角矩阵;6.从最后一行开始,依次计算出未知变量的值。
Guass列选主元消去法和三⾓分解法 最近数值计算学了Guass列主消元法和三⾓分解法解线性⽅程组,具体原理如下:1、Guass列选主元消去法对于AX =B1)、消元过程:将(A|B)进⾏变换为,其中是上三⾓矩阵。
即:k从1到n-1a、列选主元选取第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();boBox1.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 (boBox1.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 (boBox1.Text == "Doolittle三⾓分解法"){this.textBox3.Enabled = true;Doolittle(a, this.textBox2.Lines.GetUpperBound(0) + 1);bel3.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;}}} 运⾏截图: ⾄此完毕。
线性代数求解方法和技巧线性代数是数学中重要的一个分支,研究向量空间、线性变换和线性方程组等内容。
在实际问题中,我们常常需要用线性代数的方法来解决问题,因此掌握线性代数的求解方法和技巧对于理解和应用数学是非常重要的。
首先,我们讨论线性方程组的求解方法。
线性方程组是由一组线性方程组成的方程组,其中每个方程的未知数的次数都为1。
对于n个未知数和m个方程的线性方程组,我们有以下几种常用的求解方法:1. 列主元消元法:这是最常用的线性方程组求解方法之一。
它的基本思想是通过行变换将线性方程组化为一个三角形式,进而求解得到方程组的解。
在进行行变换时,要选择合适的列主元,即选择主元元素绝对值最大的一列作为主元素。
2. 矩阵求逆法:对于一个可逆的n阶方阵A,我们可以通过求A的逆矩阵来求解线性方程组Ax=b。
具体地,我们首先通过高斯消元法将方程组化为三角形式,然后根据三角形式的矩阵求逆公式来求解x。
3. LU分解法:对于一个n阶非奇异矩阵A,我们可以将其分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。
接着,我们可以通过LU分解来求解线性方程组Ax=b。
具体地,我们首先通过LU分解将方程组化为Lc=b和Ux=c两个方程组,然后依次求解这两个方程组得到x的值。
除了以上的求解方法,还有一些线性方程组的特殊情况和对应的求解方法:1. 齐次线性方程组:如果线性方程组右边的常数项都为0,即b=0,那么我们称为齐次线性方程组。
对于齐次线性方程组,其解空间是一个向量空间。
我们可以通过高斯消元法来求解齐次线性方程组,先将其化为三角形式,然后确定自由未知量的个数,最后确定解空间的基底。
2. 奇异线性方程组:如果线性方程组的系数矩阵A是奇异矩阵,即det(A)=0,那么我们称为奇异线性方程组。
对于奇异线性方程组,其解可能不存在,或者存在无穷多解。
我们可以通过计算矩阵A的秩来确定线性方程组的解的情况。
另外,在实际问题中,我们可能会遇到大规模的线性方程组,这时候求解方法和技巧还需要考虑到计算效率的问题。
用列主元消去法解线性方程组
列主元消去法是一种解决线性方程组的有效方法,它可以有效地解决多元一次
方程组的求解问题。
列主元消去法是一种基于矩阵分解的算法,它将线性方程组转换为一系列的三
角形矩阵,从而解决线性方程组的求解问题。
它的基本思想是,首先将矩阵A分解为两个矩阵,即列主元矩阵P和三角矩阵U,然后将原方程组PA=LU转换为LUx=Pb,其中Pb是P矩阵乘以b向量的结果,最后求解LUx=Pb即可得到x向量,从而解决线性方程组的求解问题。
列主元消去法的优点在于它可以有效地解决多元一次方程组的求解问题,而且
它的计算量较小,可以在较短的时间内完成求解。
此外,它还可以有效地处理矩阵的奇异性,即当矩阵A的行列式为零时,它仍然可以有效地求解线性方程组。
列主元消去法在互联网领域的应用也很广泛,它可以用于解决复杂的数据挖掘
问题,如推荐系统、搜索引擎等,这些问题都可以用列主元消去法来解决。
此外,它还可以用于解决机器学习中的优化问题,如支持向量机、神经网络等,这些问题也可以用列主元消去法来解决。
总之,列主元消去法是一种有效的解决线性方程组的方法,它可以有效地解决
多元一次方程组的求解问题,而且它的计算量较小,可以在较短的时间内完成求解。
此外,它在互联网领域的应用也很广泛,可以用于解决复杂的数据挖掘问题和机器学习中的优化问题。
实验报告实验三 高斯消去法与矩阵的三角分解一、实验目的1、掌握列主元素消去法,并且能够用MATLAB 编写相关程序,实现高斯消去法的求解。
2、能够用矩阵理论理解与研究高斯消去法,通过对矩阵的初等变换实现高斯消去法。
3、学会矩阵的三角分解,并且能够用MATLAB 编写相关程序,实现矩阵的三角分解,解方程组。
二、上机内容⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2822171310871234567112345611123451111234111112311111121111111764321x x x x x x1、用列主元素高斯消去法求解方程组。
2、用列主元消去法求解方程组(实现PA=LU) 要求输出: (1)计算解X;(2)L,U;(3)正整型数组IP(i),(i=1,···,n) (记录主行信息)。
三、实验原理1、列主元素消去法用高斯消去法求解方程组时,为了减小误差,在消去的过程中要避免用绝对值较小的主元素。
因此在高斯消去法的每一步应该在系数矩阵货消去后的低阶矩阵中选取绝对值较大的元素作为主元素,保持|m ik |<=1,以减小计算过程中的舍入误差对计算解的影响。
此方法为完全主元素消去法。
完全主元素消去法在选主元素时花费一定的计算机时间,因此实际计算中常用列主元消去法。
列主元消去法在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。
装订 线第k步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定t使(2)如果t≠k,则交换[A,b]第t行与第k行元素。
(3)消元计算(4)回代求解计算流程图回代求解 b=b/a (当a nn ≠0)b ←(b -∑a x )/adet=a nn *det输出计算解及行列式及detk=1,2,…,n-1输入n ,A,b,εdet=1按列主元|a i(k),k |=max|a ik |C 0=a i(k),k换行 a ik a i(k)j(j=k,…n ) b k b j(k), 消元计算 (i=k+1,…,n ) a ik=a ik -a kk *m ik a ij=a ij -a kj *m ik (j=k+1,…,n )|C 0|<εi k =kdet=a kk det否否是是k<=n-1输出det(A)=0停机停机2. 矩阵的三角分解法 (1)定理设 n n R A ⨯∈ 。
计算方法实验报告1【课题名称】用列主元高斯消去法和列主元三角分解法解线性方程【目的和意义】高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。
用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为32(1)(1)(21)(1)(1)262233n n n n n n n n n n nMD n ----+=+++=+-,加减运算步骤为(1)(21)(1)(1)(1)(25)6226n n n n n n n n n n AS -----+=++=。
相比之下,传统的克莱姆法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19510⨯次乘法,而用高斯消去法只需要3060次乘除法。
在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。
2、列主元三角分解法高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。
回带过程就是求解上三角方程组Ux=y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法 采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度【计算公式】1、 列主元高斯消去法设有线性方程组Ax=b ,其中设A 为非奇异矩阵。
方程组的增广矩阵为第1步(k=1):首先在A 的第一列中选取绝对值最大的元素1l a ,作为第一步的主元素:111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦a b然后交换(A ,b )的第1行与第l 行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 A(k)x=b(k)第k 步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定t 使 (2)如果t ≠k ,则交换[A ,b]第t 行与第k 行元素。
(3)消元计算消元乘数mik 满足:(4)回代求解2、 列主元三角分解法 对方程组的增广矩阵 经过k-1步分解后,可变成如下形式:111max 0l i i n a a ≤≤=≠(1)(1)(1)(1)(1)1112111(2)(2)(2)(2)22222()(()1)()()()()()1,1()(,)()[,][,] k k k k nk k nk n k k k k k kk kn k k k k n k k k n nn a a a a b a a a b a a b a b b a a a +++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥→=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦A b A b ()()max 0k k tk ik k i na a ≤≤=≠,(1,,)ik ik ik kka a m i k n a ←=-=+, (,1,,), (1,,)ij ij ik kji i ik k a a m a i j k n b b m b i k n ←+=+⎧⎨←+=+⎩⎪⎪⎩⎪⎪⎨⎧--=-←←∑+=)1,,2,1(,)(1n n i a x a b x a b x ii n i j j ij i i nnn n [,]A A b =11121,11111222,122221,11,1,1,211,11,2121,112,112,1k k k k k k k j n k k j n k k k i i i k n n kk kj kn k ik ij in i nknjk k k j k n n nnk k n a a a b A a u u u u u u y l l l l l l ll l l l u u u u u y u u u u y a a b a a b l a -------------⎡→⎣⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎦第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kkm u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mk m s a l u i k k n -==-=+∑,于是有kk u =ks 。
如果 ,则将矩阵的第t 行与第k 行元素互换,将(i ,j )位置的新元素仍记为jjl 或jja ,然后再做第k 步分解,这时【列主元高斯消去法程序流程图】max t i k i ns s ≤≤= ()/ 1,2,,)1 (1,2,,),kk k k t iki k ik u s s s l s s i k k n l i k k n ===++≤=++即交换前的,(且【列主元高斯消去法Matlab主程序】function x=gauss1(A,b,c) %列主元法高斯消去法解线性方程Ax=bif (length(A)~=length(b)) %判断输入的方程组是否有误disp('输入方程有误!')return;enddisp('原方程为AX=b:') %显示方程组Abdisp('------------------------')n=length(A);for k=1:n-1 %找列主元[p,q]=max(abs(A(k:n,k))); %找出第k列中的最大值,其下标为[p,q] q=q+k-1; %q在A(k:n,k)中的行号转换为在A中的行号if abs(p)<cdisp('列元素太小,det(A)≈0');break;elseif q>ktemp1=A(k,:); %列主元所在行不是当前行,将当前行与列主A(k,:)=A(q,:); 元所在行交换(包括b)A(q,:)=temp1;temp2=b(k,:);b(k,:)=b(q,:);b(q,:)=temp2;end%消元for i=k+1:nm(i,k)=A(i,k)/A(k,k); %A(k,k)将A(i,k)消为0所乘系数A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n); %第i行消元处理b(i)=b(i)-m(i,k)*b(k); %b消元处理endenddisp('消元后所得到的上三角阵是')A %显示消元后的系数矩阵b(n)=b(n)/A(n,n); %回代求解for i=n-1:-1:1b(i)=(b(i)-sum(A(i,i+1:n)*b(i+1:n)))/A(i,i);endclear x;disp('AX=b的解x是') x=b;【调用函数解题】【列主元三角分解法Matlab主程序】clear;augm=input('Please input the augumental matric:');[n,t]=size(augm);for i=1:n %d控制列三角主元的层数b=augm(i,:);p=i; %4到10行是选列主元并交换for w=i+1:nif b(1,1)<=augm(w,i)b=augm(w,:);p=w;endendc=augm(i,:); augm(i,:)=b;augm(p,:)=c;if p~=i %只有发生了换行才将这种效果输出augm,endfor j=i:t %首先变换与augm(i,i)同一行的元素,其列指标从i到t s=0;for k=1:i-1s=s+augm(i,k)*augm(k,j);endaugm(i,j)=(augm(i,j)-s);endfor I=i+1:n%再变换与augm(i,i)同一列的元素,其行指标I从i+1到n,列数为i s=0;for k=1:i-1 %下三角部分列数与第i层一致s=s+augm(I,k)*augm(k,i);endaugm(I,i)=(augm(I,i)-s)/augm(i,i);endaugm,endx(n)=augm(n,t)/augm(n,n); %回代for i=n-1:-1:1s=0;for j=n:-1:i+1s=s+x(j)*augm(i,j);endx(i)=(augm(i,t)-s)/augm(i,i),end【调用函数解题】输入[A b]可以清晰地看到augm(A)的变化过程:结果输出:【列主元三角分解法程序流程图】【编程疑难】这是第一次用matlab编程,对matlab的语句还不是非常熟悉,因此在编程过程中,出现了许多错误提示。
并且此次编程的两种方法对矩阵的运算也比较复杂。
问题主要集中在循环控制中,循环次数多了一次或者缺少了一次,导致数据错误,一些基本的编程语句在语法上也会由于生疏而产生许多问题,但是语句的错误由于系统会提示,比较容易进行修改,数据计算过程中的一些逻辑错误,比如循环变量的控制,这些系统不会提示错误,需要我们细心去发现错误,不断修正,调试。