Resubmitting legacy RCR 161

  • Thread starter M. Edward (Ed) Borasky
  • Start date
M

M. Edward (Ed) Borasky

Some time back, RCR 161 was submitted to add a []= method to the Matrix
class defined in "matrix.rb". Apparently, this was imported from an
older database and needs to be resubmitted. Can "anyone" (for example,
me) do that, or does it have to be the original submitter?

I took a look at the code and I can't imagine what having that method
would break -- I was surprised when

m = Matrix.I(10)
m[0,1] = -1

threw an error.
 
D

Dave Burt

M. Edward (Ed) Borasky said:
Some time back, RCR 161 was submitted to add a []= method to the Matrix
class defined in "matrix.rb". Apparently, this was imported from an
older database and needs to be resubmitted. Can "anyone" (for example,
me) do that, or does it have to be the original submitter?

The problem with this RCR, if I recall correctly, is that Matrix objects
are immutable, and []= is a mutation operation.

There's room for methods that return a copy of the matrix modified in a
given way, but you can't change self.

Cheers,
Dave
 
M

M. Edward (Ed) Borasky

Dave said:
M. Edward (Ed) Borasky said:
Some time back, RCR 161 was submitted to add a []= method to the Matrix
class defined in "matrix.rb". Apparently, this was imported from an
older database and needs to be resubmitted. Can "anyone" (for example,
me) do that, or does it have to be the original submitter?

The problem with this RCR, if I recall correctly, is that Matrix objects
are immutable, and []= is a mutation operation.

There's room for methods that return a copy of the matrix modified in a
given way, but you can't change self.

Cheers,
Dave
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.

Still, at least one other person -- the person who filed RCR 161 --
thought that "m[i, j] = -1" was something a "Matrix" object like "m"
should know how to do. It's such a common operation in matrix
computations that its non-existence seems more like an oversight than a
design feature or a bug to me. And it violates the principle of being
able to write FORTRAN code in any language. :)
 
D

Dave Burt

M. Edward (Ed) Borasky said:
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
 
M

M. Edward (Ed) Borasky

Dave said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top