列主元素消去法

合集下载

Gauss列主元素消去法实验

Gauss列主元素消去法实验

Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。

通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。

【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。

2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。

3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。

4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。

列主元素消去法

列主元素消去法

2012-2013(1)专业课程实践论文列主元素消去法范 宁:0818180102,R 数学08-1班夏之秋:0818180110,R 数学08-1班一、算法理论列主元素消去法既是选主元高斯消去法的一种,也是实际计算中常用的部分选主元消去法。

列主元素消去法则是对完全主元素消去法的又一次改进。

列主元素消去法在完全主元素消去法的基础上减少了在选主元素时所要花费的一定的计算时间。

设有线性方程组其中,A 为非奇异矩阵。

方程组的增广矩阵为首先在A 的第1列选取绝对值最大的元素作为主元素,即选择然后交换A 的第1行及第1i 行(交换后增广矩阵为简单起见仍记为]b ,[A ,其元素仍记为i j i b a ,)。

经过第1次消元计算得到及原方程组等价的方程组其中上述过程可记为 ]2[)2()2(]b ,[]b ,[A A →重复上述计算过程,现假设已完成第1-k 步的选主元素过程,交换两行并进行消元计此时]b ,[A 约化为其中)(k A 的元素仍记为j i a ,)(b k 的元素仍记为i b .第k 步选主元素(在)(k A 右下角方阵的第1列内选),即确定k i ,使 0max ,≠=≤≤ik n i k k i a a k交换]b ,[)()(k K A 第k 行及)1,,2,1(-=n k i k 行的元素,再进行消元计算,最后将原线性方程组化为回代可求解得 ⎪⎩⎪⎨⎧-=-==∑+=)1,2,,1(/)(/1 n i a x a b x a b x iin i j j ij i i nnn 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. 求解方程组:用四位浮点数进行计算,精确解舍入到四位有效数字为解:运行程序(1)显示 Please Input Matrix jieshu:输入的值为3,回车。

实验报告一

实验报告一

实验一姓名:专业:班级:实验题目:解线性方程组的直接法日期:一、实验目的及意义1)掌握Gausum消去法及Gausum列主元消去法,能用这两种方法求解方程组。

2)掌握追赶法;3)掌握高斯消去法进行到底的条件;4)了解选主元素高斯消去法的优点。

二、实验重点及难点1)列主元素消去法2)矩阵的LU分解三、实验条件1)每人一台计算机2)应用软件:Matlab四、实验要求1)验证Gausum列主元消去法2)设计LU分解法程序3)设计追赶法程序五、实验内容1)补充程序,使程序完整,用列主元素消去法解方程组⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎭⎫⎝⎛2/52/11931423222321xxx。

function x=Gaussumxiaoqufa(A,b)% 用Gauss列主元消去法解线性方程组Ax=b n=length(b);x=zeros(n,1);c=zeros(1,n);% 寻找最大主元t=0;for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i)) max=abs(A(j,i)); m=j; end end if m~=ifor k=1:nc(k)=A(i,k); A(i,k)=A(m,k); A(m,k)=c(k); end t=b(i); b(i)=b(m); b(m)=t; endfor k=i+1:n for j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i); endb(k)=b(k)-b(i)*A(k,i)/A(i,i); A(k,i)=0; end end % 回代求解x(n)=b(n)/A(n,n); for i=n-1:-1:1 sum=0; for j=i+1:nsum=sum+A(i,j)*x(j); endx(i)=(b(i)-sum)/A(i,i); end2)补充程序,使程序完整,用LU 分解法解方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛2/52/11931423222321x x x 。

列主元消去法解方程组实验报告

列主元消去法解方程组实验报告

实验名称:列主元消去法解方程组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)内得到。

高斯列主元消去法

高斯列主元消去法

高斯列主元消去法2.3高斯列主元消去法解线性方程组一:问题的提出我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。

就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。

实际运算的时候因为只能有限小数去计算,因此只能得到近似值。

在实际运算的时候,我们很多时候也常用高斯消去法。

但是高斯消去法在计算机中运算的时候常会碰到两个问题。

1.一旦遇到一些主元等于0,消元过程便无法进行下去。

2.在长期使用中还发现,即使消元过程能进行下去,但是当一些主元的绝对值很小时,求解出的结果与真实结果相差甚远。

为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。

其中又可以分为列选主元和全面选主元两种方法。

目前计算机上常用的按列选主元的方法。

因此我在这里做的也是列选主元高斯消去法。

二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。

我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。

然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。

高斯消元法的目的就是把一般线性方程组简化成上三角方程组。

于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。

三、算法的描述1、设有n元线性方程组如下:=2、第一步:如果a11!=0,令li1= ai1/a11, I= 2,3,……,n用(-li1)乘第一个方程加到第i个方程上,得同解方程组:a(1)11a(1)12...a(1)1nx1b(1)1a(1)21a(1)22...a(1)2nx2b(1)2 .......=.a(1)n-11 a(1)n-12 . .a(1)n-1nxn-1b(1)n-1a(1)n1a(1)n2. . . a(1)nnxnb(1)n简记为:A(2)x=b(2)其中a(2)ij = a(1)ij – li1 a(1)1j ,I ,j = 2,3,..,nb(2)I = b(1)I – li1 b(1)1 ,I = 2,3,...,n第二步:如果a(2)22!=0,令li2= a(2)i2/a(2)22, I= 3,……,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组:a(1)11a(1)12...a(1)1nx1b(1)1a(1)22 ...a(1)2nx2b(1)2 .......=.. .a(n-1)n-1nxn-1b(n-1)n-1. . . a(n)nnxnb(n)n简记为:A(n)x=b(n)最后从方程组的最后一个方程进行回代求解为:n = b(n) / a(n)nni = ( b(k)k - a(k)kjxj ) / a(k)kk以上为高斯消去法的基本过程。

22列主元消去法

22列主元消去法
资源环境学科
输入A, b , n , EPS
for k = 1 : n − 1
图2-1 列主元消元法算法框图
选取主元素 alk
| alk |≤ EPS
Yes
l≠k
换行 No
消元
No
k ← k +1
Yes
输出无解信息
Yes
| A( n , n )| EPS ≤
No
End
输出解 x
回代求解
8
x1 =
b
( 1) 1
−a x −a x = −0.491 058 20 a
( 1) 12 2 ( 1) 11 ( 1) 13 3
事实上,方程组的准确解为 事实上 方程组的准确解为
资源环境学科
x* = ( −0.491058221,−0.050886077,0.367257387 )T
7
二 、 Gauss
1 1 2 A = ( A, b ) → 0.000100 1 1
1 2 1 → 0 1.00 1.00
m21 = 0.000100
0.9999
回代后得到
0.9998
x1 = 1.00 , x2 = 1.00
这是一个相当不错的结果
10 −8 2 3 1 A = ( A, b) = − 1 3.712 4.623 2 − 2 1.072 5.643 3
资源环境学科
10 −8 很小, 绝对值最大 的列元素为a13 = −2 , 因此1,3行交换
5
− 2 1.072 5.643 3 r1 ⇔ r3 → − 1 3.712 4.623 2 10 −8 2 3 1

不定方程组的通解

不定方程组的通解

不定方程组的通解一、引言在数学中,方程是研究数量关系的基本工具之一。

方程可以分为线性方程和非线性方程两大类。

而不定方程组则是非线性方程组的一个重要分支。

不定方程组是指含有未知数的多个方程的集合,其解满足所有这些方程。

本文将介绍不定方程组的通解及其求解方法。

首先会对不定方程组进行定义和分类,并介绍一些常见的不定方程组问题。

然后会详细介绍如何求解一般形式的不定方程组,并给出具体示例。

最后会总结本文所介绍的内容,并展望不定方程组在数学中的应用。

二、定义和分类2.1 定义不定方程组是指含有未知数的多个方程的集合,其解满足所有这些方程。

2.2 分类根据未知数和系数之间的关系,不定方程组可以分为以下几类:2.2.1 线性不定方程组线性不定方程组是指所有未知数都只有一次幂,并且系数都是常数的情况。

例如:3x + 4y = 75x - 2y = 12.2.2 二次不定方程组二次不定方程组是指至少有一个未知数的平方项,并且系数可以是常数或者其他未知数的情况。

例如:x^2 + y^2 = 25x^2 - y = 72.2.3 指数不定方程组指数不定方程组是指至少有一个未知数的指数项,并且系数可以是常数或者其他未知数的情况。

例如:3^x + 4^y = 135^x - 2^y = 9三、求解方法3.1 线性不定方程组的通解求解方法线性不定方程组的通解求解方法主要有以下几种:3.1.1 列主元素消去法列主元素消去法是线性代数中常用的一种求解线性方程组的方法。

通过选取系数矩阵中每一列中绝对值最大的元素作为主元,然后进行消去操作,最终得到行简化阶梯形矩阵。

根据行简化阶梯形矩阵可以直接得到线性方程组的通解。

3.1.2 克拉默法则克拉默法则是一种利用行列式求解线性方程组的方法。

通过构造增广矩阵,并计算系数矩阵和常数向量的行列式,可以得到线性方程组的解。

3.1.3 矩阵求逆法矩阵求逆法是一种利用矩阵的逆求解线性方程组的方法。

通过将系数矩阵和常数向量构造成增广矩阵,然后求出系数矩阵的逆矩阵,最后将逆矩阵与常数向量相乘,可以得到线性方程组的解。

Guass列选主元消去法和三角分解法

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 消去法就是将一般的线性方程组等价地变换为一个上三角方程组,然后用回代法求解。

但是如果在消元过程中,发现某个约化主元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运算正确五、实验心得通过这次实验,我更加深入的了解了课本上关于列主元消去法的知识。

列主元素消去法

列主元素消去法

列主元素消去法列主元素消去法(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$ 列的元素。

2-2 Gauss列主元消去法

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) ].

选主元消去法的基本原理

选主元消去法的基本原理

选主元消去法的基本原理选主元消去法是高斯消元法的一种改进方法,旨在提高高斯消元法的运算效率。

它通过在每一次消去过程中选择系数矩阵的最大元素(主元)作为基准元素,将其放在消去过程中的当前行首位,从而避免出现除数为零的情况,减小误差累积,并降低运算量。

选主元消去法的基本原理如下:1. 确定主元:在每一次消去过程中,首先需要根据某种准则选择当前列中绝对值最大的元素作为主元素,并将其所在行与当前行进行交换。

常用的准则有最大主元消去法和选主元消去法。

2. 消元过程:将主元所在列中主元下方的所有元素全部变为0。

这一步骤可以通过对当前行进行线性组合,将主元下方的其他元素变为0。

消元过程结束后,主元所在列下方的所有元素均为0。

3. 回代过程:从最后一行开始,用回代法求解未知数。

通过将回代过程中的已求得的未知数带入方程组中的其他未知数,依次求解出剩余的未知数。

选主元消去法的关键在于选择合适的主元。

在最大主元消去法中,选择当前列中绝对值最大的元素作为主元,并进行行交换,使主元所在行位于当前行首位。

这样做的目的是为了最大限度地减小主元造成的误差累积。

然而,在某些情况下,选取最大主元并不能有效地减小误差,甚至可能会增加误差。

因此,选主元消去法中选取主元的准则更为复杂。

在选主元消去法中,选择准则一般有三种:绝对值最大法、相对值最大法和列主元法。

绝对值最大法:选择当前列中绝对值最大的元素作为主元。

这种方法可以有效地减小误差,并提高计算精度。

然而,对于某些特殊的矩阵,如病态矩阵,选择绝对值最大的元素作为主元可能导致误差累积增大。

相对值最大法:选择当前列中相对值最大的元素作为主元,即选择当前列中的元素与该列中绝对值最大的元素的比值最大的元素作为主元。

相对值最大法能够有效地降低误差累积,并提高计算精度。

列主元法:选择当前列中除主元外绝对值最大的元素所在的行作为主元所在的行。

这种方法能够有效地减小误差,尤其在处理病态矩阵时效果显著。

列主元素Gauss消去法Jacobi迭代法原理及计算方法

列主元素Gauss消去法Jacobi迭代法原理及计算方法

一、 列主元素Gauss 消去法、Jacobi 迭代法原理及计算方法1. 列主元素Gauss 消去法:1.1 Gauss 消去法基本原理设有方程组Ax b =,设A 是可逆矩阵。

高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。

1.2 列主元Gauss 消去法计算步骤将方程组用增广矩阵[]()(1)ijn n B A b a ⨯+== 表示。

1). 消元过程对1,2,,1k n =-(1) 选主元,找{},1,,k i k k n ∈+ 使得 ,max k i k ik k i na 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 +=+⎛⎫=- ⎪⎝⎭∑2. Jacobi 迭代法2.1 Jacobi 迭代法基本原理Jacobi 迭代法的基本思想是对n 元线性方程组b Ax =,.,n n R b R A ∈∈将其变形为等价方程组f Bx x +=,其中.,,n n n n R x R f R B ∈∈∈⨯B 成为迭代矩阵。

从某一取定的初始向量)0(x 出发,按照一个适当的迭代公式 ,逐次计算出向量f Bx x k k +=+)()1( ( 1,0=k ),使得向量序列}{)(k x 收敛于方程组的精确解.(1)输入1,,,,)0(=k n xb A ε,. (2) )(1,1)0()1(∑≠=-=n j i i j ij i iii x a b a x )1,0(n i = (3)判断 ε≤--≤≤)0()1(10max i i n i x x ,若是,输出1)1(2)1(1,,n x x x ,若否,置1+=k k ,)1()0(i i x x =,)2,1(n i =。

列主元高斯消去法和列主元三角分解法解线性方程

列主元高斯消去法和列主元三角分解法解线性方程

计算方法实验报告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次乘除法;在高斯消去法运算的过程中,如果出现absAi,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步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 Akx=bk第k 步计算如下:对于k=1,2,…,n -11按列选主元:即确定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 ik i n s 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=gauss1A,b,c %列主元法高斯消去法解线性方程Ax=bif lengthA~=lengthb %判断输入的方程组是否有误disp'输入方程有误'return;enddisp'原方程为AX=b:' %显示方程组Abdisp'------------------------'n=lengthA;for k=1:n-1 %找列主元p,q=maxabsAk:n,k; %找出第k列中的最大值,其下标为p,qq=q+k-1; %q在Ak:n,k中的行号转换为在A中的行号if absp<cdisp'列元素太小,detA≈0';break;elseif q>ktemp1=Ak,:; %列主元所在行不是当前行,将当前行与列主Ak,:=Aq,:; 元所在行交换包括bAq,:=temp1;temp2=bk,:;bk,:=bq,:;bq,:=temp2;end%消元for i=k+1:nmi,k=Ai,k/Ak,k; %Ak,k将Ai,k消为0所乘系数Ai,k:n=Ai,k:n-mi,kAk,k:n; %第i行消元处理bi=bi-mi,kbk; %b消元处理endenddisp'消元后所得到的上三角阵是'A %显示消元后的系数矩阵bn=bn/An,n; %回代求解for i=n-1:-1:1bi=bi-sumAi,i+1:nbi+1:n/Ai,i;endclear x;disp'AX=b的解x是' x=b;调用函数解题列主元三角分解法程序流程图列主元三角分解法Matlab主程序①自己编的程序:function x=PLUA,b,eps %定义函数列主元三角分解法函数if lengthA~=lengthb %判断输入的方程组是否有误disp'输入方程有误'return;enddisp'原方程为AX=b:' %显示方程组Abdisp'------------------------'n=lengthA;A=A b; %将A与b合并,得到增广矩阵for r=1:nif r==1for i=1:nc d=maxabsA:,1; %选取最大列向量,并做行交换if c<=eps %最大值小于e,主元太小,程序结束break;elseendd=d+1-1;p=A1,:;A1,:=Ad,:;Ad,:=p;A1,i=A1,i;endA1,2:n=A1,2:n;A2:n,1=A2:n,1/A1,1; %求u1,ielseur,r=Ar,r-Ar,1:r-1A1:r-1,r; %按照方程求取ur,iif absur,r<=eps %如果ur,r小于e,则交换行p=Ar,:;Ar,:=Ar+1,:;Ar+1,:=p;elseendfor i=r:nAr,i=Ar,i-Ar,1:r-1A1:r-1,i; %根据公式求解,并把结果存在矩阵A中endfor i=r+1:nAi,r=Ai,r-Ai,1:r-1A1:r-1,r/Ar,r; %根据公式求解,并把结果存在矩阵A中endendendy1=A1,n+1;for i=2:nh=0;for k=1:i-1h=h+Ai,kyk;endyi=Ai,n+1-h; %根据公式求解yiendxn=yn/An,n;for i=n-1:-1:1h=0;for k=i+1:nh=h+Ai,kxk;endxi=yi-h/Ai,i; %根据公式求解xiendAdisp'AX=b的解x是'x=x'; %输出方程的解②可直接得到P,L,U并解出方程解的的程序查阅资料得子函数PLU1,其作用是将矩阵A分解成L乘以U的形式;PLU2为调用PLU1解题的程序,是自己编的Ⅰ.function l,u,p=PLU1A %定义子函数,其功能为列主元三角分解系数矩阵A m,n=sizeA; %判断系数矩阵是否为方阵if m~=nerror'矩阵不是方阵'returnendif detA==0 %判断系数矩阵能否被三角分解error'矩阵不能被三角分解'endu=A;p=eyem;l=eyem; %将系数矩阵三角分解,分别求出P,L,Ufor i=1:mfor j=i:mtj=uj,i;for k=1:i-1tj=tj-uj,kuk,i;endenda=i;b=absti;for j=i+1:mif b<abstjb=abstj;a=j;endendif a~=ifor j=1:mc=ui,j;ui,j=ua,j;ua,j=c;endfor j=1:mc=pi,j;pi,j=pa,j;pa,j=c;endc=ta;ta=ti;ti=c;endui,i=ti;for j=i+1:muj,i=tj/ti;endfor j=i+1:mfor k=1:i-1ui,j=ui,j-ui,kuk,j;endendendl=trilu,-1+eyem;u=triuu,0Ⅱ.function x=PLU2A,b %定义列主元三角分解法的函数l,u,p=PLU1A %调用PLU分解系数矩阵A m=lengthA; %由于A左乘p,故b也要左乘p v=b;for q=1:mbq=sumpq,1:mv1:m,1;endb1=b1 %求解方程Ly=b for i=2:1:mbi=bi-sumli,1:i-1b1:i-1;endbm=bm/um,m; %求解方程Ux=y for i=m-1:-1:1bi=bi-sumui,i+1:mbi+1:m/ui,i;endclear x;disp'AX=b的解x是' x=b;调用函数解题①②编程疑难这是第一次用matlab编程,对matlab的语句还不是非常熟悉,因此在编程过程中,出现了许多错误提示;并且此次编程的两种方法对矩阵的运算也比较复杂;问题主要集中在循环控制中,循环次数多了一次或者缺少了一次,导致数据错误,一些基本的编程语句在语法上也会由于生疏而产生许多问题,但是语句的错误由于系统会提示,比较容易进行修改,数据计算过程中的一些逻辑错误,比如循环变量的控制,这些系统不会提示错误,需要我们细心去发现错误,不断修正,调试;。

数值分析高斯顺序消去法、列主元消去法LU分解法

数值分析高斯顺序消去法、列主元消去法LU分解法

数值分析实验报告(1)学院:信息学院班级:计算机0903班姓名:***学号:********课题一A.问题提出给定下列几个不同类型的线性方程组,请用适当的方法求解线性方程组1、设线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------------------1368243810041202913726422123417911101610352431205362177586832337616244911315120130123122400105635680000121324⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125 x *= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T2、设对称正定阵系数阵线方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----------------------19243360021411035204111443343104221812334161206538114140231212200420424⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡87654321x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---4515229232060 x * = ( 1, -1, 0, 2, 1, -1, 0, 2 )T3、三对角形线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----5541412621357 x *= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )TB.(1)对上述三个方程组分别用Gauss 顺序消去法与Gauss 列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一) (2)编写算法通用程序(3)在应用Gauss 消去时,尽可能利用相应程序输出系数矩阵的三角分解式C.(1)通过该课题的程序编制,掌握模块化结构程序设计方法 (2)掌握求解各类线性方程组的直接方法,了解各种方法的特点 (3)体会高斯消去法选主元的必要性 实验步骤:(高斯消去法,列主元,LU )1顺序高斯消去法2.LU 分解法3.列主元高斯消去法(如下图)(1)高斯消去法运行结果如下(2)对方程的系数矩阵进行LU分解并求出方程组的解(3)列主元高斯消去法实验体会总结:利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。

gauss列主元素消去法matlab

gauss列主元素消去法matlab

高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。

在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。

一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。

这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。

在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。

通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。

二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。

该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。

通过对U进行回代求解,我们可以得到线性方程组的解。

除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。

通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。

三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。

通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。

然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。

在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。

四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在Matlab 中具有较好的实现和应用效果。

通过对其原理和实现细节的深入理解,我们能够更加灵活地应用该方法,并且能够更好地理解其适用性和局限性。

计算方法实验报告_列主元高斯消去法

计算方法实验报告_列主元高斯消去法
double row_first; //行首元素 //主对角元素单位化 for(int i=0;i<n;i++) {
row_first=A[i][i]; for(int j=0;j<n+1;j++)
计算方法实验报告
{ A[i][j]=A[i][j]/row_first;
} }
for(int k=n-1;k>0;k--) {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
A_B[i][j]=A[i][j]; } A_B[i][N]=B[i][0]; } return A_B; }
3
//输出矩阵 A 的 row x col 个元素 void Show_Matrix(double **A,int row,int col) {
for(int i=0;i<N;i++)
{
int row=Choose_Colum_Main_Element(N,A_B,i);
if(Main_Element<=e) goto A_0;
Exchange(A_B,N+1,row,i);
Elimination(N,A_B,i);
cout<<"选取列主元后第"<<i+1<<"次消元:"<<endl;
double factor; for(int i=start+1;i<n;i++) {
factor=A[i][start]/A[start][start]; for(int j=start;j<n+1;j++) {

解线性方程组的列主元素高斯消去法和lu分解法

解线性方程组的列主元素高斯消去法和lu分解法

数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

三、算法描述:本次试验采用的是高斯列主元消去法和LU 分解法求解线性方程组的解。

其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A 可逆时,列主元Gauss(高斯)消去法一定能进行到底。

优点:具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。

列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。

注意:省去换列的步骤,每次仅选一列中最大的元。

矩阵的三角分解法是A=LU,L 是下三角阵,U 是上三角阵,Doolittle 分解:L 是单位下三角阵,U 是上三角阵;Crout 分解:L 是下三角阵,U 是单位上三角阵。

矩阵三角分解的条件 是矩阵A 有唯一的Doolittle 分解的充要条件是A 的前n-1顺序主子式非零;矩阵A 有唯一的Crout 分解的充要条件是A 的前n-1顺序主子式非零。

三角分解的实现是通过(1)Doolittle 分解的实现; (2)Doolittle 分解的缺点:条件苛刻,且不具有数值稳定性。

(3)用Doolittle 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x a 、用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.b 、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。

《线性方程组的直接解法及其应用》研究综述

《线性方程组的直接解法及其应用》研究综述

学院:建筑工程学院专业:结构工程组号:16 成绩:报告题目:《线性方程组的直接解法及其应用》研究学院:建工学院专业:结构工程组号:16号成员:xxx学院: 建筑工程学院 专业:结构工程 组号:16 成绩:《线性方程组的直接解法及其应用》研究第一章对象描述一、 《线性方程组的直接解法及其应用》描述在科技、工程、医学、经济等各个领域中,经常遇到求解n 阶线性方程组⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++,,,22112222212*********m n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a (1.1) 的问题.方程组(1.1)的系数),,2,1.(n j i a ij =和右端项),,2,1(n i b i =均为实数,且1b 、2b ,……,n b 不全为零。

方程组(1.1)可简记为b Ax =其中 ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=mn m m n n a a a a a a a a a A 212222111211⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=n x x x x 21 , ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=m b b b b 21. 线性方程组的数值解法有两大类,一类是直接法,另一类是迭代法。

本次主要研究的是直接解法。

所谓直接法就是经过有限步算术运算,可求得线性方程组精确解的方法(若计算过程中没有舍入误差)。

但实际计算中由于舍入误差的存在和影响,这种方法也只能求得现行方程组的近似解。

这类算法中最基本的是高斯消元法及其某些变形,它是解决低阶稠密矩阵方程组及某些系数矩阵方程组的有效方法学院: 建筑工程学院 专业:结构工程 组号:16 成绩:二、 《线性方程组的直接解法及其应用》的相关概念1.特征值和特征向量设A 是一个n n ⨯阶实矩阵,若对于数λ,存在非零向量x ,使得x Ax λ=成立。

则称λ是A 的特征值(Characteristic Value),x 为A 的对应于λ的特征向量(Characteristic Vector)。

选主元消去法

选主元消去法


yi
fi bi
ai yi1 ai ui1
(i 2, ... , n)

回代: xn yn ,
xi yi ui xi1 (i n 1, ... , 1)
1 u1
y1
1 u2
y2
1 un1 yn1
1
yn
追赶法包括追赶两个环节
追:顺序计算u1 →u2 →... un-1; 赶:逆序计算xn →xn-1 →.. x1
y1 →y2 →…yn
运算量为 O(5n)
定理 若 A 为对角占优 的三对角阵,
即满足| b1 || c1 | 0, | bn || an | 0, | bi || ai | | ci | (i 2,3,...n) 则方程组有唯一解。
定理 若 A 为对角占优 的三对角阵,
则追公式中的分母既 bi aiui1 全不为零,既追赶法有效
③ 消元
全主元消去法
第 k步:

选取
|
alm
|
max
ki, jn
|
aij
| 0;
② If l k then 交换第 k 行与第 l 行;
If m k then 交换第k 列与第 m 列;
注:列交换改变了 xi 的顺序,须记录交换次序,解完后再 换回来。
输入a,b, n

k=1

选主元
元 高
追赶法流程图
输入ai,bi,ci, fi
关键(压缩存储)
c1 fc1/b1 f1f f1/b1
b1 c1
f1 1 u1
y1
a2 b2 c2
f2
1 u2
y2
an1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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,回车。

(2)显示input di 1 hang dezhi :输入000.3000.2001.0,回车。

(3)显示 input di 2 hang dezhi :输入623.4712.3000.1-,回车。

(4)显示 input di 3 hang dezhi :输入643.5072.1000.2-,回车。

(5)显示 Please Input Changshu xiang::输入000.3000.2000.1,回车。

(6)显示结果:例2. 用列主元素消去法解该方程⎪⎪⎩⎪⎪⎨⎧-=+++=+++=+++=+++2557.03927.02786.04002.01784.04240.00643.03781.01920.03645.01550.01129.04015.03872.02246.04043.02943.03678.01234.04096.04321432143214321x x x x x x x x x x x x x x x x 解:运行程序(1)显示出 Please Input Matrix jieshu :输入的值为4,回车。

(2)显示input di 1 hang dezhi :输入2943.03678.01234.04096.0回车。

(3)显示 input di 2 hang dezhi :输入1129.04015.03872.02246.0回车。

(4)显示 input di 3 hang dezhi :输入0643.03781.01920.03645.0回车。

(5)显示 input di 4 hang dezhi :输入3927.02786.04002.01784.0回车。

(6)显示出 Please Input Changshu xiang:: 输入,2557.04240.01550.04043.0-回车。

(7)显示结果:。

相关文档
最新文档