I hoped to have some new math pictures for you (or at least for me) today, but my attempts to install a code library that I need have come to nothing. The makefile invokes gcc with options that version 3.3 won’t take. I try to install gcc 4, and Fink says before I can do that I need to recompile Fink with gcc 4.
So I’m having a depressive episode instead.
But I can tell you anyway about what I wanted to do. I was reading a book about fullerenes, in which the drawings were made not by simulating the atomic bonds (as I crudely attempted some years ago) but by using something called topological coordinates, which sounded hairy until I turned the page and found that it means doing factor analysis on an adjacency matrix. That is, you set up a table like this
1 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 0 | 0 | 1 | 1 |
where 1 means two vertices are connected by an edge (or are the same vertex), and 0 means they aren’t. (This is the adjacency matrix for one of two self-dual heptahedra that are the simplest polyhedra with no nontrivial symmetries.) The principal eigenvectors, suitably scaled, give you the xyz coordinates you need. I don’t know enough about matrix algebra to understand why that should work, or how to obtain eigenvectors, but the latter is what library functions are for — if one can compile them.
I have several graphs in mind on which to try the above technique.
Given the appropriate resources (are you listening, Google?) I’d like to try this on all the users (or, more easily, addresses) that have posted to Usenet, the table entry being how many times one has followed up a post by the other. Each newsgroup would obviously form a cluster; since many people are active in multiple groups, the clusters must overlap, and the overall shape of the map is determined by these overlaps. How many dimensions does it have? That’s a fuzzy number; one definition of it could be the entropy function of the eigenvalues.
Got the same error when I tried to compile the Python Imaging Library.
Progress! The numpy mailing list pointed me to the resources I needed.
Here is that asymmetric heptahedron.
Curiously the eigenvectors used are not those with the highest eigenvalues, as I imagined, but the next three after the single highest is excluded. The highest is redundant: it makes the arrangement flat.
Hi, very nice post. I have been wonder’n bout this issue,so thanks for posting
Recently I belatedly got around to trying it on one of my favorite fullerenes, which ought to be strongly oblate — and the result was slightly prolate. Grump.
The graph of Twitter following might also have an interesting shape.
Then I read a bit further in that fullerene book, and found where it recommends scale factors for each of the eigenvectors. Applying those gave some oblateness to that figure mentioned two comments up, but less than I expected.
This process does not give uniform edge lengths, but it could be useful as a starting point for an iterative fitting process.