计算方法作业第六章

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

1.考虑两个线性方程组,其系数矩阵如下

1211

11...23211111...1212341,121

11

11...3452........................

...

(12111)

1 (1)

2

21n n A A n n n n n ⎡

⎤⎢⎥⎢

⎥-⎡⎤⎢⎥⎢⎥--⎢⎥

+⎢⎥

⎢⎥⎢⎥==--⎢⎥⎢⎥⎢⎥+⎢⎥⎢⎥

⎢⎥-⎣⎦

⎥⎢⎥⎢⎥++-⎣⎦

问题的真解均取为[1,1,1,1,...1]T

x =,线性方程组的右端项用这个真解计算出来。相应的问题分别称为问题I 和问题II 。请进行如下数值实验:

(1) 对问题I 分别用Gauss 消元法,Cholesky 方法,修改的LDLT 算法,追赶法四

种方法求解,其中n=100;

(2) 对问题II 分别用Gauss 消去法,列主元Gauss 消去法,不做行交换的列主元

Gauss 消去法求解,其中n=6;

(3) 不断增加问题II 的矩阵阶数n=6,8,10,…,20,重复(2)的工作,看看会有什么

问题发生?解释其原因。

(1) Gauss : 计算程序: n=100; A=2*eye(n); for i=1:n-1 A(i+1,i)=-1; A(i,i+1)=-1; end b=0; b(1)=1; b(100)=1;

[x,XA]=GaussJordanXQ(A,b); Gauss 消元法源程序:

%用Gauss 消元法解线性方程组 function [x,XA]=GaussJordanXQ(A,b) N = size(A); n = N(1); for i=1:(n-1)

for j=(i+1):n

if(A(i,i)==0)

disp('对角元素为0!');

%防止对角元素为0

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

x=SolveUpTriangle(A,b);

%通用的求上三角系数矩阵线性方程组的函数XA = A;

%消元后的系数矩阵

(SolveUpTriangle.m)解上三角方程组源程序:%解上三角方程组

function x=SolveUpTriangle(A,b)

N = size(A);

n = N(1);

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

for k=n-1:1

s=0;

for i=k+1:n

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

end

x(k)=(b(k)-s)/A(k,k);

end

结果:

x1=[0,0,0,…..0,0,1]T

x2=[0,0,0,…..0,0,0.3820]T

x3=[0,0,0,…..0,0,0.9900]T

x4=[1,1,1,…..1,1,1]T

Cholesky:

计算程序:

n=100;

A=2*eye(n);

for i=1:n-1

A(i+1,i)=-1;

A(i,i+1)=-1;

end

b=0;

b(1)=1;

b(100)=1;

x2=Cholesky(A,b); (Cholesky.m):Cholesky法源程序%用Cholesky方法解线性方程组function x=Cholesky(A,b);

N=size(A);

n=N(1);

L(1,1)=sqrt(A(1,1));

%L为下三角矩阵

for j=2:n

L(j,1)=A(1,j)./L(1,1)

end

for k=2:n

s=0;

for i=1:k-1

s=s+L(k,i);

end

L(k,k)=sqrt(A(k,k)-s);

for j=(k+1):n

sum=0;

for i=1:k-1

sum=sum+L(j,i)*L(k,i);

end

L(j,k)=(A(j,k)-sum)./L(k,k); end

end

%定义L的转置

for j=1:n

for k=1:n

LT(j,k)=L(k,j);

end

end

y=SolveDownTriangle(L,b);

x=SolveUpTriangle(LT,y);

解上三角方程组源程序:

%解上三角方程组

function x=SolveUpTriangle(A,b)

N = size(A);

n = N(1);

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

for k=n-1:1

s=0;

for i=k+1:n

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

end

x(k)=(b(k)-s)/A(k,k);

End

解下三角方程组源程序:function x=SolveDownTriangle(A,b) N = size(A);

n = N(1);

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

for k=2:n

s=0;

for i=1:k-1

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

end

x(k)=(b(k)-s)/A(k,k);

end

结果:

x1=[0,0,0,…..0,0,0.9894]T;

x2=[0,0,0,…..0,0,0.9899]T;

LTDT:

计算程序:

相关文档
最新文档