数值分析实验6 (1)

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

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) ⎥⎥⎥⎥⎦

⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢

⎢⎣⎡----1

5

900001.58

20

1

2

151********.23

107104321x 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及以上版本。 实验讲评:

实验成绩:

评阅教师:

2011年6 月 30日

Lab06.Gauss列主元素消去法实验

一算法描述

1编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件程序如下

function [x,l,u]=malu(A,b)

format short

n=length(b);

u=zeros(n,n);l=eye(n,n);

u(1,:)=A(1,:);l(2:n,1)=A(2:n,1)/u(1,1);

for k=2:n

u(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);

l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k);

end

y=zeros(n,1);

y(1)=b(1);

for k=2:n

y(k)=b(k)-l(k,1:k-1)*y(1:k-1);

end

x=zeros(n,1);

x(n)=y(n)/u(n,n);

for k=n-1:-1:1

x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);

end

2、Gauss列主元消去法解线性方程组程序如下:

function [Determ,x]=magauss2(A,b,flag)

%Gauss列主元素消去法解线性方程组Ax=b,A为系数矩阵,b为右端项%若flag=0,不显示中间消去过程,否则显示中间消去过程,默认为0 %输出项Determ为矩阵A的行列式值,x为解向量

if nargin<3,flag=0;end

Determ=1;

n=length(b);

for k=1:(n-1)

[ap,p]=max(abs(A(k:n,k)));

p=p+k-1;

if ap==0

printf('divide by zero!');

Determ=0;

end

%换行

if p>k

t=A(k,:); A(k,:)=A(p,:);A(p,:)=t;

t=b(k);b(k)=b(p);b(p)=t;

Determ=-Determ;

end

%消元计算

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

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

A(k+1:n,k)=zeros(n-k,1);

if flag~=0,Ab=[A,b],end %展示消元过程

Determ=A(k,k).* Determ;

end

if A(n,n)==0

printf('divide by zero!');

Determ=0;

end

%回代求解

x=zeros(n,1);

x(n)=b(n)/A(n,n);

for i=(n-1):-1:1

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

end

Determ=A(n,n).* Determ;

三计算过程

;直接三角分解法

(1):A=[3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34]

b=[1;1;1]

[x1,l1,u1]=malu(A,b);

x1

l1

u1

A =

3.0100 6.0300 1.9900

1.2700 4.1600 -1.2300

0.9870 -4.8100 9.3400

b =

1

1

1

x1 =

1.0e+003 *

1.5926

-0.6319

-0.4936

l1 =

1.0000 0 0

0.4219 1.0000 0

0.3279 -4.2006 1.0000

u1 =

3.0100 6.0300 1.9900

0 1.6158 -2.0696

0 0 -0.0063

相关文档
最新文档