﻿ 130213029闫东林_作业7 - 计算数学达人 - 专，学者，数值代数，微分方程数值解

### 130213029闫东林_作业7

%求矩阵A，随机选取x1，求b=A*x1

function [A,b]=qiu_Ab(n)
B=-1*ones(n,n);
C=zeros(n,n);
for i=1:n-1
C(i,n)=1;
end
A=C+tril(B,-1)+eye(n); %表示出A
x1=rand(n,1);
b=A*x1;    %计算出b

%用列选主元的方法求解x
function x=jieliex(A,b)
[L,U,p]=lie(A);
for k=1:length(p)
b([k,p(k)])=b([p(k),k]);
end
y=qiandaiy(L,b);
x=huidaix(U,y);

%列选主元 LU 分解PA=LU
function [L,U,p]=lie(A)
n=size(A,1);
tol=1e-16;
p=[];
for k=1:n-1
%[r,c]=find(A==max(max(abs(A(k:n,k:n)))));
%p(k)=r;
%A([p(k),k],:)=A([k,p(k)],:);
[r,c]=max(abs(A(k:n,k)));
q(k)=c+k-1;
A([k,q(k)],:)=A([q(k),k],:); %交换k,p行
if abs(A(k,k))>tol
A(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)-A(k+1:n,k)*A(k,k+1:n);
end
end
L=eye(n)+tril(A,-1);
U=triu(A,0);

%前代法
function y=qiandaiy(L,b)
n=size(L,1);
y=zeros(n,1);
y(1)=b(1)/L(1,1);
for(j=2:n)
y(j)=(b(j)-L(j,1:j-1)*y(1:j-1))/L(j,j);
end

%回代法
function x=huidaix(U,y)
n=size(U,1);
x=zeros(n,1);
x(n)=y(n)/U(n,n);
for(j=n-1:-1:1)
x(j)=(y(j)-U(j,j+1:n)*x(j+1:n))/U(j,j);
end

%计算解的精度，相对误差，比较两者
for n=5:1:30
[A,b]=qiu_Ab(n);
x=jieliex(A,b);
r=b-A*x;
jingdu=cond(A,inf)*norm(r,inf)/norm(b,inf)%解的精度
xiangdui_err=norm(r,inf)/norm(b,inf)%相对误差
bijiao=norm(jingdu-xingdui_err)
end

jingdu =

4.7935e-016

xiangdui_err =

9.5870e-017

bijiao =

2.3184e-009

jingdu =

3.6519e-015

xiangdui_err =

6.0864e-016

bijiao =

2.3184e-009

jingdu =

1.5472e-015

xiangdui_err =

2.2103e-016

bijiao =

2.3184e-009

jingdu =

3.6644e-014

xiangdui_err =

4.5806e-015

bijiao =

2.3184e-009

jingdu =

2.4627e-014

xiangdui_err =

2.7364e-015

bijiao =

2.3184e-009

jingdu =

1.3074e-013

xiangdui_err =

1.3074e-014

bijiao =

2.3183e-009

jingdu =

2.9106e-014

xiangdui_err =

2.6460e-015

bijiao =

2.3184e-009

jingdu =

8.5027e-014

xiangdui_err =

7.0856e-015

bijiao =

2.3183e-009

jingdu =

2.2656e-013

xiangdui_err =

1.7428e-014

bijiao =

2.3182e-009

jingdu =

3.0023e-013

xiangdui_err =

2.1445e-014

bijiao =

2.3181e-009

jingdu =

1.0058e-012

xiangdui_err =

6.7053e-014

bijiao =

2.3174e-009

jingdu =

3.2843e-012

xiangdui_err =

2.0527e-013

bijiao =

2.3151e-009

jingdu =

1.7903e-013

xiangdui_err =

1.0531e-014

bijiao =

2.3183e-009

jingdu =

7.4203e-012

xiangdui_err =

4.1224e-013

bijiao =

2.3110e-009

jingdu =

4.3398e-012

xiangdui_err =

2.2841e-013

bijiao =

2.3141e-009

jingdu =

2.8784e-011

xiangdui_err =

1.4392e-012

bijiao =

2.2896e-009

jingdu =

1.7365e-010

xiangdui_err =

8.2689e-012

bijiao =

2.1448e-009

jingdu =

1.7354e-011

xiangdui_err =

7.8882e-013

bijiao =

2.3011e-009

jingdu =

2.3950e-010

xiangdui_err =

1.0413e-011

bijiao =

2.0789e-009

jingdu =

7.4585e-010

xiangdui_err =

3.1077e-011

bijiao =

1.5726e-009

jingdu =

4.2521e-010

xiangdui_err =

1.7008e-011

bijiao =

1.8932e-009

jingdu =

2.2456e-009

xiangdui_err =

8.6369e-011

bijiao =

7.2843e-011

jingdu =

1.7878e-008

xiangdui_err =

6.6214e-010

bijiao =

1.5559e-008

jingdu =

8.1957e-009

xiangdui_err =

2.9270e-010

bijiao =

5.8773e-009

jingdu =

9.3810e-009

xiangdui_err =

3.2348e-010

bijiao =

7.0626e-009

jingdu =

5.3336e-008

xiangdui_err =

1.7779e-009

bijiao =

5.1017e-008