Dave Burt wrote:
> M. Edward (Ed) Borasky wrote:
>   
>> I guess I need to define my own "Matrix" class then. Making a copy of a
>> 200x200 matrix to change one element, or in my case the whole upper
>> triangle, is not going to work. I ended up doing "a = m.to_a", changing
>> the upper triangle in "a", and then doing "m = Matrix.rows(a)". Until I
>> looked at the code, I thought Matrix was either inheriting from or
>> mixing in Array.
>>     
>
> It's immutable so you can treat it like Numeric objects.
>
> Check out narray on the RAA, it might be what you're looking for.
> Apparently it's fast, too.
>
> http://raa.ruby-lang.org/project/narray/
>
> Cheers,
> Dave
>   
I am looking *at* narray, and I am looking *for* code that does matrix 
operations with rational and possibly complex rational matrix elements 
and I am looking *to* find ways to tune the Ruby interpreter to do these 
efficiently. :) I may end up, when all the smoke has cleared, with 
narray, or GSL, or LAPACK or a home-brew interface to a C/C++ symbolic 
math package like Singular or Ginac. But right now, my focus is on 
Matrix and how to make it better in pure Ruby.

The application I have in mind will use smallish matrices -- the 200x200 
test case I posted is probably both bigger and more ill-conditioned than 
I will need. The application uses lots of matrix algebra to break large 
problems up into block-tridiagonal matrices and other structured forms. 
Before I look at alternatives, I want to see what I can build with pure 
Ruby and the Matrix/Mathn/Rational/Complex libraries.