Skip to content
Prev 69005 / 398502 Next

eigenvalues of a circulant matrix

I think the statement of the problem and the questions asked
need clarifying. Some aspects puzzleme. See below.
On 03-May-05 Globe Trotter wrote:
Having cut&pasted from the data placed in the body of the
message (omitted here) I get 216 numbers. Having put these
in a vector x (in my own way):

  length(x)
  ##[1] 216

Question 1:
===========
Is this correct? Or has there been a problem with your
posting of the data?

If it is correct, given that you seem to only use x[1:109],
was there some point in giving the rest?

Question 2:
===========
Next, using your command:

  y<-x[c(109:1,0:108)]

I now get

  length(y)
  ##[1] 217

(as expected). The "0" in "0:108" seems to have been ignored
(again as expected), so this is equivalent to

  y<-x[c(109:1,1:108)]

Is this as intended? If so, why use "0:108" instead of "1:108"?
Check:

  y[1]    ##[1] 19.4495
  x[109]  ##[1] 19.4495

  y[109]  ##[1] -0.00116801
  x[1]    ##[1] -0.00116801

  y[110]  ##[1] -0.00116801
  x[1]    ##[1] -0.00116801

  y[217]  ##[1] -6.28085
  x[108]  ##[1] -6.28085

Can you confirm that this is as intended?

Comment 3:
==========
You next command X=toeplitz(y): No apparent problems,
it gives a symmetric result:

  which(X != t(X)) ## numeric(0)

with 217 rows and columns:

  dim(X)  ##[1] 217 217

and looks circulant:

  X[(1:5),(1:5)]
            [,1]      [,2]      [,3]      [,4]      [,5]
  [1,] 19.449500 -6.280850 -0.486405 -0.826079 -0.167792
  [2,] -6.280850 19.449500 -6.280850 -0.486405 -0.826079
  [3,] -0.486405 -6.280850 19.449500 -6.280850 -0.486405
  [4,] -0.826079 -0.486405 -6.280850 19.449500 -6.280850
  [5,] -0.167792 -0.826079 -0.486405 -6.280850 19.449500

Question 4:
===========
Your next command, "eigen(X)", would simply output the results
to screen and does not assign to anything.

Your next command "write(X,ncol=216,file="test.dat")" as it
stands will write the toeplitz matrix X, constructed by
your command "X<-toeplitz(y)" to file, but with 216
columns instead of 217. However, the result consists
simply of numbers, and there is nothing like "NA" or "NaN"
in the file which I get.

Nor are there any NAs or NaNs in X itself, of course.

But, when you yourself did "write(X,ncol=216,file="test.dat")",
perhaps the "X" in this command was different from the "X"
which is the toeplitz matrix. So, was it the result of an
assignment from "eigen(X)" and, if so, which component or
components?

Question/Comment 5:
===================
So I have tried Z<-eigen(X). First of all, I get no problems
with NAs or NaNs:

  which(is.na(Z$values))    ##numeric(0)
  which(is.nan(Z$values))   ##numeric(0)
  which(is.na(Z$vectors))   ##numeric(0)
  which(is.nan(Z$vectors))  ##numeric(0)

Next, trying various options for wirting to file:

  write(Z,ncol=216,file="test.dat")

simply does not work (not a writable structure), while

  write(Z$values,ncol=216,file="test.dat")

produces simply a set of numbers, no NAs of NaNs, and likewise

  write(Z$vectors,ncol=216,file="test.dat")

(the only occurrences of non-numeric characters are "e", as
in "e-05").
Therefore I find myself completely unable to reproduce your
problem. However, for the various reasons stated in detail
above, I am not at all sure that what you wrote as the statement
of what you did in fact corresponds to what you really did!

I even wonder whether

Question 6:
===========
Was the file "test.dat" the result of your "write" command?
Or was it left over from a previous activity, the "write"
from this session having failed to execute for some reason?
(In which case the NaNs would have nothing to do with the
results of "eigen(X)").
Well, I didn't get any NaNs in R either -- quite consistent
with your C program!

Please clarify according to the questions above.

Best wishes,
Ted.


--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 03-May-05                                       Time: 12:06:57
------------------------------ XFMail ------------------------------