?? cg_test.m
字號:
%cg_test CG convergence demo
% IFISS scriptfile: AR; 30 March 2005.
% Copyright (c) 2005 D.J. Silvester, H.C. Elman, A. Ramage
% matrix dimension
N=100;
% select problem
matno=default('Test matrix? 1/2/3/4 (default 1)',1);
if matno==1
fprintf('Matrix 1: evenly distributed eigenvalues\n')
vec=[1:N];
elseif matno==2
fprintf('Matrix 2: perfectly distributed eigenvalues\n')
% zeros of Chebyshev ploynomial
k=[0:N-1]; tvec=[cos(((2*k+1)*pi)/(2*N))];tvec=fliplr(tvec);
vec=0.5*(N-1)*tvec+0.5*(N+1);
% move end-points to get condition number of N
vec(1)=1; vec(N)=N;
elseif matno==3
fprintf('Matrix 3: five clusters of eigenvalues\n')
svec=ones(1,N/5); spr=1e-1;spr2=spr/2;
vec=[(1+spr*rand(size(svec))) (0.25*N-spr2+spr*rand(size(svec))) ...
(0.5*N-spr2+spr*rand(size(svec))) (0.75*N-spr2+spr*rand(size(svec))) ...
(N-spr*rand(size(svec)))];
% move end-points to get condition number of N
vec(1)=1; vec(N)=N;
elseif matno==4
fprintf('Matrix 4: two distinct eigenvalues\n')
vec=[ones(1,N/2) N*ones(1,N/2)];
else
error('Invalid test problem!')
end
% set up diagonal test matrix
W=diag(vec);
% RHS vector
rhs=ones(N,1);
% initial guess
x0=zeros(N,1);
x_exact=W\rhs;
% solve via CG
[x_it,flag,relres,iter,resvec]=pcg(W,rhs,1e-6,110);
% monitor convergence
if flag ==0
% successful convergence
fprintf('Convergence in %3i CG iterations\n',iter)
% nr0=resvec(1);
% fprintf('\n k log10(||r_k||/||r_0||) \n')
% for its=1:iter+1
% fprintf('%5i %16.4f \n', its-1, log10(resvec(its)/nr0));
% end
% fprintf('Bingo!\n\n')
%%% plot residuals
resplot(resvec)
else
fprintf('Iteration aborted! Iteration returned with flag equal to %2i \n',flag)
resplot(resvec)
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -