www.gusucode.com > elmat工具箱matlab源码程序 > elmat/private/wilk.m

    function [A, b] = wilk(n,classname)
%WILK   Various specific matrices devised/discussed by Wilkinson.
%   [A, b] = GALLERY('WILK',N) is the matrix or system of order N,
%   where N is one of the following:
%
%   N = 3: upper triangular system Ux=b. Inaccurate solution.
%   N = 4: lower triangular system Lx=b. Ill-conditioned.
%   N = 5: HILB{6}(1:5,2:6)*1.8144. Symmetric positive definite.
%   N = 21: W21+, tridiagonal. Eigenvalue problem.

%   References:
%   [1] J. H. Wilkinson, Error analysis of direct methods of matrix
%       inversion, J. Assoc. Comput. Mach., 8 (1961),  pp. 281-330.
%   [2] J. H. Wilkinson, Rounding Errors in Algebraic Processes,
%       Notes on Applied Science No. 32, Her Majesty's Stationery
%       Office, London, 1963. Reprinted by Dover, New York, 1994.
%   [3] J. H. Wilkinson, The Algebraic Eigenvalue Problem,
%       Oxford University Press, 1965.
%
%   Nicholas J. Higham
%   Copyright 1984-2005 The MathWorks, Inc.

if n == 3
   % Wilkinson (1961) p.323.
   A = [ 1e-10   .9  -.4
           0     .9  -.4
           0      0  1e-10];
   b = [   0      0    1]';
   A = cast(A,classname); b = cast(b,classname);

elseif n == 4
   % Wilkinson (1963) p.105.
   A = [0.9143e-4  0          0          0
        0.8762     0.7156e-4  0          0
        0.7943     0.8143     0.9504e-4  0
        0.8017     0.6123     0.7165     0.7123e-4];
   b = [0.6524     0.3127     0.4186     0.7853]';
   A = cast(A,classname); b = cast(b,classname);

elseif n == 5
   % Wilkinson (1965), p.234.
   if nargout > 1
       error(message('MATLAB:wilk:TooManyOutputsForFive'));
   end
   A = hilb(6,classname);
   A = A(1:5, 2:6)*1.8144;

elseif n == 21
   % Wilkinson [3], p. 308.
   if nargout > 1
       error(message('MATLAB:wilk:TooManyOutputsForTwentyOne'));
   end
   E = diag(ones(n-1,1,classname),1);
   m = (n-1)/2;
   A = diag(abs(-m:m)) + E + E';

else
   error(message('MATLAB:wilk:InvalidN'))
end