文档库 最新最全的文档下载
当前位置:文档库 › Gauss列主元消去法程序设计.doc

Gauss列主元消去法程序设计.doc

Gauss列主元消去法程序设计.doc
Gauss列主元消去法程序设计.doc

实用文案

《 Gauss 列主元消去法》实验报告

实验名称: Gauss 列主元消去法程序设计成绩:___________

专业班级:数学与应用数学1202 班姓名:王晓阳学号:2012254010228

实验日期:2014 年11月10日

实验报告日期:2014 年 11 月 10 日

一.实验目的

1.学习 Gauss 消去法的基本思路和迭代步骤.

2.学会运用 matlab编写高斯消去法和列主元消去法程序,求解线性方程组.

3.当 a kk k绝对值较小时,采用高斯列主元消去法.

4.培养编程与上机调试能力.

二、实验内容

用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方

程组 Ax b 化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回

代的方法求解 .

1.求解一般线性方程组的高斯消去法.

(1)消元过程:

设 a k 0 ,第 i 个方程减去第 k 个方程的 m a k / a k 倍,

kk ik ik kk

(i k 1,L ,n) ,得到 A k 1 x b k 1.

a k 1 a k m a k , i , j k 1, , n

ij ij ik kj L

b k 1 b k m b k

i i ik k

经过 n-1 次消元,可把方程组 A 1 x b 1化为上三角方程组 A n x b n.

(2)回代过程:

x n b n n / a nn n

x b i n a i x / a i , i n 1,L ,1

j

i i ij ii

j i 1

以解如下线性方程组为例测试结果.

10x17 x27

3x12x26x3 4

5x1x25x3 6

2.列主元消去法

由高斯消去法可知,在消元过程中可能出现 a kk k 0 的情况,这是消去法将无法进行,即使主元素 a kk k 0 但很小时,用其作除数,会导致其他元素数量级

的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元

素,假定线性方程组的系数矩阵 A 是菲奇异的 .

(1)消元过程:

对于 k 1,2,L , n 1 ,进行如下步骤:1)按列选主元,记

a

pk max a ik

k i n

2)交换增广阵 A 的 p,k 两行的元素。

A(k,j)=A(p,j) ( j=k,,n +1) 3)交换常数项 b 的 p,k 两行的元素。

b(k)=b(p)

4)计算消元

a

ij k 1 a

ij k

m

ik

a

kj

k , i , j k 1,L , n

b i k 1 b i k m ik b k k

(2)回代过程

x n b n n n

/ a nn

i

n

i x j / a ii i , i n 1,L ,1

x i b i

a

ij j i 1

(3)以解如下线性方程组为例测试结果 .

0.00001x1x2 1

2x1x2 2

三、实验环境MATLAB R2014a

四、实验步骤

1.高斯列主元消去法流程图:

开始

输入系数阵 a

和常数项 b

按列选主元

交换元素

计算消元

回代

输出线性方程

组的解

结束

2.程序设计:

( 一) 高斯消去法:

a=input( '请输入系数阵: ');

b=input( '请输入常数项: ' );

n=length(b);

A=[a,b];

x=zeros(n,1);%初始值

for k=1:n-1

for i=k+1:n%第k 次消元m(i,k)=A(i,k)/A(k,k);

for j=k+1:n

A(i,j)=A(i,j)-A(k,j)*m(i,k);

end

b(i)=b(i)-m(i,k)*b(k);

end

end

x(n)=b(n)/A(n,n);%回代

for i=n-1:-1:1;

s=0;

for j=i+1:n;

s=s+A(i,j)*x(j);

end

x(i)=(b(i)-s)/A(i,i)

end

(二)高斯列主元消去法:

a=input('请输入系数阵:' );

b=input('请输入常数项:');

n=length(b);

A=[a,b];

x=zeros(n,1);%初始值

for k=1:n-1

if abs(A(k,k))<10^(-4); %判断是否选主元

y=1

else

y=0;

end

if y;%选主元

for i=k+1:n;

if abs(A(i,k))>abs(A(k,k))

p=i;

else p=k;

end

end

if p~=k;

for j=k:n+1;

s=A(k,j);

A(k,j)=A(p,j); %交换系数

A(p,j)=s;

end

t=b(k);

b(k)=b(p); %交换常数项

b(p)=t;

end

end

for i=k+1:n

m(i,k)=A(i,k)/A(k,k);%第 k 次消元

for j=k+1:n

A(i,j)=A(i,j)-A(k,j)*m(i,k);

end

b(i)=b(i)-m(i,k)*b(k);

end

end

x(n)=b(n)/A(n,n); %回代

for i=n-1:-1:1;

s=0;

for j=i+1:n;

s=s+A(i,j)*x(j);

end

x(i)=(b(i)-s)/A(i,i)

end

五、实验结果Gauss1

请输入系数阵: [10,-7,0;-3,2,6;5,-1,5]

请输入常数项: [7;4;6]

x =

-1.0000

1.0000

x =

-0.0000

-1.0000

1.0000

X= (0,-1 ,1)

Gauss2

请输入系数阵: [10^(-5),1;2,1]

请输入常数项: [1;2]

y =

1

x =

0.5000

1.0000

X= (0.5,1)

六、实验讨论、结论

本实验通过matlab程序编程实现了高斯消去法及高斯列主元消去法的求

解,能加深对高斯消去法基本思路与计算步骤的理解。当主元素特别小时,需要选取主元,否则会影响结果,这时就需要采用高斯列主元消去法。

七、参考资料

[1]李庆杨,王能超,易大义 . 数值分析 . 清华大学出版社, 2008 ,P142

[2]刘卫国 . MATLAB 程序设计与应用 . 高等教育出版社, 2006 ,P163

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

计算方法实验报告1 【课题名称】 用列主元高斯消去法和列主元三角分解法解线性方程 【目的和意义】 高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。 用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为 32(1)(1)(21)(1)(1)262233n n n n n n n n n n n MD n ----+= +++=+-,加减运算步骤为 (1)(21)(1)(1)(1)(25) 6226 n n n n n n n n n n AS -----+= ++= 。相比之下,传统的克莱姆 法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19 510?次乘法,而用高斯消去法只需要3060次乘除法。 在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。 2、列主元三角分解法 高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。回带过程就是求解上三角方程组Ux=y 。所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法 采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度 【计算公式】 1、 列主元高斯消去法 设有线性方程组Ax=b ,其中设A 为非奇异矩阵。方程组的增广矩阵为 第1步(k=1):首先在A 的第一列中选取绝对值最大的元素 1l a ,作为第一步的主元素: 111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ?? ???? ?? =?????? ?? ????a b

数值分析列主元消去法的实验报告

实验一 列主元消去法 【实验内容】 1.掌握列主元消去法的基本思路和迭代步骤 2.并能够利用列主元的高斯消去法解任意阶数的线性方程组; 3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。 【实验方法与步骤】 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =-L (1) 选主元,找{},1,,k i k k n ∈+L 使得 ,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 =+L ; (4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算 .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 =-L ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑

[实验程序] #include #include #include #include #define NUMBER 20 #define Esc 0x1b #define Enter 0x0d using namespace std; float A[NUMBER][NUMBER+1] ,ark; int flag,n; void exchange(int r,int k); float max(int k); void message(); void main() { float x[NUMBER]; int r,k,i,j; char celect; void clrscr(); printf("\n\nUse Gauss."); printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc."); celect=getch(); if(celect==Esc) exit(0); printf("\n\n input n="); scanf("%d",&n); printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++) { printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i); for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); } for(k=1;k<=n-1;k++) { ark=max(k); if(ark==0) { printf("\n\nIt’s wrong!");message();

利用高斯列主元消去法求如下线性方程组的解

%利用高斯列主元消去法求如下线性方程组的解 clear all; A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15]; function [X,XA] = UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 N=size(A); n=N(1); index=0; for i=1:(n-1) me=max(abs(A(1:n,i)));%选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb;%交换主行 for j=(i+1):n if(a(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m;

end; X=UpTriangleFun(A,b); XA=A; ----------------------------------------------------------------------------------------------------------------------------- % 函数定义 function [X,XA]= UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 [N,M]=size(A); %N=sizes(A); n=N; index=0; for i=1:(n-1) me=max(abs(A(1:n,i))); %选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb; %交换主行 for j=(i+1):n if(A(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m; end; end;

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

一、 列主元素Gauss 消去法、Jacobi 迭代法原理及计算方法 1. 列主元素Gauss 消去法: 1.1 Gauss 消去法基本原理 设有方程组Ax b =,设A 是可逆矩阵。高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 1.2 列主元Gauss 消去法计算步骤 将方程组用增广矩阵[]()(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 +=+??=- ??? ∑ 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 收敛于方程组的精确解.

Gauss列主元消去法

贵州师范大学数学与计算机科学学院学生实验报告 课程名称:数值分析班级:数本(一)班实验日期:年月日 学号: 0098(81)姓名:吴胜指导教师:杨一都 实验成绩:一、实验名称 实验五:线性方程组的数值解法 二、实验目的及要求 1. 让学生掌握用列主元gauss消去法、超松弛迭代法求解线性方程组. 2. 培养Matlab编程与上机调试能力. 三、实验环境 每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、(或. 四、实验内容 1. 编制逐次超松弛迭代(SOR迭代)函数(子程序),并用于求解方程组

???????=-++=+-+=++-=+++-1 4141414432143214 3214321x x x x x x x x x x x x x x x x 取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5)1()(102 1 ||||--?≤-k k x x 请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR 迭代的收敛速度是否一定比Gauss-Seidel 迭代快 2. 编制列主元 Gauss 消去法函数(子程序),并用于解 ??? ??=++-=-+-=+-6 15318153312321 321321x x x x x x x x x 要求输出方程组的解和消元后的增广矩阵. 注:题2必须写实验报告 五、算法描述及实验步骤 Gauss 消去法: 功能 解方程组b Ax = . 输入 n ,n n ij a A ?=)(,T n b b b b ),,,(21 =. 输出 方程组的解T n x x x x ),,,(21 =或失败信息. 步1 对1,,2,1-=n k 执行步2→步4 . 步2 调选列主元模块 .

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

高斯列主元消元法解线性方程组 一、题目:用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)回代求解

Matlab中Gauss全主元消元法求解线性方程组的程序

Matlab中Gauss全主元消元法求解线性方程组的程序 function [x,qa]=gaussq(a,b) %输出想x为解,qa为全主元变换后的a矩阵d=[a b]; RA=rank(a);RD=rank(a);L=length(b);n=size(a);pos=1:n(1); if RA~=RD fprintf('无解') else if RA~=L fprintf('有无数多个解') else fprintf('有唯一解') for q=1:n big=max(max(abs(a(q:n,q:n)))); for r=q:n for t=q:n if big==abs(a(r,t)) zhuh=r; zhul=t; end end end p=a(q,:); %换主行 a(q,:)=a(zhuh,:); a(zhuh,:)=p; bb=b(q); b(q)=b(zhuh); b(zhuh)=bb; p=a(:,q); %换主列

a(:,q)=a(:,zhul); a(:,zhul)=p; p=pos(q); %记录由于换主列而造成的解的位置的变化 pos(q)=pos(zhul); pos(zhul)=p; end c=[a b]; for j=1:L-1 %化为上三角阵 for i=(j+1):L m=c(i,j)/c(j,j); c(i,:)=c(i,:)-c(j,:)*m; end end x(L,1)=c(L,L+1)/c(L,L); for k=L-1:-1:1 %求解x x(k,1)=(c(k,L+1)-c(k,k+1:L)*x(k+1:L))/c(k,k); end y=[1:n(1)]'; %交换被列调换时打乱的解的位置 for w=1:n for v=1:n if (pos(v)==w) y(w)=x(v); end end end x=y; end

列主元消去法

实验一 列主元消去法 【实验内容】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 #include #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

高斯法和列主元高斯消去法解线性方程组(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 % 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))%误差 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);

列主元高斯消去法的实现

《数值分析课程设计》 报告 专业: 学号: 学生姓名: 指导教师:

一、题目 列主元guess消去法求方程的解 二、理论 列主元高斯消去法是在高斯消去法的基础上而得到的一种比较快速合理的解线性方程组的方法。它的基本思想是每次在所在列对角线及以下元素中选择绝对值最大的元素作为主元进行消元计算。使用列主元消去法相对于高斯消去法更能减少舍入误差的影响。 三、方法、算法与程序设计 求解Ax=b 第一步:写出增广矩阵[A| b]; 第二步:判断增广矩阵的秩r[A|b]与A的秩r[A]的关系: 若r[A|b]= r[A],线性方程组有唯一解; 若r[A|b]>r[A],线性方程组没有解; 若r[A|b]

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告 实验名称:Gauss列主元消去法程序设计???成绩:_________ 专业班级:数学与应用数学1202班?姓名:王晓阳???学号: 实?验?日?期:?2014?年11月10日 实验报告日期:?2014年?11月10日 一.实验目的 1. 学习Gauss消去法的基本思路和迭代步骤. 2. 学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组. 3. 当绝对值较小时,采用高斯列主元消去法? 4. 培养编程与上机调试能力. 二、实验内容 用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax二b 化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解 1. 求解一般线性方程组的高斯消去法? (1) 消元过程: 设a kk k-0 ,第i个方程减去第k个方程的m ik Tk k倍,("k 1^1, n),得到 A k1x=b k1.

经过n-1次消元,可把方程组A1^b1化为上三角方程组A n x=b n. ⑵回代过程: 以解如下线性方程组为例测试结果 2. 列主元消去法 由高斯消去法可知,在消元过程中可能出现a kk k =0的情况,这是消去法将无法进行, 即使主元素a kk k-0但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A是菲奇异的. (1)消元过程: 对于k =1,2,川,n -1,进行如下步骤: 1) 按列选主元,记 2) 交换增广阵A的p,k两行的元素 A(k,j)=A(p,j) ( j=k,…,n +1) 3) 交换常数项b的p,k两行的元素。 b(k)=b(p) 4) 计算消元 (2) 回代过程 (3) 以解如下线性方程组为例测试结果 三、实验环境 MATLAB R2014a 四、实验步骤

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

完全主元素消去法

2012-2013(1)专业课程实践论文 完全主元素消去法 董健0818180101,R数学08-1班 陈泊宇0818180116,R数学08-1班

一、算法理论 设方程组的增广矩阵为 ????????? ? ????? ?????=n nn nj n n i n i j i i i n j n j b a a a a b a a a a b a a a a b a a a a B i 1 111111121 2122222211111211 首先在A 中选取绝对值最大的元素作为主元素,例如0max 1111≠=≤≤≤≤ij n j n i j i a a ,然后交 换B 的第一行与第1i 行,第1列于第1j 列,经第一次消元计算得 ()().,,)2()2(b A b A → 重复上述过程,设已完成第k-1步的选主元素,交换两行及交换两列,消元计算,(A ,b )约化为 () ????????? ? ?? ??? ???? ?=n nn nk k kn kk n n k k b a a b a a b a a b a a a b A 2222111211)()(,, 其中)(k A 元素仍记作ij a ,)(k b 元素仍记作().1,.2,1-=n k b i 第K 步选主元素(在)(k A 右下角方框内选),即确定k k j i ,使 .0m a x ≠=≤≤≤≤ij n j k n i k j i a a k k 交换())()(,k k b A 第k 行与k i 行元素交换())(k A 第k 列与k j 列元素,将k k j i a 调到(k,k )位置,在进行消元计算,最后将原方程组化为 ,212122211211? ???? ? ??????=????????????????????????n n nn n n b b b y y y a a a a a a 其中n y y y ,,,21 的次序为未知数n x x x ,,21调换后的次序。回代求解得

高斯消元法 主元消去法

实验内容 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

列主元素消去法求解方程组

列主元素消去法求解方程组 [摘 要]在自然科学和工程中有很多问题的解决归结为求解线性方程组或者非线性方程组的数学问题。例如,电学中的网络问题,用最小二乘法求实验数据的曲线拟合问题,三次样条的插值问题等等。求解线性方程组的直接法主要有选主元高斯消去法、平方根法、追赶法等。列主元素消去法既是选主元高斯消去法的一种,也是实际计算中常用的部分选主元消去法。本文即是讨论利用列主元素消去法求解线性方程组问题。 [关键词]按列选主元 交换 消元 回代 一 列主元素消去法背景 在科学研究和工程技术中有许多问题可归结为求解线性代数方程组,其中所产生的线性方程组,其系数矩阵大致可分为两种:一种是低阶稠密矩阵;另一类是大型稀疏矩阵(此类矩阵阶数高,但零元素较多)。对于这两种矩阵,我们可以把线性代数方程组的数值解法大致的分为两类:直接法和迭代法。迭代法一般用来求解大型稀疏矩阵方程组(本文不予讨论);直接法是目前计算机上解低阶稠密矩阵的有效方法,如果计算过程中没有舍入误差,则此种方法通过有限步四则运算可求的方程组的精确解,但实际计算中由于舍入误差的存在和影响,这种方法也只能求得方程组的近似解。直接法主要有选主元素高斯消去法、平方根法、追赶法等。本文所要讨论的列主元素消去法就是选主元素高斯消去法中的一种。 高斯消去法是一个古老的求解线性方程组的方法,也是解线性方程组问题中较为常见的一种数值方法。但在采取高斯消去法解方程组时,当采用绝对值很小的主元素时,可能导致计算结果的失败,故在消去法中应避免采用绝对值很小的主元素。对于一般的线性方程组,需要引进选主元的技巧,即在高斯消去法的每一步应该在系数矩阵或消元后的低价矩阵中选取绝对值最大的元素作为主元素,保持乘数1 ik m ,以便减少计算过程中舍入误差对计算解的影响。 选主元素消元法则是对高斯消去法的改进,是解低价稠密矩阵方程组的有效方法。选主元素消元法则避免了采用绝对值很小的主元素。选主元素消去法主要有完全主元素消去法与列主元素消去法两种。完全主元素消去法即是每次按行列选取绝对值最大的元素作为

列主元高斯消去法求逆矩阵

列主元高斯消去法求逆矩阵程序代码: #include #include #define Max 10 int n; double M[Max][Max]; double E[Max][Max]; bool FindMax(int t) //列主元素 { int i, j, k=t; double max = fabs(M[t][t]), temp; for (i = t+1 ;i < n; i++) if (max

M[i][j] = M[i][j] - M[t][j]*m; E[i][j] = E[i][j] - E[t][j]*m; } } } void HuiDai(int t) { int i,j; double max; max=M[t][t]; for(i=t;i=0;i--) { max=M[i][t]; M[i][t]=0; for(j=0;j

列主元消去法MATLAB程序

列主元消去法MATLAB程序: function [RA,RB,n,X]=liezhu(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('??×¢òa£oòò?aRA~=RB£??ùò?′?·?3ì×é?T?a.') return end if RA==RB if RA==n disp('??×¢òa£oòò?aRA=RB=n£??ùò?′?·?3ì×éóD?¨ò??a.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 [Y,j]=max(abs(B(p:n,p))); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,:)=C; 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('??×¢òa£oòò?aRA=RB

列主元消除法,M文件 a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48]; b=[0.05;1.03;-0.53]; [RA,RB,n,X]=liezhu(a,b) 运行结果;

数值分析实验二(列主元Gauss消去法)

《数值分析》实验报告 实验编号:实验二 课题名称:列主元Gauss消去法 一、算法介绍 1、输入矩阵的阶数n,方程组的增广矩阵A; 2、对k=0,1,…,n-2,循环:选取列中绝对值最大的元素,将主元所在的行的元素保存在 数组temp[n+1]中。若主元为零,则系数矩阵奇异,计算停止;否则,顺序进行。如果绝对值最大的元素就在矩阵的对角线上,则进行普通高斯消元法的第一大步,否则将方程组系数换行之后再进行普通高斯消元法的第一大步; 3、然后利用回代法求解线性方程组。 二、程序代码 #include #include #include using namespace std; int main() { int n=0,k=0,i=0,j=0,h=0,g=0,flag=0,i1,j1; double max=0,m=0; cout<<"***利用列主元Gauss消元法求解线性方程组***"<>n; double a[n][n+1]; double t[n+1]; double x[n]; memset(a,0,sizeof(a)); memset(x,0,sizeof(x)); cout<<"请输入方程组的增广矩阵:"<>a[i][j]; } } for(k=0;kmax) { max=fabs(a[i][k]); i1=i; j1=k; } } if(max==0)

高斯列主元消去法

数值分析大作业 --――(高斯列主元消去法求解线性方程组) 课程名称:数值分析 授课老师:宋国乡 指导导师:丁振国 学生:王伟伟 学号:0425121523 日期:2004/11/20

高斯列主元消去法解线性方程组 一:问题的提出 我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。实际运算的时候因为只能有限小数去计算,因此只能得到近似值。在实际运算的时候,我们很多时候也常用高斯消去法。但是高斯消去法在计算机中运算的时候常会碰到两个问题。 1.一旦遇到某个主元等于0,消元过程便无法进行下去。 2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。 为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。 二、算法的基本思想 大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。高斯消元法的目的就是把一般线性方程组简化成上三角方程组。于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程

相关文档
相关文档 最新文档