文档库 最新最全的文档下载
当前位置:文档库 › 高等数值分析 第三章

高等数值分析 第三章

高等数值分析 第三章
高等数值分析 第三章

4.解:利用matlab计算源程序:A=[ 3 -2 0 0 0 0 0 0 0 0

-1 3 -2 0 0 0 0 0 0 0

0 -1 3 -2 0 0 0 0 0 0

0 0 -1 3 -2 0 0 0 0 0

0 0 0 -1 3 -2 0 0 0 0

0 0 0 0 -1 3 -2 0 0 0

0 0 0 0 0 -1 3 -2 0 0

0 0 0 0 0 0 -1 3 -2 0

0 0 0 0 0 0 0 -1 3 -2

0 0 0 0 0 0 0 0 -1 3 ];

V3=[1 0 0

0 1 0

0 0 1

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0];

V5=[1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0];

b=[1;0;0;0;0;0;0;0;0;2];

x0=zeros(10,1);

x=ones(10,1);

r0=b-A*x0;

H3=(V3)'*A*(V3);

H3=inv(H3);

z3=V3*H3*(V3)'*r0;

x3=x0+z3

r3=norm(b-A*x3)

e3=norm(x3-x)

H5=(V5)'*A*(V5);

H5=inv(H5)

z5=V5*H5*(V5)'*r0; x5=x0+z5

r5=norm(b-A*x5)

e5=norm(x5-x)

计算结果:

x3’ = 0.4667

0.2000

0.0667

r3=norm(b-A*x3)= 2.0011

e3=norm(x3-x)= 2.9657

x5 = 0.4921

0.2381

0.1111

0.0476

0.0159

r5=norm(b-A*x5)= 2.0001

e5=norm(x5-x) = 2.9162

可见,随着m的变大,残余向量二范数越来越接近于零,所求得的x的值也越来越接近于精确值。

6. 解:利用matlab计算源程序:

m=4;

h=zeros(m,m);

A=[1 0 0 0

1 1 0 0

1 1 1 0

1 1 1 1];

v(:,1)=[1;0;0;0];

for j=1:m

for i=1:j

h(i,j)=dot(v(:,i),A*v(:,j));

end

q=zeros(m,1);

for i=1:j

q=q+h(i,j)*v(:,i);

end

r(:,j)=A*v(:,j)-q;

h(j+1,j)=norm(r(:,j));

v(:,j+1)=r(:,j)/h(j+1,j);

end

v=v(:,1:m)

h=h(1:m,:)

计算结果:

v =

1.0000 0 0 0

0 0.5774 -0.7071 0.4082

0 0.5774 -0.0000 -0.8165

0 0.5774 0.7071 0.4082

h =

1.0000 0 0 0 1.7321

2.0000 -0.8165 0.0000 0 0.8165 0.5000 -0.2887 0 0 0.2887 0.5000

7.解:利用Arnoldi算法计算源程序:m=2;

n=4;

b=[1;1;1;1];

x0=zeros(4,1);

h=zeros(m,m);

A=[1 0 0 0

1 1 0 0

1 1 1 0

1 1 1 1];

r0=b-A*(x0);

v(:,1)=r0/norm(r0)

for j=1:m

for i=1:j

h(i,j)=dot(v(:,i),A*v(:,j));

end

q=zeros(n,1);

for i=1:j

q=q+h(i,j)*v(:,i);

end

r(:,j)=A*v(:,j)-q;

h(j+1,j)=norm(r(:,j));

v(:,j+1)=r(:,j)/h(j+1,j);

end

v=v(:,1:m)

h=h(1:m,:)

h=inv(h);

p=zeros(m,1);

p(1,1)=norm(r0);

z=v*h*p

x=z+x0

利用Arnoldi算法计算结果:

h =

2.5000 -1.1180

1.1180 0.5000

z =

0.8000

0.4000

-0.0000

-0.4000

x =

0.8000

0.4000

-0.0000 -0.4000

利用GMRES算法计算源程序:m=2;

n=4;

b=[1;1;1;1];

x0=zeros(4,1);

h=zeros(m,m);

A=[1 0 0 0

1 1 0 0

1 1 1 0

1 1 1 1];

r0=b-A*(x0);

v(:,1)=r0/norm(r0);

for j=1:m

for i=1:j

h(i,j)=dot(v(:,i),A*v(:,j));

end

q=zeros(n,1);

for i=1:j

q=q+h(i,j)*v(:,i);

end

r(:,j)=A*v(:,j)-q;

h(j+1,j)=norm(r(:,j));

v(:,j+1)=r(:,j)/h(j+1,j);

end

v=v(:,1:m)

h=h(1:m+1,:)

g=zeros(m+1,1);

g(1,1)=norm(r0)

for i=1:m

W=eye(m+1);

s=h(i+1,i)/h(i,i);

c=s*s; c=1+c;

c=1/c; c=sqrt(c);

s=s*c; W(i,i)=c;

W(i+1,i+1)=c;

W(i,i+1)=s;

W(i+1,i)=-s;

h=W*h

g=W*g

end

h=h(1:m,:)

g=g(1:m,:)

y=inv(h)*g

x=x0+v*y

利用GMRES算法计算结果:v = 0.5000 -0.6708

0.5000 -0.2236

0.5000 0.2236

0.5000 0.6708

h’ = 2.5000 -1.1180

1.1180 0.5000

0 0.4472

g0’ = 2

h1’ = 2.7386 -0.8165 0 0.9129

0 0.4472

g1’= 1.8257

-0.8165

h2’= 2.7386 -0.8165

0 1.0165

0 0

g2’ = 1.8257

-0.7332

0.3592

h= 2.7386 -0.8165

0 1.0165

g = 1.8257

-0.7332

y = 0.4516

-0.7213

x = 0.7097

0.3871

0.0645

-0.2581

Arnoldi算法所得结果GMRES算法所得结果

0.8000 0.4000 -0.0000 -0.4000

0.7097 0.3871 0.0645 -0.2581

8.解:利用matlab计算源程序:

u=zeros(20,1);

for m=1:20

n=100;

b=ones(100,1);

x0=zeros(100,1);

x0(1,1)=1;

h=zeros(m,m);

A=zeros(100,100);

for i=1:100

A(i,i)=2;

end

for i=2:100

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

A(i-1,i)=1;

end

r0=b-A*(x0);

v(:,1)=r0/norm(r0);

for j=1:m

for i=1:j

h(i,j)=dot(v(:,i),A*v(:,j));

end

q=zeros(n,1);

for i=1:j

q=q+h(i,j)*v(:,i);

end

r(:,j)=A*v(:,j)-q;

h(j+1,j)=norm(r(:,j));

v(:,j+1)=r(:,j)/h(j+1,j);

end

v=v(:,1:m);

h=h(1:m+1,:);

g=zeros(m+1,1);

g(1,1)=norm(r0);

for i=1:m

W=eye(m+1);

s=h(i+1,i)/h(i,i);

c=s*s; c=1+c;

c=1/c; c=sqrt(c);

s=s*c; W(i,i)=c;

W(i+1,i+1)=c;

W(i,i+1)=s;

W(i+1,i)=-s;

h=W*h; g=W*g;

end

h=h(1:m,:); g=g(1:m,:);

y=inv(h)*g;

x=x0+v*y;

u(m,1)=norm(b-A*x)

end

semilogy(u,'k--','MarkerSize',6,'LineWidth', 2)

title('利用GMRES(m)求解所得残余向量的二范数(||r||)随m变化示意图')

xlabel('m')

ylabel('||r||')

所得结果:

||r||=1.5623 m=1

0.86362 m=2

0.27691 m=3

0.12772 m=4

0.049607 m=5

0.021147 m=6

0.0086574 m=7

0.0035917 m=8

0.0014937 m=9

0.00061425 m=10

0.00025673 m=11

0.00010526 m=12

4.4069e-005 m=13

1.8049e-005 m=14

7.562e-006 m=15

3.0955e-006 m=16

1.2974e-006 m=17

5.309e-007 m=18

2.2259e-007 m=19

9.1054e-008 m=20

由此可见,此题中,随着m的增大,||r||趋近于零,利用GMRES求得的解趋向于准确值。

相关文档