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

    function C = circul(v,classname)
%CIRCUL Circulant matrix.
%   C = GALLERY('CIRCUL',V) is the circulant matrix whose first row is V.
%   A circulant matrix has the property that each row is obtained
%   from the previous one by cyclically permuting the entries one step
%   forward. It is a special Toeplitz matrix in which the diagonals
%   "wrap round". If V is a scalar, then C = GALLERY('CIRCUL',1:V).
%
%   The eigensystem of C (N-by-N) is known explicitly. If t is an Nth
%   root of unity, then the inner product of V with W = [1 t t^2 ... t^(N-1)]
%   is an eigenvalue of C, and W(N:-1:1) is an eigenvector of C.

%   Reference:
%   P. J. Davis, Circulant Matrices, John Wiley, 1977.
%
%   Copyright 1984-2005 The MathWorks, Inc.

n = length(v);

if n == 1
   n = v;
   v = cast(1:n,classname);
end

v = v(:).';   % Make sure v is a row vector.

C = toeplitz( [ v(1) v(n:-1:2) ], v );