列主元消去法
列主元消去法解方程组实验报告
实验名称:列主元消去法解方程组1 引言我们知道,高斯消去法是一个古老的解线性方程组的方法。
而在用高斯消去法解Ax=b时,其中设A为非奇异矩阵,可能出现的情况,这时必须进行带行交换的高斯消去法。
但在实际计算中即使但其绝对值很小时,用作除数,会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。
因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。
为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数,以便减少计算过程中舍入误差对计算解的影响。
一种方式是完全主元消去法,这种消去法是在每次选主元时,选择为主元素。
这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。
实际计算中我们常采用部分选主元的的消去法。
列主元消去法即在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。
2 实验目的和要求运用matlab编写一个.m文件,要求用列主元消去法求解方程组(实现PA=LU):要求输出以下内容:(1)计算解x;(2) L,U;(3)整形数组IP(i)(i=1,2,…,n-1)(记录主行信息)3 算法原理与流程图(1)算法原理设有线性方程组Ax=b,其中设A为非奇异矩阵。
方程组的增广矩阵为第1步(k=1):首先在A的第一列中选取绝对值最大的元素,作为第一步的主元素:,然后交换(A,b)的第1行与第i1行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组第k步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定ik使(2)如果,则A为非奇异矩阵,停止计算。
(3)如果ik≠k,则交换[A,b]第ik行与第k行元素。
(4)消元计算消元乘数满足:(5)回代求解计算解在常数项b(n)内得到。
列主元高斯消去法例题
列主元高斯消去法例题
高斯列主元消去法是一种常用的线性方程组求解方法,它通过利用矩阵的列主元部分进行消元,从而得到线性方程组的解向量。
下面是一个例题:
给定以下线性方程组:
```
2x + 3y + z = 7
4x - 5y - 2z = 3
x + 3y - 2z = 2
```
使用高斯列主元消去法求解,首先我们需要将系数矩阵 A 表示为列主元矩阵的形式:
```
2 3 1 | 7
4 -
5 2 | 3
1 3 -
2 | 2
```
然后,我们可以使用消元法逐步将系数矩阵 A 化为上三角矩阵: ```
2 3 1 | 7
0 0 1 | -1
0 0 0 | 0
1 3 -
2 | 2
```
最后,我们利用得到的上三角矩阵求解线性方程组的解向量: ```
x = (-3*7 + 4*2 - 1*2) * 1/2 = -1
y = (2*7 - 3*2 + 1*2) * 1/2 = 1
z = (2*7 - 4*2 - 1*2) * 1/2 = -3
```
因此,线性方程组的解向量为:x = -1, y = 1, z = -3。
高斯列主元消去法的优点在于其稳定可靠,能够快速求解线性方程组的解向量,尤其是对于大型线性方程组,其计算效率更高。
同时,它也能够很好地处理线性方程组中的符号问题,使得求解过程更加稳定。
求逆矩阵的四种方法
求逆矩阵的四种方法逆矩阵是指一个矩阵与其逆矩阵相乘得到单位矩阵,也是线性代数中的重要概念之一。
但是,在实际应用中,需要对矩阵求逆的情况并不多,因为矩阵求逆的时间复杂度很高。
下面介绍四种求逆矩阵的方法:1. 初等变换法:采用列主元消去法(高斯-约旦消元法)进行初等变换,即将一个矩阵通过行变换,转化为一个行阶梯矩阵,其中行阶梯矩阵的左下方的元素均为零。
而这样一个变换后得到的矩阵实际上就是原矩阵的逆矩阵。
2. 伴随矩阵法:如果一个矩阵 A 可逆,则求它的逆矩阵等价于求它的伴随矩阵 AT 的结果除以 A 的行列式。
伴随矩阵的计算式为:adj(A)= COF(A)T,其中 COF(A) 为 A 的代数余子式组成的矩阵,它的每个元素满足 COF(A)ij = (-1)^(i+j) det(Aij),其中 det(Aij) 表示将第 i 行和第 j 列去掉后得到的子矩阵的行列式。
3. LU 分解法:LU 分解法是将矩阵分解为一个下三角矩阵 L 和一个上三角矩阵 U 的乘积,即 A = LU,其中 L 的对角线元素均为 1。
当矩阵 A 可逆时,可用 LU 分解求解其逆矩阵。
假设 L 和 U 都是方阵,则A 的逆矩阵为:A^(-1) = (LU)^(-1) = U^(-1)L^(-1)。
4. 奇异值分解(SVD)方法:当矩阵 A 是非方阵时可以采用奇异值分解法,将矩阵 A 分解为A = UΣV^T,其中 U 为一个m×m 的正交矩阵,V 为一个n×n 的正交矩阵,Σ 为一个m×n 的矩形对角矩阵,若r 是 A 的秩,则Σ左上角的 r 个元素不为 0,其余元素为 0,即Σ有 r 个非零奇异值。
当A 可逆时,Σ 中的非零元素都存在逆元,逆矩阵为:A^(-1) = VΣ^(-1)U^T。
综上所述,求逆矩阵的四种方法各有特点,应根据实际情况选择合适的方法进行求解。
初等变换法适合较小规模的矩阵,伴随矩阵法适用于计算代数余子式较容易的矩阵,LU 分解法适合较大规模的矩阵,而SVD 方法则适用于非方阵或奇异矩阵的情况。
线性方程组的解法教案
线性方程组的解法教案一、引言线性方程组是数学中常见的一个重要概念,解决线性方程组问题是解析几何、线性代数等学科的核心内容。
本文将介绍线性方程组的基本概念和解法,帮助读者更好地理解和应用线性方程组。
二、线性方程组的基本概念1. 定义:线性方程组由一组线性方程组成,每个方程中的未知数的最高次数都为1,且系数皆为实数或复数。
线性方程组可以表示为以下形式:a₁x₁ + a₂x₂ + ... + aₙxₙ = b₁a₁x₁ + a₂x₂ + ... + aₙxₙ = b₂...a₁x₁ + a₂x₂ + ... + aₙxₙ = bₙ其中,a₁、a₂、...、aₙ分别为系数,x₁、x₂、...、xₙ为未知数,b₁、b₂、...、bₙ为常数项。
2. 解的概念:对于线性方程组,找到一组使得所有方程都成立的值,即为其解。
如果线性方程组存在解,则称其为相容的;如果不存在解,则称其为不相容的。
三、线性方程组的解法1. 列主元消去法列主元消去法是解决线性方程组的常用方法之一。
具体步骤如下:(1) 将线性方程组化为增广矩阵形式,写成增广矩阵[A|B]的形式。
(2) 对增广矩阵进行初等行变换,化简成上三角形矩阵[U|C]的形式,即上面的元素都为0。
(3) 从最后一行开始,按列主元所在的列进行回代求解,得到每个未知数的值。
2. 矩阵的逆和逆的应用矩阵的逆是解决线性方程组的另一种有效方法。
具体步骤如下:(1) 将线性方程组化为矩阵形式,即AX = B。
(2) 若矩阵A可逆,即存在逆矩阵A⁻¹,则方程组的解可以表示为X = A⁻¹B。
3. 克拉默法则克拉默法则是解决线性方程组的另一种方法,适用于方程组的系数矩阵为方阵的情况。
具体步骤如下:(1) 将方程组的系数矩阵记为A,常数项矩阵记为B。
(2) 分别计算方程组系数矩阵的行列式D和将常数项矩阵替换为方程组系数矩阵第i列后的新矩阵Di的行列式Di,并计算比值di = Di / D。
Guass列选主元消去法和三角分解法
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;}}} 运⾏截图: ⾄此完毕。
列主元素消去法
列主元素消去法列主元素消去法(Gauss-Jordan 消元法)是一种线性代数中常用的消元方法,用于求解线性方程组的解。
这种方法的基本思想是,将线性方程组的增广矩阵通过一系列的初等变换,化为一个阶梯矩阵或行简化阶梯矩阵,从而得到线性方程组的解。
具体步骤如下:构造增广矩阵,即将系数矩阵和常数矩阵组合成一个矩阵。
将增广矩阵转化为一个上三角矩阵(也叫阶梯矩阵)。
反向消元,将阶梯矩阵转化为一个行简化阶梯矩阵。
根据简化矩阵求解方程组。
这种方法的优点是计算简单、容易理解,且可避免误差的积累。
但是,如果矩阵的规模较大,运算量会很大,计算时间较长。
此时可以使用更高效的算法,如LU分解、QR分解等。
假设有一个 $n$ 个未知量和 $n$ 个方程的线性方程组,可以写成矩阵形式如下:$Ax = b$其中,$A$ 是一个 $n \times n$ 的系数矩阵,$x$ 是一个 $n \times 1$ 的未知量向量,$b$ 是一个 $n \times 1$ 的常数向量。
为了求解 $x$,可以将方程组的增广矩阵表示如下:$\begin{bmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1n} & b_{1} \ a_{21} & a_{22} & a_{23} & \cdots & a_{2n} & b_{2} \ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \ a_{n1} & a_{n2} & a_{n3} & \cdots & a_{nn} & b_{n} \end{bmatrix}$ 其中,$a_{ij}$ 表示矩阵的第 $i$ 行第 $j$ 列的元素。
常见的线性代数求解方法
常见的线性代数求解方法
1.列主元消去法
列主元消去法是一种经典的求解线性方程组的方法。
它通过将
方程组转化为上三角矩阵的形式来求解。
这个方法的关键在于选取
主元的策略。
一种常见的选取主元的策略是选择当前列中绝对值最
大的元素作为主元,然后进行消去操作,直到将矩阵转化为上三角
矩阵。
2.高斯-约当消去法
高斯-约当消去法是另一种常见的线性方程组求解方法。
它通
过消去矩阵的下三角部分来将线性方程组转化为上三角矩阵的形式。
这个方法也需要选择主元,常见的选择策略是选取当前行中绝对值
最大的元素作为主元,然后进行消去操作。
3.LU分解法
LU分解法是将矩阵分解为一对矩阵的乘积的方法。
这个方法的思想是先将矩阵分解为一个下三角矩阵和一个上三角矩阵,然后通过求解上三角矩阵和下三角矩阵的两个方程组来求解原始的线性方程组。
4.Jacobi迭代法
Jacobi迭代法是一种迭代求解线性方程组的方法。
它通过将原始的线性方程组转化为一个对角矩阵和另一个矩阵的乘积的形式,然后通过迭代求解这个对角矩阵和另一个矩阵的方程组来逼近线性方程组的解。
5.Gauss-Seidel迭代法
Gauss-Seidel迭代法是另一种迭代求解线性方程组的方法。
它与Jacobi迭代法类似,但是在每一次迭代中,它使用前一次迭代得到的部分解来更新当前的解。
这个方法通常比Jacobi迭代法收敛得更快。
以上是一些常见的线性代数求解方法。
每种方法都有其特点和适用范围,我们可以根据具体情况选择合适的方法来求解线性方程组的问题。
2-2 Gauss列主元消去法
S2 若ann 0,则输出“ A是奇异矩阵”;停机 . S3 置xn an,n1 / ann ;
对i n 1, n 2,...1,
ai,n1 n aij x j
置xi
j i 1
aii
S4 输出x1, x2,..., xn ;停机.
作业:
P50 习题3
k in
aik
;
S12 若aik ,k 0,则输出“ A是奇异矩阵”;停机 .
S13 若ik k,则
akj aik , j j k,...,n 1;
S14 对i k 1,..., n
置aik aik / akk ; 对j k 1,..., n 1
置aij aij aik akj.
§2-2 Gauss列主元消去法
一、Gauss列主元消去法的引入 例1. 用3位浮点数运算,求解线性方程组
0.0001xx11
x2 x2
1 2
解: 本方程组的精度较高的解为
x* (1.00010001 ,0.99989999 )T
用Gauss消去法求解
A ( A,b)
0.000100 1
1 1
21
0.000100
m2110 000
0
回代后得到
1
1
1.00 104 1.00 104
x1 0.00 , x2 1.00
与精确解相比,该结果显然是错误的 究其原因,在求行乘数时用了很小的数0.0001作除数
如果在求解时将1,2行交换,即
A ( A,b)
1 0.000100
1 1
a(2) i2
,
交换第2行和第i2行,
2in
然后进行消元,得[ A(3) , b(3) ].
列主元素消去法
2012-2013(1)专业课程实践论文列主元素消去法范宁:0818180102,R数学08-1班夏之秋:0818180110,R数学08-1班一、算法理论列主元素消去法既是选主元高斯消去法的一种,也是实际计算中常用的部分选主元消去法。
列主元素消去法则是对完全主元素消去法的又一次改进。
列主元素消去法在完全主元素消去法的基础上减少了在选主元素时所要花费的一定的计算时间。
设有线性方程组b=Ax其中,A 为非奇异矩阵。
方程组的增广矩阵为⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=n nnn n k i n n b a a a a b a a a b a a a A212222211112111]b ,[ 首先在A 的第1列选取绝对值最大的元素作为主元素,即选择0max 111,1≠=≤≤i ni i a a然后交换A 的第1行与第1i 行(交换后增广矩阵为简单起见仍记为]b ,[A ,其元素仍记为i j i b a ,)。
经过第1次消元计算得到与原方程组等价的方程组(2))2(bx =A其中⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)2()2(2)1(1)2()2()2(2)2(2)2(22)1(1)1(12)1(11)2(b n nnn n nb b b a a a a a a a A, 上述过程可记为 ]2[)2()2(]b ,[]b ,[A A →重复上述计算过程,现假设已完成第1-k 步的选主元素过程,交换两行并进行消元计此时]b ,[A 约化为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=)()()()()()()2(2)2(2)2(22)1(1)1(1)1(12)1(11)()(]b ,[k n k nnk nkk k k knk kkn nk k b a a b aa b a a b a a a A其中)(k A 的元素仍记为j i a ,)(b k 的元素仍记为i b .第k 步选主元素(在)(k A 右下角方阵的第1列内选),即确定k i ,使0max ,≠=≤≤ik ni k k i a a k交换]b ,[)()(k K A 第k 行与)1,,2,1(-=n k i k 行的元素,再进行消元计算,最后将原线性方程组化为⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡n n nn nn b b b x x x a a a a a a212122211211回代可求解得 ⎪⎩⎪⎨⎧-=-==∑+=)1,2,,1(/)(/1 n i a x a b x a b x ii ni j j ij i inn n n二、算法框图开始输出奇异标志结束输入A (增广矩阵)()k i a a ik rk >=max 1=k?0=rk a交换A 中k r ,两行1,,1,,1++=+=⨯-=n k j n k i a a a a a kk kj ik ij ij?1-<n k()1,2,,1,,,2,11, -=++=⨯-=∑+n n k n k k j a x aa x kkj kjn k k1=k输出迭代失败标志三、算法程序#include <stdio.h>#include<conio.h>#include <math.h>#include <stdlib.h>#define max_dimension 20int n;static float a[max_dimension][max_dimension]; static float b[max_dimension];static float x[max_dimension];void main(){int i;int j;int d;int row;float temp;float known_items;float l[max_dimension][max_dimension];system("cls");printf("Please Input Matrix jieshu :");scanf("%d",&n);printf("\n");printf("Please Input Matrix Factors : ");printf("\n");for (i=0; i<n; i++){printf("input di %d hang dezhi:",i+1);for (j=0; j<n; j++){scanf("%f",&a[i][j]);}printf("\n");}printf("Please Input Changshu xiang: ");for (i=0; i<n; i++)scanf("%f",&b[i]);printf("The Augmented(zenguang) Matrix is :\n\n"); for (i=0; i<n; i++)for (j=0; j<n; j++)printf("%f",a[i][j]);printf("%f",b[i]);printf("\n");}printf("\n");for (d=0; d<n-1;d++){row=d;for (i=d+1; i<n; i++){if(fabs(a[i][d])>fabs(a[row][d]))row=i;}if (row!=d){for (j=d;j<n; j++){temp=a[row][j];a[row][j]=a[d][j];a[d][j]=temp;}temp=b[row];b[row]=b[d];b[d]=temp;}for (i=d+1; i<n; i++){l[i][d]=-a[i][d]/a[d][d];for (j=d;j<n; j++){a[i][j]=a[i][j]+a[d][j]*l[i][d];}b[i]=b[i]+b[d]*l[i][d];}}for (i=0; i<n; i++){for (j=0; j<n; j++)printf("%f",a[i][j]);printf("%f",b[i]);printf("\n");}printf("\n");for (i=n-1; i>-1; i--){known_items=0;for (j=1; j<n-i; j++){known_items=known_items+a[i][i+j]*x[i+j];}x[i]=(b[i]-known_items)/a[i][i];}printf("The Root X is :\n\n");for (i=0; i<n; i++)printf("%.5f ",x[i]);printf("\n\n");getch();}四、算法实现例1. 求解方程组:⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x 用四位浮点数进行计算,精确解舍入到四位有效数字为()T x 3675.0,05104.0,4904.0*--=解:运行程序(1)显示 Please Input Matrix jieshu :输入的值为3,回车。
高斯列主元消去法例题
高斯列主元消去法例题高斯列主元消去法是解线性方程组的一种方法,也称为高斯-约旦(Gauss-Jordan)消去法。
它的基本思想是通过矩阵的初等行变换,将矩阵化为简化行阶梯形矩阵,然后根据系数矩阵的行列式是否等于0来求得唯一或无穷多解。
下面以一个例题来讲解高斯列主元消去法的步骤。
例题:解下列线性方程组x1 + 2x2 + 3x3 = 94x1 + 5x2 + 6x3 = 247x1 + 8x2 + 10x3 =40首先,将方程组表示为增广矩阵的形式:1 2 3 | 94 5 6 | 247 8 10| 40接下来,要使用高斯列主元消去法,将增广矩阵化为简化行阶梯形矩阵。
具体步骤如下:1.将第一列中的绝对值最大的元素移到第一行。
7 8 10| 404 5 6 | 241 2 3 | 92.用第一行的首元素消元。
7 8 10| 400 1 -2| 60 -6 -21| -273.将第二列中的绝对值最大的元素移到第二行。
7 8 10| 400 -6 -21| -270 1 -2| 64.用第二行的次元素消元。
7 8 10| 400 1 -2| 60 0 -9| 95.将第三列中的绝对值最大的元素移到第三行。
7 8 10| 400 1 -2| 60 0 -9| 96.用第三行的末元素消元。
7 8 10| 400 1 -2| 60 0 1 | -1现在,我们得到了一个简化行阶梯形矩阵,可以根据系数矩阵的行列式是否等于0来求得唯一或无穷多解。
我们发现,最后一行只有一个非零元素,因此,对应的未知数x3的系数不为0,可以直接利用倒推法求得方程组的解。
7.用第二行解出x2x2 - 2x3 = 6x2 = 2x3 + 68.用第一行解出x1x1 + 8x2 + 10x3 = 40x1 + 8(2x3 + 6) + 10x3 = 40x1 + 26x3 = 8综上所述,该线性方程组的解为:x1 = -26t + 8x2 = 2t + 6x3 = t其中,t为任意常数。
gauss列主元素消去法matlab
高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。
在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。
一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。
这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。
在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。
通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。
二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。
该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。
通过对U进行回代求解,我们可以得到线性方程组的解。
除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。
通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。
三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。
通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。
然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。
在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。
四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在Matlab 中具有较好的实现和应用效果。
通过对其原理和实现细节的深入理解,我们能够更加灵活地应用该方法,并且能够更好地理解其适用性和局限性。
高斯列主元消去法优缺点
高斯列主元消去法优缺点
高斯列主元消去法是解线性方程组的一种常用方法。
它的优点是
可以有效地求解大规模线性方程组,计算精度高,稳定性强,并且可
以通过程序自动化计算。
此外,高斯列主元消去法的求解过程简单明了,易于理解和掌握,对于初学者也比较友好。
不过,高斯列主元消去法也存在一些缺点。
首先,在解决某些具
有特殊形式的线性方程组时,可能需要进行额外的操作,如部分主元
消去、对角线支配等,导致计算难度和复杂度增加。
其次,高斯列主
元消去法在求解稀疏矩阵时,可能会出现计算复杂度较高的情况,甚
至无法求解。
此外,高斯列主元消去法还可能面临误差传播和舍入误差等问题,导致求解结果略有偏差。
综合考虑,高斯列主元消去法在解决一般的
线性方程组问题时,是一种可靠、实用的方法。
但在某些特殊情况下,可能需要选择其他更适合的方法来求解。
线性方程组的8种解法专题讲解
线性方程组的8种解法专题讲解线性方程组是数学中常见的问题之一,解决线性方程组可以帮助我们求出方程组的解,从而解决实际问题。
本文将介绍线性方程组的8种常见解法。
1. 列主元消去法列主元消去法是解决线性方程组的常用方法。
该方法通过将方程组转化为阶梯型矩阵,然后进行回代求解,得到方程组的解。
这一方法适用于任意维度的线性方程组。
2. 高斯消元法高斯消元法是解决线性方程组的经典方法之一。
该方法将方程组转化为阶梯型矩阵,并通过变换矩阵的方式使得主元为1,然后进行回代求解,得到方程组的解。
高斯消元法适用于任意维度的线性方程组。
3. 高斯-约当消元法高斯-约当消元法是对高斯消元法的改进。
该方法在高斯消元法的基础上,通过变换矩阵的方式使得主元为0,然后进行回代求解,得到方程组的解。
高斯-约当消元法适用于任意维度的线性方程组。
4. 矩阵分解法矩阵分解法是一种将线性方程组转化为矩阵分解形式,从而求解线性方程组的方法。
常见的矩阵分解方法有LU分解、QR分解等。
这些方法可以有效地降低求解线性方程组的计算复杂度。
5. 特征值分解法特征值分解法是一种将线性方程组转化为特征值和特征向量的形式,从而求解线性方程组的方法。
通过求解方程组的特征值和特征向量,可以得到方程组的解。
特征值分解法适用于具有特殊结构的线性方程组。
6. 奇异值分解法奇异值分解法是一种将线性方程组转化为奇异值分解形式,从而求解线性方程组的方法。
通过奇异值分解,可以得到方程组的解。
奇异值分解法适用于具有特殊结构的线性方程组。
7. 迭代法迭代法是一种通过逐步逼近方程组的解来求解线性方程组的方法。
常见的迭代法有雅可比迭代法、高斯-赛德尔迭代法等。
迭代法的优点是可以适应各种规模的线性方程组。
8. 数值求解法数值求解法是一种通过数值计算的方式来求解线性方程组的方法。
常见的数值求解法有牛顿法、梯度下降法等。
数值求解法可以处理复杂的线性方程组。
以上是线性方程组的8种常见解法。
(完整版)2.3高斯列主元消去法
2.3高斯列主元消去法解线性方程组一:问题的提出我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。
就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。
实际运算的时候因为只能有限小数去计算,因此只能得到近似值。
在实际运算的时候,我们很多时候也常用高斯消去法。
但是高斯消去法在计算机中运算的时候常会碰到两个问题。
1.一旦遇到某个主元等于0,消元过程便无法进行下去。
2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。
为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。
其中又可以分为列选主元和全面选主元两种方法。
目前计算机上常用的按列选主元的方法。
因此我在这里做的也是列选主元高斯消去法。
二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。
我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。
然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。
高斯消元法的目的就是把一般线性方程组简化成上三角方程组。
于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
三、算法的描述1、设有n 元线性方程组如下:1111n n nn a a a a ⎛⎫ ⎪ ⎪ ⎪⎝⎭K M OM L1n x x ⎛⎫ ⎪ ⎪ ⎪⎝⎭M =1n b b ⎛⎫ ⎪ ⎪ ⎪⎝⎭M 2、 第一步:如果a 11!=0, 令l i1= ai1/a11, I= 2,3,……,n用(-li1)乘第一个方程加到第i 个方程上,得同解方程组:a (1)11 a (1)12 . . . a (1)1nx 1 b (1)1a (1)21 a (1)22 . . . a (1)2n x 2b (1)2. . . . . . . = .a (1)n-11 a (1)n-12 . . a (1)n-1n x n-1b (1)n-1a (1)n1 a (1)n2 . . . a (1)nn x nb (1)n简记为:A (2) x = b (2)其中a (2)ij = a (1)ij – l i1 * a (1)1j , I ,j = 2,3,..,nb(2)I = b(1)I– l i1 * b(1)1 , I = 2,3,...,n第二步:如果a(2)22 != 0,令l i2= a(2)i2/a(2)22, I= 3,……,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组:a(1)11a(1)12 . . . a(1)1n x1b(1)10 a(1)22 . . . a(1)2n x2b(1)2. . . . . . . = .0 0 . . a(n-1)n-1n x n-1b(n-1)n-10 0 . . . a(n)nn x n b(n)n简记为:A(n) x = b(n)最后从方程组的最后一个方程进行回代求解为:X n = b(n) / a(n)nnX i = ( b(k)k - a(k)kj x j ) / a(k)kk以上为高斯消去法的基本过程。
列主元消去法和LU分解法(C语言)
(1)列主元素消去法求解线性方程:#include<iostream>#include<cmath>#define N 20using namespace std;void load();float a[N][N];int m;int main(){int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;load();for(i=0;i<m;i++){for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/for(n=0;n<m+1;n++){s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/ for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r];}}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/}cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t";//system("pause");return 0;}void load(){int i,j;for(i=0;i<m;i++)for(j=0;j<m+1;j++)cin>>a[i][j];}运行结果:下面请输入未知数的个数m=3请按顺序输入增广矩阵a:1 2 3 45 1 0 84 6 9 24 6 9 20 -6.5 -11.25 5.50 -1.86265e-008 -0.115385 3.92308该方程组的解为:x[0]=-9.99999 x[1]=58 x[2]=-34 Press any key to continue总结:列主元素消去法的目的是为了防止减去一个较小的数时大数淹没小数,而使结果产生较大误差,本程序关键在每次消元时找到相应列中的最大项,然后交换两行位置,在进行计算。
列主元消去法
列主元消去法列主元消去法是一种用于求解线性方程组的数学方法,它可以有效地解决矩阵解系统。
可以说,列主元消去法是一种比较有效的数学方法,广泛应用于工程,物理,化学,生物等领域。
列主元消去法的发展可以追溯到17世纪以前,例如,维京的数学家弗兰克斯泰因斯坦(FrankStephensen)在17世纪开发出了“斯泰因斯坦方法”,该方法是一种运用列主元消减法,用于解决三角形形式的线性方程组。
20世纪中期,德国数学家因弗卡(KonradInverska)把列主元消去法进一步发展,提出了“哈雷方程”,可以使用该方法来求解数量若干变量的组合方程,是一种灵活处理多元方程的有效方法。
此外,1950年,美国数学家哈拉德布鲁姆(HaraldBrum)提出了布鲁姆微分方程组的解法,该方法中融入了列主元消去法,它可以解决求解非线性系统的问题。
列主元消去法可以将多项式方程式以矩阵形式给出,利用消去法可以得到一组解,可以简化原有的复杂多项式方程组。
其具体操作步骤是:首先,将原有的方程组按需要的形式转换成矩阵形式,其次,找出主元并将其消去,然后消减其它非主元项,最后可以得到一组解。
此外,列主元消去法可以节省计算时间,计算简便,容易操作,特别适用于解决复杂的线性方程组问题。
这是因为消去法可以有效地利用矩阵的特性,确保更高的计算效率。
同时,列主元消去法也有一些缺点,其中最重要的是,可能会出现精度损失的问题。
当矩阵中的主元全部靠近0,且有高度相关时,可能会导致出现较大的计算误差。
另外,消去法求解多项式方程组时,受限于矩阵的大小,可能会出现较大的计算开销,因此可能不适合大规模的线性方程组的求解。
总的来说,列主元消去法是一种重要的数学方法,可以解决许多实际问题,但也有其自身的局限性,应当谨慎使用。
列主元素消去法
2012-2013(1)专业课程实践论文列主元素消去法范宁:0818180102,R数学08-1班夏之秋:0818180110,R数学08-1班一、算法理论列主元素消去法既是选主元高斯消去法的一种,也是实际计算中常用的部分选主元消去法。
列主元素消去法则是对完全主元素消去法的又一次改进。
列主元素消去法在完全主元素消去法的基础上减少了在选主元素时所要花费的一定的计算时间。
设有线性方程组b =Ax其中,A 为非奇异矩阵。
方程组的增广矩阵为⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=n nnn n k i n n b a a a a b a a a b a a a A ΛΛM M ΛM M M M M ΛMM ΛΛΛΛ212222211112111]b ,[ 首先在A 的第1列选取绝对值最大的元素作为主元素,即选择0max 111,1≠=≤≤i ni i a a然后交换A 的第1行与第1i 行(交换后增广矩阵为简单起见仍记为]b ,[A ,其元素仍记为i j i b a ,)。
经过第1次消元计算得到与原方程组等价的方程组(2))2(b x =A其中⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)2()2(2)1(1)2()2()2(2)2(2)2(22)1(1)1(12)1(11)2(b n nnn nn b b b a a a a a a a AM ΛΛMM MM ΛΛΛΛ, 上述过程可记为 ]2[)2()2(]b ,[]b ,[A A →重复上述计算过程,现假设已完成第1-k 步的选主元素过程,交换两行并进行消元计此时]b ,[A 约化为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=)()()()()()()2(2)2(2)2(22)1(1)1(1)1(12)1(11)()(]b ,[k n k nn k nk k k k kn k kk n nk k b a a b a a b a a b a a a A ΛM M M ΛM M M M O ΛΛΛΛ其中)(k A 的元素仍记为j i a ,)(b k 的元素仍记为i b .第k 步选主元素(在)(k A 右下角方阵的第1列内选),即确定k i ,使0max ,≠=≤≤ik ni k k i a a k交换]b ,[)()(k K A 第k 行与)1,,2,1(-=n k i k Λ行的元素,再进行消元计算,最后将原线性方程组化为⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡n n nn n n b b b x x x a a a a a a M M M OΛΛ212122211211回代可求解得 ⎪⎩⎪⎨⎧-=-==∑+=)1,2,,1(/)(/1Λn i a x a b x a b x iini j j ij i i nn n n二、算法框图三、算法程序#include <stdio.h>#include<conio.h>#include <math.h>#include <stdlib.h>#define max_dimension 20int n;static float a[max_dimension][max_dimension]; static float b[max_dimension];static float x[max_dimension];void main(){int i;int j;int d;int row;float temp;float known_items;float l[max_dimension][max_dimension]; system("cls");printf("Please Input Matrix jieshu :");scanf("%d",&n);printf("\n");printf("Please Input Matrix Factors : ");printf("\n");for (i=0; i<n; i++){printf("input di %d hang dezhi:",i+1);for (j=0; j<n; j++){scanf("%f",&a[i][j]);}printf("\n");}printf("Please Input Changshu xiang: ");for (i=0; i<n; i++)scanf("%f",&b[i]);printf("The Augmented(zenguang) Matrix is :\n\n"); for (i=0; i<n; i++){for (j=0; j<n; j++)printf("%f",a[i][j]);printf("%f",b[i]);printf("\n");}printf("\n");for (d=0; d<n-1;d++){row=d;for (i=d+1; i<n; i++){if(fabs(a[i][d])>fabs(a[row][d]))row=i;}if (row!=d){for (j=d;j<n; j++){temp=a[row][j];a[row][j]=a[d][j];a[d][j]=temp;}temp=b[row];b[row]=b[d];b[d]=temp;}for (i=d+1; i<n; i++){l[i][d]=-a[i][d]/a[d][d];for (j=d;j<n; j++){a[i][j]=a[i][j]+a[d][j]*l[i][d];}b[i]=b[i]+b[d]*l[i][d];}}printf("The shangsanjiaozenguang Matrix after predigestion is:\n\n"); for (i=0; i<n; i++){for (j=0; j<n; j++)printf("%f",a[i][j]);printf("%f",b[i]);printf("\n");}printf("\n");for (i=n-1; i>-1; i--){known_items=0;for (j=1; j<n-i; j++){known_items=known_items+a[i][i+j]*x[i+j];}x[i]=(b[i]-known_items)/a[i][i];}printf("The Root X is :\n\n");for (i=0; i<n; i++)printf("%.5f ",x[i]);printf("\n\n");getch();}四、算法实现例1. 求解方程组:⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x 用四位浮点数进行计算,精确解舍入到四位有效数字为()Tx 3675.0,05104.0,4904.0*--=解:运行程序(1)显示 Please Input Matrix jieshu :输入的值为3,回车。
列主元消去法
实验报告课程名称:___计算方法_________________指导老师:________________成绩:__________________ 实验名称:___列主元消去法________实验类型:________________同组学生姓名:__________ 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得一、问题描述对于一般的线性方程组,只要把方程组化成了等价的三角形方程组,求解过程就很容易完成,Gauss 消去法就是将一般的线性方程组等价地变换为一个上三角方程组,然后用回代法求解。
但是如果在消元过程中,发现某个约化主元a kk (k )=0,则第k 次消元就无法进行。
此外,即使所有约化主元全不为零,虽然可以完成方程组的求解,但是小主元的存在使计算结果误差较大。
因此,为了减少计算过程中舍入误差对解的影响,在每次消元前,应选择绝对值尽可能大的元作为约化的主元。
我们称这种消元法为主元消元法。
如果在子块的第一列中选取主元,则相应的方法称为列主元消元法。
二、相关公式设有线性方程组b =Ax其中,A 为非奇异矩阵。
方程组的增广矩阵为⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=n nnn n k i n n b a a a a b a a a b a a a A212222211112111]b ,[ 首先在A 的第1列选取绝对值最大的元素作为主元素,即选择0max 111,1≠=≤≤i ni i a a然后交换A 的第1行与第1i 行(交换后增广矩阵为简单起见仍记为]b ,[A ,其元素仍记为i j i b a ,)。
经过第1次消元计算得到与原方程组等价的方程组 (2))2(b x =A其中⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)2()2(2)1(1)2()2()2(2)2(2)2(22)1(1)1(12)1(11)2(b n nn n nn b b b a a a a a a a A, 上述过程可记为 ]2[)2()2(]b ,[]b ,[A A →重复上述计算过程,现假设已完成第1-k 步的选主元素过程,交换两行并进行消元计 此时]b ,[A 约化为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=)()()()()()()2(2)2(2)2(22)1(1)1(1)1(12)1(11)()(]b ,[k n k nnk nk k k k knk kk nn k k b a a b a a b a a b a a a A其中)(k A 的元素仍记为j i a ,)(b k 的元素仍记为i b .第k 步选主元素(在)(k A 右下角方阵的第1列内选),即确定k i ,使 0max ,≠=≤≤ik ni k k i a a k交换]b ,[)()(k K A 第k 行与)1,,2,1(-=n k i k 行的元素,再进行消元计算,最后将原线性方程组化为⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡n n nn n n b b b x x x a a a a a a 212122211211回代可求解得 ⎪⎩⎪⎨⎧-=-==∑+=)1,2,,1(/)(/1 n i a x a b x a b x iini j j ij i i nn n n三、Matlab程序function[x,flag]=Gauss(A,b)[n,m]=size(A);nb=length(b);if n~=merror('A²»ÊÇ·½Õó')return;endif m~=nberror('bµÄ³¤¶È²»µÈÓÚAµÄ½×Êý')return;endflag='OK';x=zeros(n,1);for k=1:n-1max=0;for i=k:nif abs(A(i,k))>maxmax=abs(A(i,k));r=i;endendif max<1e-10flag='failure';return;endif r>kfor j=k:nz=A(k,j);A(k,j)=A(r,j);A(r,j)=z;endz=b(k);b(k)=b(r);b(r)=z;endfor i=k+1:nm=A(i,k)/A(k,k);for j=k:nA(i,j)=A(i,j)-m*A(k,j);endb(i)=b(i)-m*b(k);endendif abs(A(n,n))<1e-10flag='failure';return;endfor k=n:-1:1for j=k+1:nb(k)=b(k)-A(k,j)*x(j);endx(k)=b(k)/A(k,k);endx(k)=b(k)/A(k,k);vpa(x)digits(5)end四、验算1 1 1 6取A= 0 2 -3 B= -50 -4 -1 -11运算正确五、实验心得通过这次实验,我更加深入的了解了课本上关于列主元消去法的知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 列主元消去法
【实验内容】1. 掌握列主元消去法的基本思路和迭代步骤
2. 并能够利用列主元的高斯消去法解任意阶数的线性方程组;
【实验方法与步骤】列主元消去法编写程序
1.列主元消去法基本思路
设有线性方程组Ax b =,设A 是可逆矩阵。
列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。
2.列主元高斯消去法算法描述
将方程组用增广矩阵[]()(1)|ij n n B A b a ⨯+==表示。
步骤1:消元过程,对1,2,,1k n =-
(1) 选主元,找{},1,,k i k k n ∈+使得
,max k i k ik k i n
a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3);
(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,
,,1j k n =+;
(4) 消元,对,,i k n =,计算/,ik ik kk l a a =对1,
,1j k n =++,计算
.ij ij ik kj a a l a =- 步骤 2:回代过程:
(1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2);
(2) ,1/;n n n nn x a a +=对1,
,2,1i n =-,计算
,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭∑
习题3第一题程序如下
#include <stdio.h>
#include <math.h>
#define N 3
int I;
float max_value(float a[N][N+1],int n,int k) { float max;
int i;
max=a[k][k];
for(i=k+1;i<n;i++)
if(max<a[i][k])
{
max=a[i][k];
I=i;
}
return(max);
}
void change(float *p,float *q)
{
float temp;
temp=*p; *p=*q; *q=temp;
return;
}
main()
{float a[N][N+1]={{2,2,3,3},{4,7,7,1},{-2,4,5,-7}}; float x[N],max,m,*c,*d;
int k=0,q=0,n=N,i,j;
for(k=0;k<n && q==0;k++)
{
max=max_value(a,n,k);
if(max==0) q=1;
else
{ if(I!=k)
{
for(j=k;j<n+1;j++)
{
c=&a[I][j];
d=&a[k][j];
change(c,d);
}
}
for(i=k+1;i<n;i++)
{
m=a[i][k]/a[k][k];
for(j=0;j<n+1;j++)
a[i][j]=a[i][j]-a[k][j]*m;
}
}
}
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
a[i][3]=a[i][3]-a[i][j]*x[j];
x[i]=a[i][3]/a[i][i];
}
printf("得到的结果如下:\n");
for(i=0;i<n;i++)
printf(" x[%d]=% 6.4f\n",i+1,x[i]); }
【实验结果】
经检验运行结果正确。