作业一 高斯消元法和列主元消元法

合集下载

数值分析6(选主元高斯消元法)

数值分析6(选主元高斯消元法)
20:22

2 1 2 2 3 3 2 1 2 0 5 0 4 6 19 9
14/27
三对角矩阵分解
f u over , with f
f u( x ) 0 x 1 f (0) a, f (1) b
20:22
( k = 2, 3, · · · ,n)
20:22
18/27
下三角方程组 LY = f
1 y1 f1 y f 1 2 2 2 n 1 y n f n

2 3 / 2 1 2
4 4 2 3 12 6 4 1 2 2 1 1

4 4 2 3 / 2 3 6 1 0 1 2 1 2
20:22

4 4 2 2 3 / 2 3 6 3 1 0 5 0 2 19 / 5 9 2
三角分解:
A = LU
三对角矩阵
=
单位下三角阵 上三角阵
AX=F LU X = F ①
20:22
L Y=F
②UX=Y
16/27
LU分解
2 2 1 1 / 2 1 3 2 2 4 2 3 5 1 2 2 1 / 2 1 / 2 5 / 2 2 4 / 5 12 / 5 2 3 5 2 1 1 / 2 1 U L 4/5 1 5 / 4 1 20:22
10 0 0
20:22
7 0 x1 7 x 6.1 0 6 2 2.5 5 2.5 x3

数值计算方法 高斯消元法、主元素法 - 高斯消元法、主元素法-1

数值计算方法 高斯消元法、主元素法 - 高斯消元法、主元素法-1

求 f (4) .
c b a 1
高 斯
设所求二次函数为 f ( x) ax2 bx c ,其待定系数满足c 2b 4a 2 解此方程组得 f ( x) 3 x2 11 x 3 ,则 f (4)= 5 c 3b 9a 0

22

思 考 在一次智力测验中,老师写出某个数列的前两项为1,2,让学生按照前两
9
预备知识——Cramer法则
b1 a12
a1n
b2 a22
a2 n

x1
D1 D
bn
an2 A
ann ,



a11 a12
b1

a21 a22
b2
xn
Dn D
an1
an 2 A
bn ,
D0
a11
b1
a1n
a21
b2
a2n
,
xk
Dk D
an1
bn A
ann ,
,
优点:收敛、稳定、结论可靠 缺点:计算量过大 计算量: M=(n2 1)n!n 当 n 10 时,M 0.359251210109 当n 40时,M 0.13046485371042
a
(2) 2j
ai(22)
a
(2) 22
方程右边
bi(3)
bi(2) b2(2)
ai(22)
a
(2) 22
方程左边
ai(jk 1)
ai(jk)
ak(kj)
ai(kk) ak(kk)
方程右边
bi(k 1)
bi(k)
bk(k)
ai(2k) ak(kk)
25

用列主元高斯消元法求线性代数方程组的解

用列主元高斯消元法求线性代数方程组的解

课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。

这种解线性方程组的基本方法就是这里要介绍的高斯消去法。

数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。

当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。

高斯消元法可以用在电脑中来解决数千条等式及未知数。

高斯消元法可以用来找出一个可逆矩阵的逆矩阵。

用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。

根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。

采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。

用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。

然后换行使之变到主元位子上,在进行消元计算。

设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。

目录摘要......................................................................................... 错误!未定义书签。

第1章绪论 ........................................................................... 错误!未定义书签。

第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)2.1.1高斯消元法的消元过程 (2)2.1.2高斯消元法的回带过程 (3)2.1.3高斯消元法的复杂度分析 (4)2.2列主高斯消元法原理简介 (5)2.2.1列主高斯消元法的消元过程 (6)2.2.2列主高斯消元法的回带过程 (6)2.2.3列主高斯消元法的算法描述 (6)第3章高斯消元法的物理应用 (9)3.1电网模型的描述 (9)3.2电网模型的问题分析 (9)3.3求解计算 (11)参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。

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

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

计算方法实验报告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消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。

高斯列主元素消去法解多元一次方程组

高斯列主元素消去法解多元一次方程组

⾼斯列主元素消去法解多元⼀次⽅程组1、Gauss消去法及列主元素消去法算法介绍2、c#源码1/********************************2⾼斯列主元素消去法解多元⼀次⽅程组3 *4 * 例如⽅程组5 * x+y+z=76 * 2x+y-z=67 * x-y-2z=48 *9 * 矩阵阶数N=310 * a[N,N]为1 1 111 * 2 1 -112 * 1 -1 -213 * b[N]为 714 * 615 * 416 *********************************/17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;2223namespace Gauss24 {25class Program26 {27const int MaxN = 20;28private float[,] a = new float[MaxN, MaxN];29private float[] b = new float[MaxN];30private float[] x = new float[MaxN];3132private int N;//所要计算的矩阵的阶数33private float center;//中间变量34static void Main(string[] args)35 {36 Program p = new Program();37 p.ReadMatrix();38 p.ShowMatrix();39 p.Calculate();40 p.ShowResult();41 Console.ReadLine();42 }4344//输⼊线性⽅程组对应的矩阵45private void ReadMatrix()46 {47 Console.Write("请输⼊矩阵的阶数:");48while (!int.TryParse(Console.ReadLine(),out N))49 {50 Console.WriteLine("请输⼊正确的阶数!");51 }5253 Console.WriteLine("请输⼊矩阵a[{0}][{0}]:",N);54for (int i = 0; i < N; i++)55 {56for (int j = 0; j < N; j++)57 {58while (!float.TryParse(Console.ReadLine(), out a[i,j]))59 Console.WriteLine("请正确输⼊!");6061 }62 }6364for (int i = 0; i < N; i++)65 {66 Console.Write("请输⼊矩阵b[{0}]:", i);67while (!float.TryParse(Console.ReadLine(), out b[i]))68 Console.WriteLine("请正确输⼊!");69 }70 Console.WriteLine("\n==========================================");71 }7273//显⽰矩阵对应的⽅程组74private void ShowMatrix()75 {76 Console.WriteLine("要求的⽅程组为:");77for (int i = 0; i < N; i++)78 {79for (int j = 0; j < N; j++)80 {81if (j == 0)82 {83string s;84 s = a[i, j] + "x" + (j + 1);85 Console.Write(s);86 }8788else89 {90string s = a[i, j] > 0 ? "+" + a[i, j] + "x" + (j+1) : a[i, j] + "x" + (j+1);91 Console.Write(s);92 }93 }94 Console.WriteLine(" = "+b[i]);95 }96 Console.WriteLine("\n==========================================");97 }9899private void Calculate()100 {101float sum;102int i, k, p;103for (k = 0; k < N-1; k++)104 {105 center = Math.Abs(a[k,k]);//对⾓线上106for (i = k + 1, p = k; i < N; i++)107 {108//选取主元109if (center < Math.Abs(a[i, k]))110 {111 center = Math.Abs(a[i, k]);112 p = i;113 }114 }115116if (i > k)117 {118//移动主元119for (int m = k; m < N; m++)120 {121 center = a[k, m];122 a[k, m] = a[p, m];123 a[p, m] = center;124 }125 center = b[k];126 b[k] = b[p];127 b[p] = center;128 }129130//消元131for (int m = k + 1; m < N; m++)132 {133 center = a[m, k];134for (int n = k; n < N; n++)135 {136 a[m, n] -= center * a[k, n] / a[k, k];137 }138 b[m] -= center * b[k] / a[k, k];139 }140141142 }143//x[N]的值144 x[N - 1] = b[N - 1] / a[N - 1, N - 1];145for (int m = N - 2; m >= 0; m--)146 {147 sum = b[m];148for (int j = N - 1; j > m; j--)149 {150 sum -= a[m, j] * x[j];151 x[m] = sum / a[m, m];152 }153 }154 }155156157private void ShowResult()158 {159 Console.WriteLine("结果为:");160for (int i = 0; i < N; i++)161 {162 Console.Write("x{0}={1}\n",i+1,x[i]); 163 }164165 }166 }167 }3、运⾏结果。

高斯消元法与列主元消去法实验报告

高斯消元法与列主元消去法实验报告

实验报告:Gauss消元法小组成员:李岚岚、邱粉珊、缪晓浓、杨水清学号:0917020040、0917010078、0917010073、0917010112一、实验问题编写两个程序,分别利用Gauss消元法和列主元消去法求解方程组二、分析及其计算过程Gauss顺序消元法:源程序:function [x]=gaussl(A,b)[n1,n2]=size(A);n3=size(b);if n1~=n2|n2~=n3|n1~=n3disp('A的行和列的维数不同!');return;endif det(A)==0disp('系数矩阵A奇异');return;end%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[1 2/3 1/3;9/20 1 11/20;2/3 1/3 1];>>b=[2 2 2];>> [x]=gaussl(A,b)x =1 1 1Gauss列主元消去法:源程序:function [x]=gaussll(A,b) [n1,n2]=size(A);n3=size(b);if n1~=n2|n1~=n3|n2~=n3disp('输入的方程错误!');return;endif det(A)==0disp('系数矩阵A奇异');return;endmax=zeros(n1);for m=1:n1%找主元for i=m:n1if abs(A(i,m))>maxmax=A(i,:);A(i,:)=A(m,:);A(m,:)=max;maxb=b(i);b(i)=b(m);b(m)=maxb;endend%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endendend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[-0.002 2 2;1 0.78125 0;3.996 5.5625 4]; >>b=[0.4 1.3816 7.4178];>>[x]= gaussll(A,b)x =1.9273 -0.6985 0.9004。

第3章3-01高斯消元法,列主元法

第3章3-01高斯消元法,列主元法
0 0
0 k 1,即消去第2列到第n个方程中的x1 , 假定a11 0,
目标是:
0 a11 0 a A 21 a 0 n1
0 0 a12 a1n
a22 a2 n
0 0
0 an0 ann 2
k 1
k 1
0时,流程终止;
很小时,求解将严重失真,流程应终止。
例:用顺序消去法求解方程组: x1 x2 x3 6 x1 3 x2 2 x3 1 5 x x 4 x 19 1 2 3 1 1 1 解: b 1 3 2 A 5 1 4 第一次消元:l 21 1, l 31
k 1
0,
只要将前面流程中的1替换成k , 0替换成k 1: 对于i k 1, , n 做 k lik aikk 1 akk 1 : aikk 0 对于j k 1, , n 做 k aij aijk 1 lik akjk 1 b k b k 1 l b k 1 i ik k i 直到k n 1,消元过程结束
数据在回代过程中没用。 高斯消去法的计算流程如下: 对于k 1, 2, , n 1 做 对于i k 1, , n 做 l : a a ik ik kk 对于j k 1, , n 做 aij : aij lik akj b : b l b i i ik k
而是方程组本身的问题。
12 x1 3 x2 3 x3 15 例:用列主元消去法求解方程组 18 x1 3 x2 x3 15 x1 x2 x3 6 12 3 3 15 18最大 解:A b 18 3 1 15 1 1 1 6 18 3 1 15 12 3 3 15 A 0 b 0 1 1 1 6 l21 12 18 , .l31 1 18,消元得 3 1 15 3 1 15 18 18 1 1 0 交换第 2,3 行 1 2.3333 5 0 1.1667 0.9444 5.1667 A b 0 1.1667 0.9444 5.1667 0 1 2, 3333 5 l32 1 1.1667,消元得 3 1 15 18 0 1.1667 0.9444 5.1667 A 2 b 2 0 0 3.1428 9.4285 回代过程:x3 3, x2 2, x1 1

解线性方程组-高斯消去法列主元

解线性方程组-高斯消去法列主元

的数作主元 arkk1

max
kin
aikk
1
,然后将第 r 行和第 k 行交换(如 r k )。从而在计算 lik 时保证了被除
数的绝对值大于等于除数的绝对值。
实际计算时,当最大的 arkk1 很小时,求解结果同样会严重失真,则求解过程应当停止。设 0是某个 很小的数,当 arkk1 时,过程应该停止,此时已不是算法的问题,而是方程组本身的问题了。
x3 5 1 5 , x2 3 3x3 3 3 35 3 4 , x1 7 x2 x3 2 7 4 5 2 1
此方法就是高斯消去法。
计算流程
记初始方程组 Ax b 为 A0 x b0 。
k 1,即消去第 2 到第 n 个方程中的 x1 ,假定 a110 0 , 目标
a110 a120
是:
A

a201
a202

an01 an02
a1n0
b10

a110 a120
a20n
b20


0
a212

对于j k 1, , n 做 aijk aijk1 lik akkj 1
bik bik1 lik bkk1
直到 k n 1时,消元过程结束, An1 成为上三角矩阵,最后一个方程成为一元一次方程(只含 xn ),
第一步,消元过程: 对增广矩阵进行消元,
7b 11ຫໍສະໝຸດ , 0 x1
x


x2


x3
2
A b 4
1
1 5 1
1 1 1

高斯法和列主元高斯消去法解线性方程组(MATLAB版)

高斯法和列主元高斯消去法解线性方程组(MATLAB版)

clear;clc;
%列主元 Gauss 校区法解线性方程组 A=[3 -5 6 4 -2 -3 8; 1 1 -9 15 1 -9 2; 2 -1 7 5 -1 6 11; -1 1 3 2 7 -1 -2; 4 3 1 -7 2 1 1; 2 9 -8 11 -1 -4 -1; 7 2 -1 2 7 -1 9];%系数矩阵 b=[11 2 29 9 5 8 25]';%n 维向量 y=inv(A)*b %matlab 的计算结果 n=length(b);%方程个数 n x=zeros(n,1);%未知向量 %-------------消去----------for k=1:n-1 Auk=A(k:n,k); [m,u]=max(abs(Auk)); u=u+k-1 %u 为最大元所在的列 %------交换最大的行和当前行的值------for j=k:n temp=A(u,j);A(u,j)=A(k,j);A(k,j)=temp; end temp=b(k);b(k)=b(u);b(u)=temp; % % % if A(k,k)==0; error('Error'); end for i=k+1:n Aபைடு நூலகம்i,k)=A(i,k)/A(k,k); Aik=A(i,k)/A(k,k) for j=k:n A(i,j)=A(i,j)-Aik*A(k,j); end A b(i)=b(i)-Aik*b(k) end
%
end %-------------回代----------x(n)=b(n)/A(n,n) for k=n-1:-1:1 S=b(k); for j=k+1:n S=S-A(k,j)*x(j);
end x(k)=S/A(k,k) end x %程序的计算结果 error=abs(x-ones(n,1))%误差 %误差小于直接进行高斯消去的计算误差

第四章高斯消元法与选主元

第四章高斯消元法与选主元

i, j = k +1, k + 2,...,n
继续下去到第n-1步消元,可将线性方程组化为如下上三角方 程组: ⎫
a11 x1 + a12 x 2 + L + a1n x n = b1 ⎪ (1) (1) (1) a 22 x 2 + L + a 2 n x n = b2 ⎪ ⎬ L ⎪ ( n −1) ( n −1) ⎪ a nn x n = bn ⎭
(1) ( 2)
aij
( 2)
= aij + mi 2a2 j , bi
(1)
= bi + mi 2b2
(1)
(1)
i, j = 3,4,...,n
( k −1 ) ≠ 0 ,取 m ik 第k步: 设 a kk 个方程组的xk,i=k+1,k+2,…,n)
( a ikk − 1 ) = − ( k −1 ) a kk

求解一个三角形方程组 需n个除法与∑ i − 1) = (
i =1
n
1 1 n ( n − 1) ≈ n 2 2 2
次加法与乘法。
2.Gauss消元法
(一) 高斯消去法的求解过程,可大致分为两个阶段:首先,把 原方程组化为上三角形方程组,称之为“消去(消元)”过程;然后, 用逆次序逐一求出三角方程组(原方程组的等价方程组)的解,并 称之为“回代”过程.,下面分别写出“消去(消元)”和“回代” 两个过 程的计算步骤.
为求解上面的上三角方 程组,从最后一 个方程开始,先解出 x n = bn / a nn , 然后按方程 从后向前的顺序,用已 求出的 x k 值,从方程 中依次解出 x n −1 , x n − 2 ,...., x1。这样就完成了上三 角方程组的求解过程这 个过程的计算公式为: x n = bn / a nn x i = ( bi −

高斯列主元消元法

高斯列主元消元法

1. 用高斯列主元消去法解线性方程组Ax=b 。

⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--⨯=11212592.1121130.6291.51314.59103.015A ,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=2178.4617.59b 。

编程思路:在消元之前,在剩余的元素中选取绝对值最大的为主元,并将其换到主元的位置,以防止出现小数被大数吃掉的现象。

然后再将矩阵化为三角矩阵,按照高斯消去法进行计算,最后进行回代求解。

程序代码:#include <stdio.h>#include <math.h>void main(){//定义变量//float Ab[4][5],x;int i,j,m,k;//输入增广矩阵Ab//printf("please input coefficient matrix Ab by line\n");for(i=0;i<4;i++){for(j=0;j<5;j++){scanf("%f",&Ab[i][j]);}}//输出已输入矩阵,验证是否有误//for(i=0;i<4;i++){for(j=0;j<5;j++){printf("%8.4f ",Ab[i][j]);}printf("\n");}printf("\n\n\n\n\n\n");//消元过程//for(k=0;k<=3;k++){//寻找列主元行号//m=k;for(i=k+1;i<=3;i++){x=fabs(Ab[m][k]);if(fabs(Ab[i][k])>x)m=i;}printf("%d\n\n\n\n",m);if(Ab[m][k]==0){printf("error");return;}else{//交换两行//for(j=k;j<=4;j++){x=Ab[k][j];Ab[k][j]=Ab[m][j];Ab[m][j]=x;}for(i=0;i<4;i++){for(j=0;j<5;j++){printf("%8.4f ",Ab[i][j]);}printf("\n");}printf("\n\n\n\n\n\n");for(i=k+1;i<=3;i++){Ab[i][k]=Ab[i][k]/Ab[k][k];for(j=k+1;j<=4;j++){Ab[i][j]=Ab[i][j]-Ab[i][k]*Ab[k][j];}}}}//输出变换后的矩阵//for(i=0;i<4;i++){for(j=0;j<5;j++){printf("%8.4f ",Ab[i][j]);}printf("\n");}//回代过程//Ab[3][4]=Ab[3][4]/Ab[3][3];for(i=2;i>=0;i--){x=0;for(j=i+1;j<4;j++){x=x+Ab[i][j]*Ab[j][4];}Ab[i][4]=(Ab[i][4]-x)/Ab[i][i];}//输出结果//for(k=0;k<=3;k++){printf("%f ",Ab[k][4]);}}数据输入运行结果2.用追赶法解正定矩阵Ax=b 。

高斯消元法和列主元消元法

高斯消元法和列主元消元法

用第二列的3、4行除以 k22得
- 25 - 5 = 11 = k 32 90 18 11
k
42
=
3 1 9 1
2 1 = 0 1
16 45
第三行减去第二行乘以 k 3 2 , 第四行减去第二行乘以k 4 2 。
由以上可得:
骣 1 5 ç11 ç ç 32 ç 0 19 ç ç 11 11 ç ç ç ç 1870 ç0 0 ç ç 198 ç ç ç ç 0 0 - 1727 ç ç 桫 495 - 4 25 11 1133 198 8195 495 13 ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ ÷ 6468 ÷ ÷ ÷ ÷ 495 ÷
- 4 25 11 1133 198 3421705518 183278700
÷ ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ 3421705518 ÷ ÷ ÷ ÷ 183278700 ÷
13
回代过程可得:
X 4 = 1; X 3 = 1; X 2 = 1; X 1 = 1;
1 k 41 = 11
第二行减去第一行乘以 k 21 , 第三行减去第一行乘以 第四行减去第一行乘以
k k
31


41
由此上可得:
骣 1 ç11 ç ç 90 ç0 ç ç 11 ç ç ç ç ç 0 - 25 ç ç 11 ç ç ç 32 ç0 ç ç 桫 11 5 - 4 13 ÷ ÷ ÷ 32 25 147 ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ ÷ 95 56 126 ÷ ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ - 27 191 196 ÷ ÷ ÷ ÷ 11 11 11

3解线性方程组的直接法习题+答案

3解线性方程组的直接法习题+答案




2 1 2 1 2
1 5 2 3 5

1

3
2

3
5





1 0 0
2 1 1

A

LU
,其中 L


1 2
1


0

,
U


0
5 2
3

2

1
3
1
0
0
3

2 5
姓名
第三章 线性方程组的直接解法
学号
班级
习题主要考察点:高斯消去法,LU 分解法,平方根法和追赶法解线性方程组。
要点:(1)利用列主元高斯消去法求解线性方程组
(2)矩阵的 Doolittle 分解
(3)利用系数矩阵的 Doolittle 分解求解线性方程组
例 1 用列主元消元法的方程组

2
x
1
3 x1
4 0 0
5 7
3 1 22 12 6
15
7

2
31



4 5 7 15 4 5 7 15



0 12 6 31 0 12 6 31
主元 0
3
1
7

消去
0
0
1

3

2 2 2
4 8
得等价的线性方程组为:
1 2 3 x1 2 2 7 2 x2 3 4 8 4 x 3 0

作业一 高斯消元法和列主元消元法

作业一 高斯消元法和列主元消元法

用高斯消元法和列主元消去法求解线性代数方程组(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。

为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。

⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。

下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。

⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用高斯消元法和列主元消去法求解线性代数方程组(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。

为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。

⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。

下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。

⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。

如果(1-2)中0)1(22≠a ,则以)1(22a 为主元素,又可以把方程组(1-2)化为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=+++=+++++++)2(1,)2(3)2(3)3(1,3)2(33)2(33)2(1,2)2(23)2(232)1(1,1)1(12)1(121 n n n nn n n n n n n n n n n a x a x a a x a x a a x a x a x a x a x a x (1-3)针对(1-3) 继续消元,重复同样的手段,第k 步所要加工的方程组是:⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧=++=++=+++=+++=++++-+---+---+-----++)1(1,)1()1()1(1,)1()1()1(1,1)1()1(11)2(1,2)2(23)2(232)1(1,1)1(13)1(132)1(121 k n n n k nn k k nk k n k n k nn k k kk k n k n k kn k k k k n n n n n n a x a x a a x a x a a x a x a x a x a x a x a x a x a x a x设0)1(≠-k kka ,第k 步先使上述方程组中第k 个方程中x k 的系数化为1: )(1,)()(1,k n k n k kn k k k k k a x a x a x ++=++然后再从其它(n - k )个方程中消x k ,消元公式为:⎪⎪⎪⎩⎪⎪⎪⎨⎧+=++=⋅-=++==----nk i n k j a a a a n k k j a a a k kjk ik k ij k ij k kkk kjk kj ,11,,11,,1,)()1()1()()1()1()( (1-4) 按照上述步骤进行n 次后,将原方程组加工成下列形式:⎪⎪⎪⎩⎪⎪⎪⎨⎧==+=+++=+++++-+---++)(1,)1(1,1)1(1)2(1,2)2(23)2(232)1(1,1)1(13)1(132)1(121 n n n n n n n n n nn n n n n n n n a x a x a x a x a x a x a x a x a x a x回代公式为:⎪⎩⎪⎨⎧-=-==∑+=++1,,11)()(1,)(1, n k x a a x a x nk j j k kjk n k k n n nn (1-5)综上所述,高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回代过程求解。

由于计算时不涉及x i , i = 1, 2, …, n ,所以在存贮时可将方程组AX = b ,写成增广矩阵(A,b )存贮。

下面,我们统计一下高斯消去法的工作量;在(1-4)第一个式子中,每执行一次需要)(k n n --次除法,在(1-5)第二个式子中,每执行一次需要)()]1([k n k n -⨯--次除法。

因此在消元过程中,共需要[])12)(1(61)1()1()()1(121++=+-=+-+-⨯+-∑∑==n n n k n k n k n k n nk nk次乘作法。

此外,回代过程共有)1(2)(1-=-∑=n nk n nk次乘法。

汇总在一起,高斯消去法的计算量为:33)13(3232n n n n n n -+=-+ 次乘除法。

1.2 基于Matlab 的程序代码1.3 运行结果图2 列主元消去法2.1基本思想及计算过程前述的消去过程中,未知量是按其出现于方程组中的自然顺序消去的,所以又叫顺序消function x=gauss6(A,b)%x=gauss6(A,b) 正消 n=length(A); a=[A,b]; for k=1:n-1for i=k+1:nl(i,k)=a(i,k)/a(k,k);a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1); end end %回代if a(n,n)==0 return endx(n)=a(n,n+1)/a(n,n); for i=n-1:-1:1x(i)=(a(i,n+1)-sum(a(i,i+1:n).*x(i+1:n)))/a(i,i); end去法。

实际上已经发现顺序消去法有很大的缺点。

设用作除数的)1(-k kk a 为主元素,首先,消元过程中可能出现)1(-k kka 为零的情况,此时消元过程亦无法进行下去;其次如果主元素)1(-k kka 很小,由于舍入误差和有效位数消失等因素,其本身常常有较大的相对误差,用其作除数,会导致其它元素数量级的严重增长和舍入误差的扩散,使得所求的解误差过大,以致失真。

在消元过程中适当选取主元素是十分必要的。

误差分析的理论和计算实践均表明:顺序消元法在系数矩阵A 为对称正定时,可以保证此过程对舍入误差的数值稳定性,对一般的矩阵则必须引入选取主元素的技巧,方能得到满意的结果。

在列主元消去法中,未知数仍然是顺序地消去的,但是把各方程中要消去的那个未知数的系数按绝对值最大值作为主元素,然后用顺序消去法的公式求解。

2.2 基于Matlab 的程序代码function x=lie(A,b)%x=lie(A,b)n=length(b);eps=10^-2;for k=1:n-1[mainElement,index]=max(abs(A(k:n,k)));index=index+k-1;%index在A(k:n,k)中的行号转换为在A中的行号if abs(mainElement)<epsdisp('列元素太小!!');break;elseif index>k%列主元所在行不是当前行,将当前行与列主元所在行交换temp=A(k,:);A(k,:)=A(index,:);A(index,:)=temp;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也需要处理!!endend%回代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);endx=b;2.3 运行结果图。

相关文档
最新文档