高斯消元法

高斯消元法
高斯消元法

求解线性方程组的直接解法

5.1 Gauss 消去法

① 三角方程组

先举一个简单的例子来说明消去法的基本思想.

例1. 用消去法解方程组

???

??=+-=-=++(3)

.122(2)

,54(1)

,6321

32321x x x x x x x x 解 第一步.将方程(1)乘上-2加到方程(3)上去,消去(3)中的未知数1x ,得到 (4)

.11432-=--x x 第二步.将方程(2)加到方程(4)上去,消去方程(4)中的未知数2x ,得到与原方程组等

价的三角形方程组

(5)

.62

,54 ,6332321??

?

??-=-=-=++x x x x x x 显然,方程组(5)是容易求解的,解为.)3,2,1(T x =*

上述过程相当于

332331 (-2) 6-56 20014011111-56 140140111156 122140111)|(r r r r r r b A →+→+???

?

?? ??--→????? ??---→????? ??--=

其中用i r 表示矩阵的第i 行.

下面我们讨论求解一般线性方程组的高斯消去法. 一般地

???????==++=+++n

n nn n n n n b x a b x a x a b x a x a x a 2

222211212111

当a 11a 22…a nn ≠0时,可解出 x n =b n /a nn for k=n-1:1 x k =(b 1- a k,k+1x k +1-…- a kn x n )/ a kk end

注: k k b x ,可用同一组单元.并可解出一个未知数即代入其它方程消去该未知数

Gauss 消元法的流程图为: 流程图中,,(,1,2,...,)ij i a b i j n 分别为线性方程组的系数矩阵和常数向量;

k 是循环次数。

② 顺序消去法

一般地,k =1对n 阶方程组消去第k 个元(a kk ≠0):

??????

????

??

??→

?????????

???

??++++++++++++++n k k nn

k n n n k k k k k kn

k k kk

n k k nn

k n nk

n k k k k k kn

k k kk b b b a a m a a m a a a b b b a a a a a a a a a

11

,1,11

,1,11,11,,11,1,11,)()(

这里各行变换:i 行-k 行×m ik ,其中m ik =a ik /a kk ,i =k +1,…,n 而后, k =2对n -1阶方程组

消第2个元…我们有如下顺序消元算法:

for k=1:n -1 if a kk ≠0 for i =k +1:n m ik =a ik /a kk i 行=i 行-k 行×m ik end else stop end end

(每行包括右端项!)可细化,也可存储m ik 于a ik 得:

for k=1:n -1 if a kk ≠0 for i =k +1:n a ik =a ik /a kk for j=k+1:n a ik =a ik -a ik ×a kj end b i =b i -a ik ×b k end else stop end end

顺序消元过程和回代过程连起来就可得精确解.顺序消元算法也可将系数矩阵和右端项分开:

for k=1:n -1 if a kk ≠0 for i =k +1:n a ik =a ik /a kk for j=k+1:n a ik =a ik -a ik ×a kj end end else stop end end (注意m ik 在a ik ) for k=1:n -1 for i =k +1:n b i =b i -a ik ×b k end

end

Gauss 消去法运算量

消去第k 个元素时,对矩阵作加法和乘法运算各(n-k )×(n-k )次,除法(n-k )次.对右端作加法和乘法运算各(n-k )次.分别共12+22+…+(n -1)2=n (n -1/2)(n -1)/3和1+2+…+(n-1)=n (n -1)/2次加法乘法,消元时还有1+2+…+(n-1)= n (n -1)/2次除法.另外回代过程中加法和乘法运算各n (n -1)/2次,除法n 次.运算量主要是消元的贡献,加法和乘法运算各约n 3/3. 定理1.设Ax=b ,其中A .R n n ?∈

(1) 如果),,1,2,(k 0)

(n a k kk =≠则可通过Gauss 消去法将Ax=b 约化等价的三角形方程组??????

????????=??????????????????????????)()2(2)1(121)()2(2)2(22)

1(1)1(12)1(11n n m n nn n n b b b x x x a a a a a a , 且计算公式为:

(a) 消元过程

设0)(≠k kk a ,对1,,2,1-=n k 计算

n

k k j i b m b b a m a a a a m k k ik k i k i

k kj

ik k ij k ij k kk k ik ik ,,2,1,/)

()()1()

()()

1()

()( ++=?????-=-==++ (b) 回代过程

1

,2,,1/)(/1)

()()()

()( -=?

?

???-==∑+=n i a x a b x a b x n i j i ii j i ij i i i n nn n n n (2) 如果A 为非奇异矩阵,则可通过Gauss 消去法(及交换两行的初等变换)将方程组Ax=b 约化为

???

???

????????=??????

???????????????????

?)()2(2)1(121)()2(2)2(22)

1(1)1(12)1(11n n m n nn n n b b b x x x a a a a a a .

行列式和逆矩阵

易知顺序消元过程中,行列式不变.因此det (A )=det (U )=u 11u 22…u nn ,这里U 是顺序消元过程结束时的上三角矩阵.A 的顺序主子式。也是同样情况,即有det (A k )=det (U k )=u 11u 22…u kk .。顺便指出,消第k 个元素时,左上角的元素(称之为

主元素)非零时才能进行.所有主元素非零等价于det (A k )≠0,k =1,2,…,n -1.

求A 的逆矩阵相当于解n 个方程组,它们的系数矩阵是A ,n 个右端项是n 个单位向量.用增广矩阵表示即(A ∣I ),其中I 是单位矩阵.消元过程可对所有右端项同时进行,消元过程结束再分别回代.也可巧妙安排就地求逆. ③ 主元素法

如果a kk =0顺序消元无法进行,如果a kk 很小,可以进行。但将引出很大误差. 例2. 用顺序消去法解方程组

??

?

???=???????????

?211110001.021x x 解 用精确运算:

?

??

???--→??????999819999010001.021*******.0

解得(10000/9999,9998/9999)≈(1.00010001000100,0.99989998999900)

若在十进三位尾数舍入的浮点计算机系统中运算,第二行将是

(0 -10000 ∣ -10000)

从而得到解1,021==x x ,与实解相去甚远.究其原因,小主元作分母扩大误差所致.如果两个方程(两行)交换次序再消元:

??????→??????→??????1210111210001.011211110001.0

得到解1,121==x x ,与实解很近.

下面引进的列主元素法在消元前,先选该列中绝对值最大的做主元(交换两

行,每行包括右端项!): for k=1:n -1 找p :

(

)nk

k k kk pk a a a a ,,,max ,1 +=

p 行?k 行

i k =p

if a kk ≠0

for i =k +1:n m ik =a ik /a kk i 行=i 行-k 行×m ik end

else stop end

end

i k =p 记录每次选主元(两行交换)的指标.跟前面一样,算法还可细化,把矩阵和右端分开算(这时就要用指标i k )。列主元素法乘数m ik 绝对值不大于1,不会增加误差。列主元素法用来求行列式时,要注意两行交换行列式变号。还有一种全主元素法,它是在整个右下(n-k )×(n-k )矩阵找绝对值最大的做主元(交换行及列).这对误差控制有利,但搜索太费时.通常列主元素法误差控制就已可以了. 以下是列主元素法的流程图:

流程图中,,(,1,2,...,)ij i

a b i j n 分别为线性方程组的系数矩阵和常熟

向量;k 是循环次数;d 是主元素;

二 实验部分

本章实验内容:

实验题目:Gauss 消元法,追赶法,范数。 实验内容:①编制用Gauss 消元法求解线性方程组Ax=f 的程序。

②编制用追赶法求解线性方程组Ax=f 的程序。

③编制向量和矩阵的范数程序。

实验目的:①了解Gauss 消元法原理及实现条件,熟练掌握Gauss

消元法解方程组的算法,并能计算行列式的值。

②掌握追赶法,能利用追赶法求解线性方程组。

③理解向量和矩阵范数定义,性质并掌握其计算方法.

编程要求:利用Gauss 消元法,追赶法解线性方程组。分析误差。 计算算法:①Gauss 消元法:

1. 消元过程

设0)

(≠k kk a ,对1,,2,1-=n k 计算

n

k k j i b m b b a m a a a a m k k ik k i k i

k kj ik k ij k ij k kk k ik ik ,,2,1,/)()()

1()

()()

1()()( ++=?????-=-==++

⒉回代过程

1

,2,,1/)(/1)

()()()

()( -=?

?

???-==∑+=n i a x a b x a b x n i j i ii j i ij i i i n nn n n n ②追赶法:

1.分解Ax=f: )/(,/1111--==i i i i i a b c b c βββ

( 1,,3,2-=n i )

2.解Lg=f,求g:

)/()(,/11111----==i i i i i i i a b g a f g b f g β (n i ,,3,2 =)

3.解Ux=g,求x:1,+-==i i i i n n x y x y x β (1,2,,2,1 --=n n i ) ③范数:

常用向量范数有:(令x =( x 1,x 2,…,x n )T )

1-范数: ║x ║1=│x 1│+│x 2│+…+│x n │

2-范数: ║x ║2=(│x 1│2

+│x 2│2

+…+│x n │2

)

1/2

∞-范数: ║x ║∞=max(│x 1│,│x 2│,…,│x n │)

常用的三种向量范数导出的矩阵范数是:

1-范数:║A ║1= max{║Ax ║1/║x ║1=1}=∑=≤≤n

i jj n

j a 11max

2-范数:║A ║2=max{║Ax ║2/║x ║2=1}=1λ,λ1是A T A 的

最大特征值.

∞-范数:║A ║∞=max{║Ax ║∞/║x ║∞=1}=∑=≤≤n

j ij n

i a 11max

实验例题⑴:用Gauss 消元法解方程组

????

? ??=????? ??????? ??---654131*********x x x

实验例题⑵: 用追赶法解三对角方程组Ax=b ,其中

???????

?????????=????????????????--------=00001,2100012100012100012100012b A 实验例题⑶:设

???

? ??=3.01.05.06.0A , 计算A 的行列范数.

程序①:Gauss 消元法

function x=Gauss(A,b)

%A 是线性方程组的系数矩阵,b 为自由项. n=length(A) for k=1:n-1

m(k+1:n,k)=A(k+1:n,k)/A(k,k);

A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m(k+1:n,k)*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m(k+1:n,k)*b(k); end

x=zeros(n,1); x(n)=b(n)/A(n,n); for k=n-1:-1:1

x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);

end

x=x';

disp(sprintf('k x(k)'));

for i=0:n

disp(sprintf('%d %f ',i,x(i+1)));

end

数值结果:x=Gauss(A,b)

n =3

k x(k)

0 1.111111

1 0.777778

2 2.555556

程序②:追赶法

function [x,y,beta]=zhuiganfa(a,b,c,f)

%a,b,c是三对角阵的对角线上的元素,f是自由项.

n=length(b);

beta(1)=c(1)/b(1);

for i=2:n

beta(i)=c(i)/(b(i)-a(i)*beta(i-1));

end

y(1)=f(1)/b(1);

for i=2:n

y(i)=(f(i)-a(i)*y(i-1))/(b(i)-a(i)*beta(i-1));

end

x(n)=y(n);

for i=n-1:-1:1

x(i)=y(i)-beta(i)*x(i+1);

end

disp(sprintf('k x(k) y(k) beta(k)')); for i=0:n

disp(sprintf('%d %f ',i,x(i+1),y(i+1),beta(i+1))); end

数值结果:

a=[0 -1 -1 -1 -1]';

b=[2 2 2 2 2]';

c=[-1 -1 -1 -1 0]';

f=[1 0 0 0 0]';

[x,y,beta]=zhuiganfa(a,b,c,f)

k x(k) y(k) beta(k)

0 0.833333 5.000000e-001 -0.500000

1 0.666667 3.333333e-001 -0.666667

2 0.500000 2.500000e-001 -0.750000

3 0.333333 2.000000e-001 -0.800000

4 0.166667 1.666667e-001 0.000000

程序③:

1.列范数:

function fan=lie(A)

%A为已知矩阵

n=length(A)

for j=1:n

x(j)=0

for i=1:n

x(j)=x(j)+abs(A(i,j));

end

end

fan=max(x)

disp(sprintf('n x(n)'));

for i=0:n

disp(sprintf(' %d %f',i,x(i+1)));

end

数值结果:

fan=lie(A)

fan =0.8000

n x(n)

00.700000

10.800000

2.行范数:

function fan=hang(A)

%A为已知矩阵

n=length(A)

for i=1:n

x(i)=0

for j=1:n

x(i)=x(i)+abs(A(i,j));

end

end

fan=max(x)

disp(sprintf('n x(n)'));

for i=0:n

disp(sprintf(' %d %f',i,x(i+1)));

end

数值结果:

fan=hang(A)

fan =1.1000

n x(n)

0 1.100000

10.400000

总结:从代数上看,直接分解法和Gauss消去法本质上一样,但如果我们采用”双精度累加”计算 i i b a,那么直接三角分解法的精度要比Gauss消去法为高.

求线性方程组的直接法,其算式繁杂,给人以枯燥沉闷的感觉.

为了改善教学效果,本章着重介绍了三对角方程组的追赶法.三对角方程组以及其拓广形式的带状方程组有着广泛的实际应用.

追赶法是解三对角线方程组(对角元占优势)的有效方法,它具有计算量少,方法简单,算法稳定等优点,具有鲜明的对称美.

复习思考题

1. 用消去法解线性方程组为什么最好选主元?怎样的方程组可以不用选主元?

2. 用高斯—约当消去法求矩阵的逆,其理论根据是什么?

3. 求矩阵A的LU分解的紧凑格式有何规律?写出LU分解法解Ax = b的算法。

4. 乔累斯基分解法适用于哪类线性方程组?有何优点?

5. 追赶法有何优点?哪类方程组可用追赶法求解?

6. 向量范数与矩阵范数是如何定义的?各有何性质?常用范数有哪些?

7. 什么叫病态方程组?什么叫矩阵的条件数?条件数刻画了矩阵的什么性质?能否用选主元的方法求得病态方程组的高精度的解?

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。当右端常数项b 1, b 2, …, b m 不全为0时,称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即 a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000 +++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.2) 称为齐次线性方程组。 由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。 (利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。因此,我们先给出线性方程组的矩阵表示形式。) 非齐次线性方程组(3.1)的矩阵表示形式为: AX = B 其中 A = ????????????mn m m n n a a a a a a a a a ΛΛΛΛΛΛΛ212222111211,X = ????????????n x x x M 21, B = ????? ???????n b b b M 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

高斯消元法 主元消去法

实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. (1) 123 123 123 0.101 2.304 3.555 1.183 1.347 3.712 4.623 2.137 2.835 1.072 5.643 3.035 x x x x x x x x x ++= ? ? -++= ? ?-++= ? (2) 123 123 123 528 28321 361 x x x x x x x x x ++= ? ? +-= ? ?--= ? MATLAB计算源程序 1. 用高斯消元法解线性方程组b AX=的MATLAB程序 输入的量:系数矩阵A和常系数向量b; 输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n 和有关方程组解X及其解的信息. function [RA,RB,n,X]=gaus(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('请注意:因为RA=RB

高斯消元法讲解

#include "Stdio.h" #include "Conio.h" /*L是矩阵的行减1,从程序上看是最外层循环的次数 N 对应矩阵的行数,M对应矩阵的列数 可以通过改变L、N、M来控制矩的阶数 */ #define L 3 #define N 4 #define M 5 void gauss(double a[N][M],double x[N]) {int i,j,l,n,m,k=0; double temp[N]; /*第一个do-while是将增广矩阵消成上三角形式*/ do{n=0; for(l=k;l=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j=0) ; /*下一个for是解方程组*/ for(i=0;i

完整版高斯消元法MATLAB实现

《数值分析》实验报告 一、实验目的与要求 1.掌握高斯消去法的基本思路和迭代步骤; 2.培养编程与上机调试能力。 二、实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 21x?8x?32x?2.137x?3.712x?4.623?1.347x???312312??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312 2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 2x?8x?3x?212.137?4.6231.347?x?3.712x?x??321321??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312三.MATLAB计算源程序 AX?b MATLAB1. 程序用高斯消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, n方程组中未知量的个数的秩输出的量:系数矩阵和增广矩阵BA.及其解的信息和有关方程组解X gaus(A,b) function [RA,RB,n,X]=B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('RA~=RB.') ,所以此方程组无解请注意:因为return end if RA==RB if RA==n disp('RA=RB=n.') ,所以此方程组有唯一解请注意:因为X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);

高斯消元法简介

高斯消元法简介 一,教学目标 知识与技能:了解高斯消元法 过程与方法:直接演示说明,学习做简单练习 情感,态度和价值观:进一步体会解方程组的根本思想消元,通过高斯消元的学习增强学习数学的能力 二,重点与难点:高斯消元法 三,课型:新授课 四,教学过程: 1.在前面的几节课,已经用加减消元和代入消元法求解二元或者三元一次方程组,其基本的思想就是从已知的方程导出未知数较少的方程组,直到最后得到一个一元一次方程,这种做法可适用于一般的n 元线性方程组(线性方程组),但是由于未知数的增加,我们希望我们的消元是有规律的,以避免混乱,下面介绍高斯消元法 2.例1:解方程组 1234123412341234251027612632517315292763 x x x x x x x x x x x x x x x x ---=?? -++-=?? ---=??--++=-? 解:把第一个方程的2倍,-3倍,5倍分别加到第2,3,4个方程上,可以消去2,3,4个 方程的未知数1x 12342342342342510 522226 2 1 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 为了使以后少出现分数运算,交换第二,三个方程的位置 12342342342342510 2 1 522226 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 把第2个方程的-5倍,7倍分别加到第3,4个方程,可以消去第3,4个方程未知数2x 123423434342510 2 1 31221 6126 x x x x x x x x x x x ---=?? +-=?? --=??-=-? 整理一下方程,第3个方程的左右两边乘以13 - ,第4个方程左右两边乘以1 6 123423434342510 2 1 47 21 x x x x x x x x x x x ---=?? +-=?? +=-??-=-?

高斯消元法

求解线性方程组的直接解法 5.1 Gauss 消去法 ① 三角方程组 先举一个简单的例子来说明消去法的基本思想. 例1. 用消去法解方程组 ??? ??=+-=-=++(3) .122(2) ,54(1) ,6321 32321x x x x x x x x 解 第一步.将方程(1)乘上-2加到方程(3)上去,消去(3)中的未知数1x ,得到 (4) .11432-=--x x 第二步.将方程(2)加到方程(4)上去,消去方程(4)中的未知数2x ,得到与原方程组等 价的三角形方程组 (5) .62 ,54 ,6332321?? ? ??-=-=-=++x x x x x x 显然,方程组(5)是容易求解的,解为.)3,2,1(T x =* 上述过程相当于 332331 (-2) 6-56 20014011111-56 140140111156 122140111)|(r r r r r r b A →+→+??? ? ?? ??--→????? ??---→????? ??--= 其中用i r 表示矩阵的第i 行. 下面我们讨论求解一般线性方程组的高斯消去法. 一般地 ???????==++=+++n n nn n n n n b x a b x a x a b x a x a x a 2 222211212111 当a 11a 22…a nn ≠0时,可解出 x n =b n /a nn for k=n-1:1 x k =(b 1- a k,k+1x k +1-…- a kn x n )/ a kk end

注: k k b x ,可用同一组单元.并可解出一个未知数即代入其它方程消去该未知数 Gauss 消元法的流程图为: 流程图中,,(,1,2,...,)ij i a b i j n 分别为线性方程组的系数矩阵和常数向量; k 是循环次数。 ② 顺序消去法 一般地,k =1对n 阶方程组消去第k 个元(a kk ≠0):

高斯消元法

这里向你推荐一下克鲁特算法(其实就是对高斯列主元消元法进行优化,使之更适合于计算机编程),首先将矩阵A进行LU分解(将系数矩阵分解成一个上三角矩阵和一个下三角矩阵),分解的过程中用到了隐式的主元寻找法,同时利用克鲁特算法可以将两个n*n矩阵压缩到一个n*n矩阵中,大大节省了存储空间提高了计算速度。 方程可化为L*U*x=B,令U*x=y --->L*y=B 然后利用回代先求y,再利用y求x 因为该方法在求解过程中不涉及增广矩阵所以矩阵B几乎不参与什么运算,所以它的计算速度应该能够达到高斯列主元消元法的三倍,但原理与其基本一致。 而且我在程序中使用了动态数组方便你今后进行扩展。 以下程序按照《矩阵论第二版》和《C语言数值计算法方法大全》编写,LU分解部分程序主要参考了《C语言数值计算法方法大全》第二章的程序 如果你需要详细的理论讲解我可以将这两本书和源程序发给你.,我的邮箱 hu_hu605@https://www.360docs.net/doc/962505386.html, 计算结果: A矩阵: 2 2 5 3 4 7 1 3 3 B矩阵: 5 6 5 解矩阵: x 1=-7 x 2=0.333333 x 3=3.66667 Press any key to continue #include #include #include #include #include #include #include using namespace std; #define TINY 1.0e-20 //A small number. #define N 3

高斯消元法(完整)教学内容

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=??????? (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。当右端常数项b 1, b 2, …, b m 不全为0时,称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即 a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000 +++=+++=+++=??????? (3.2) 称为齐次线性方程组。 由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。 (利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。因此,我们先给出线性方程组的矩阵表示形式。) 非齐次线性方程组(3.1)的矩阵表示形式为: AX = B 其中 A = ????????????mn m m n n a a a a a a a a a 212222111211,X = ????????????n x x x 21, B = ????? ???????n b b b 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

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

高斯列主元消元法解线性方程组 一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中, A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803?? ? ? ? ? ? ? ? ??? 0.230 -52.322 54.000 240.236 29.304 -117.818b ?? ? ? ?= ? ? ? ? ??? T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068) 二、原理及步骤分析 设 n n ij R a A ?∈=][)1(,n n R b b b b ∈=],,,[)1()2(2)1(1 。若约化主元素 ),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。 如果在消元过程中发现某个约化主元0) (=k kk a , 则第K 次消元就无法进行。此外,即 使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。 为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为: (1)选主元:在子块的第一列中选择一个元) (k k i k a 使) (max k ik n i k k k i a a k ≤≤= 并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算 ()()()???? ?????++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj ik k ij k ij k kk k ik k ik ,,2,1,,2,1,,,2,1)()() 1() ()()1()() ()( (3)回代求解 ???? ????????? ??-==∑+=) (1) ()()() (i ii n i j j i ij i i i n nn n n n a x a b x a b x ()1,,2,1 --=n n i

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术与工程管理中有许多问题经常可以归结为线性方程组类型得数学模型,这些模型中方程与未知量个数常常有多个,而且方程个数与未知量个数也不一定相同.那么这样得线性方程组就是否有解呢?如果有解,解就是否唯一?若解不唯一,解得结构如何呢?这就就是下面要讨论得问题. 一、线性方程组 设含有n个未知量、有m个方程式组成得方程组 (3、1) 其中系数,常数都就是已知数,就是未知量(也称为未知数)。当右端常数项,,…,不全为0时,称方程组(3、1)为非齐次线性方程组;当== …== 0时,即 (3、2) 称为齐次线性方程组. 由n个数, , …, 组成得一个有序数组(,,…,),如果将它们依次代入方程组(3、1)中得,,…, 后,(3、1)中得每个方程都变成恒等式,则称这个有序数组(,,…,)为方程组(3、1)得一个解。显然由=0, =0, …, =0组成得有序数组(0,0,…,0)就是齐次线性方程组(3、2)得一个解,称之为齐次线性方程组(3、2)得零解,而当齐次线性方程组得未知量取值不全为零时,称之为非零解. (利用矩阵来讨论线性方程组得解得情况或求线性方程组得解就是很方便得。因此,我们先给出线性方程组得矩阵表示形式。) 非齐次线性方程组(3、1)得矩阵表示形式为: AX =B 其中 A=,X=,B = 称A为方程组(3、1)得系数矩阵,X为未知矩阵,B为常数矩阵。将系数矩阵A与常数矩阵B放在一起构成得矩阵 = 称为方程组(3、1)得增广矩阵。 齐次线性方程组(3、2)得矩阵表示形式为:AX=O 二、高斯消元法 (下面介绍利用矩阵求解方程组得方法,那么矩阵初等行变换会不会改变方程组得解呢?我们先瞧一个定理。) 定理3、1若用初等行变换将增广矩阵化为,则AX= B与CX =D就是同解方程组。 证由定理3、1可知,存在初等矩阵,,…, ,使 …= 记…= P,则P可逆,即存在。 设为方程组A X=B得解,即 A= B 在上式两边左乘P,得 P A = PB 即 C=D 说明也就是方程组C X=D得解。反之,设为方程组C X =D得解,即

高斯消元法求解线性方程组

数值分析 程 序 设 计 学院:计算机学院 姓名:袁薪洋 时间:2012年10月10日

1.实验目的: 1熟练掌握C语言程序设计,编程求解问题。 2.运用高斯消元法求解线性方程组。 2.实验内容: 用高斯消元法求解方程组。 0.001 2.000 3.000 x1 1.000 -1.000 3.172 4.623 x2 = 2.000 -2.000 1.072 5.643 x3 3.000 程序的完整代码: #include #include #define row 3 void M_Print(float(*a)[row],float* b) { int i,j; printf("**********************************\n\n"); printf("用高斯主元消去法求解线性方程组:\n\n"); printf("**********************************\n\n");

for(i=0;i

(Gauss-Jordan)消元法

(Gauss-Jordan)消元法 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵、解线性方程组(插一句:LM算法求解的一个步骤),等等。它的速度不是最快的,但是它非常稳定(来自网上的定义:一个计算方法,如果在使用此方法的计算过程中,舍入误差得到控制,对计算结果影响较小,称此方法为数值稳定的),同时它的求解过程也比较清晰明了,因而人们使用较多。下面我就用一个例子来告诉你Gauss-Jordan法的求解过程吧。顺便再提及一些注意事项以及扩展话题。 对本文中所提到的“主元”等概念的解释,可以参考此链接。 假设有如下的方程组: 写成矩阵形式就是:AX=B,其中: 且X=(X 1, X2, X3)T。 文章来源:https://www.360docs.net/doc/962505386.html,/ 现对矩阵A作初等变换,同时矩阵B也作同样的初等变换,则当A化为单位矩阵的时候,有: 显而易见,我们得到了方程组的解X=(1, 2, 4)T。

所以,我们要以一定的策略,对A和B施以一系列的初等变换,当A化为单位矩阵的时候,B就为方程组的解。 选主元的G-J消元法通过这样的方法来进行初等变换:在每一个循环过程中,先寻找到主元,并将主元通过行变换(无需列变换)移动到矩阵的主对角线上,然后将主元所在的行内的所有元素除以主元,使得主元化为1;然后观察主元所在的列上的其他元素,将它们所在的行减去主元所在的行乘以一定的倍数,使得主元所在的列内、除主元外的其他元素化为0,这样就使得主元所在的列化为了单位矩阵的形式。这就是一个循环内做的工作。然后,在第二轮循环的过程中,不考虑上一轮计算过程中主元所在的行和列内的元素,在剩下的矩阵范围内寻找主元,然后(如果其不在主对角线上的话)将其移动到主对角线上,并再次进行列的处理,将列化为单位矩阵的形式。余下的步骤依此类推。具体的计算过程的一个例子,请看下面我举的求逆矩阵的过程。 如果要解系数矩阵相同、右端向量不同的N个方程组,在设计程序的时候,没有必要”解N 次方程组“,我们完全可以在程序中,将所有的右端向量以矩阵的数据结构(类似于二维数组)来表示,在系数矩阵作行变换的时候,矩阵里的每一个右端向量也做同样的变换,这样,我们在一次求解运算的过程中,实际上就是同时在解N个方程组了,这是要注意的地方。 文章来源:https://www.360docs.net/doc/962505386.html,/ 那么,G-J法为什么可以用来求逆矩阵? 假设AX=E,其中,A为n阶系数矩阵(与上面的解线性方程组对照);E为单位矩阵,即E=(e1,e2,…,e n),其中e i (i=1,2,…,n) 为单位列向量;X为n个列向量构成的矩阵,即 X=(x1,x2,…,x n),其中x i (i=1,2,…,n) 为列向量。于是,可以把等式AX=E看成是求解n个线性方程组Ax i=e i(i=1,2,…,n),求出了所有的x i之后,也即得到了矩阵X。而由AX=E可知,矩阵X是A的逆矩阵,即X=A-1。这样,就求出了A的逆矩阵了。于是,求逆矩阵的过程被化成了解线性方程组的过程,因此我们可以用Gauss-Jordan消元法来求逆矩阵。 求逆矩阵时,系数矩阵A和单位矩阵E可以共用一块存储区,在每一次约化过程中,系数矩阵逐渐被其逆矩阵替代。 在这里,我用一个实际的例子来说明G-J法求逆矩阵的过程: 有如下的方程组: 显而易见,该方程组对应的系数矩阵A和右端向量矩阵B(此处只有一个右端向量)分别为:

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=??????? (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。当右端常数项b 1, b 2, …, b m 不全为0时, 称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即 a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000 +++=+++=+++=??????? (3.2) 称为齐次线性方程组。 由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。 (利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。因此,我们先给出线性方程组的矩阵表示形式。) 非齐次线性方程组(3.1)的矩阵表示形式为: AX = B 其中 A = ????????????mn m m n n a a a a a a a a a 21 2222111211,X = ????????????n x x x 21,B = ????????????n b b b 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

相关文档
最新文档