# Resubmitting legacy RCR 161

**URL:** <https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556>\
**Category:** Ruby\
**Created:** [August 6, 2006, 5:01am UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556 "2006-08-06T05:01:19Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/u/MSEdward_SEdS_Bora)\
**Post date:** [August 6, 2006, 5:01am UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556/1 "2006-08-06T05:01:19Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/u/MSEdward_SEdS_Bora)\
**Post date:** [August 6, 2006, 7:13am UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556/2 "2006-08-06T07:13:25Z")

</div>

M. Edward (Ed) Borasky wrote:

> 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

---

<div class="post-metadata">

**Author:** ![MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/u/MSEdward_SEdS_Bora)\
**Post date:** [August 6, 2006, 5:50pm UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556/3 "2006-08-06T17:50:04Z")

</div>

Dave B. wrote:

> 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. 🙂

---

<div class="post-metadata">

**Author:** ![MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/u/MSEdward_SEdS_Bora)\
**Post date:** [August 7, 2006, 10:48am UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556/4 "2006-08-07T10:48:11Z")

</div>

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/](http://raa.ruby-lang.org/project/narray/)

Cheers,  
Dave

---

<div class="post-metadata">

**Author:** ![MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@MSEdward\_SEdS\_Bora](https://www.ruby-forum.com/u/MSEdward_SEdS_Bora)\
**Post date:** [August 7, 2006, 3:39pm UTC](https://www.ruby-forum.com/t/resubmitting-legacy-rcr-161/101556/5 "2006-08-07T15:39:32Z")

</div>

Dave B. wrote:

> 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/](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.
