Jest: Frequently Asked Questions

(alright, not so frequently asked questions)
  1. What is a good solver to start with?
  2. Why float rather than double as the default for real numbers?
  3. How do I set my classpath?
  4. Why not having a single Jest package?
  5. Why does Jest not include an Rn vector and a matrix multiplication operator?

What is a good solver to start with?

The simulated annealing solver might be a good place to start since it works for very simple operators. I have the feeling there are better simulated annealing algorithms out there. Next solver might be the CGSolver that requires a linear operator.

Why float rather than double as the default for real numbers?

Obviously, we would like to have the additional precision that double number representation offers. I plan to change to a double version (I hope a script can simply translate the future double version to a float version). However, for seismic imaging we prefer floats since our data set size already stretches our storage capabilities (A seismic 3-D data is at least several Gigabytes large). Since my primary applications concern seismic processing, I implemented a float version first.

How do I set my classpath?

I have the package stored in /home/matt/jest. Consequently, I add :/home/matt/jest/: to my classpath. All the import statements then define the packages relative to that directory, e.g. /home/matt/jest/jam/vector/Vector.java is found by having a classpath /home/matt/jest/ and by having an import statement import jam.vector.*;.

If you need an import statement import jest.*; or import jest.jam.*; you do something different from what I do in my setup. I am not sure what though.

Why not having a single Jest package? Why does Jest use that many packages?

Obviously including and searching many packages is ugly and inefficient. However, Jest currently uses many packages (jam.vector.*; jam.operator.*; etc).

I will reduce the number of packages for standard classes in the future. However, controversial or prototype classes I will contain in individual packages so that they can easily be exchanged, left out, or deinstalled. I believe this modular approach will make Jest more attractive to more users. At this early development stage almost all classes are controversial and prototypes. Consequently, I have many packages. As these packages mature I will unite them to bigger bins.

Additionally, I believe in reproducible research (for more information visit my corresponding web page). In my current design a research project and its document map into individual Java packages. I will explain this soon somewhere else.

Why does Jest not include an Rn vector and a matrix multiplication operator?

I had matrix multiplication and Rn vectors in an earlier version but I have not implemented them yet in the current package. Honestly, Rn does not appear in my research. I usually use a more sophisticated package Rsf that includes Rn. It adds descriptions of the physical dimensions to Rn.

Matrix multiplication again is not an operator I encounter in my research in its pure form. Our linear operators are such sparse matrices, that we never implement them as explicit matrices.

However, I agree, it would be nice to have these packages. So if you implement them, store them in an individual package and I will add it to my distribution. That is easy because of the modularity of Jest's packages that I discussed above.