Hello,

I am currently working on several enhancements for the linear algebra
package, related to issues http://issues.apache.org/jira/browse/MATH-157
and http://issues.apache.org/jira/browse/MATH-220.

For now, I have added solve methods in
QRDecomposition/QRDecompositionImpl and copied
LUDecomposition/LUDecompositionImpl from RealMatrixImpl in an almost
JAMA-compatible style. I will work on
SVDDecomposition/SVDDecompositionImpl soon.

I have two issues now.

The first issue is related to LUDecomposition. I would like to
completely remove the corresponding code from RealMatrix, taking the
opportunity of a major version release since it breaks compatibility. We
already choose to broke compatibility in several aspects for this
release. Does this move seem acceptable to everybody ?

The second issue is related to BigMatrix. I have mixed feelings about
this class. It seems either too much or not enough. It is highly
specialized towards one use case (high precision at the cost of
slowness, as explained in the original post from 2004
http://markmail.org/message/bvus3dbihgmewtw4) but induces many code
duplication. Implementing QRDecomposition, LUDecomposition,
SVDDecomposition ... is possible, I will most probably do it once the
important native double implementations are frozen.

However, I am looking at another way to do this bearing more use cases.
What about a more generic approach with a Field interface ? This has
been discussed and rejected in 2003
(http://markmail.org/message/otkcmoqixierewsz), but now we have switched
to Java 5, we already have a BigMatrix class, and we still have the
RealMatrix implementation for common cases as expected by the vast
majority of users. We also now have a more advanced library and can
think to extend some parts. What I would propose is to still have two
implementations: RealMatrix and FieldMatrix. The first one would
probably be used by most users, but the second one could also be used
for some specific needs, one of which is increased precision (we would
need a simple wrapper class to adapt BigDecimal to our Field interface),
another one is Complex computation, still another one is interval
arithmetic, or even differentiation (yes, I think about Nabla and
DifferentiablePair here).

Here is the work involved:
 - refactor BigMatrix into FieldMatrix
   this is a simple task I think.
 - implement the decomposition classes for FieldMatrix
   doing this for Field or BigDecimal is the same amount of work
 - design the Field interface
   this is straightforward for most methods (add, multiply, subtract,
   divide, negate ...). I'm still not sure how to handle the two neutral
   elements (ZERO and ONE) since we cannot specify static methods in an
   interface (or am I wrong ?).
 - design an extension of the Field interface with support for sqrt
   this may be needed by some algorithms
 - refactor Complex to implement the extended Field interface
   this is trivial and would allow us to support complex matrices as an
   almost free by-product.
 - refactor Fraction to implement Field interface
   this is trivial too
 - create an adaptor for BigDecimal
   this is trivial too

Of course, if this proposal is accepted, I will do this work.

Luc


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to