[ANN] Ruby Linear Algebra Library

J

Jeff Mitchell

[ANN] linalg-0.3.2 -- Ruby Linear Algebra Library

http://linalg.rubyforge.org/

http://rubyforge.org/frs/?group_id=273

-----------------
From the README:

Major features:
* Cholesky decomposition
* LU decomposition
* QR decomposition
* Schur decomposition
* Singular value decomposition
* Eigenvalues and eigenvectors of a general matrix
* Minimization by least squares
* Linear equation solving
* Stand-alone LAPACK bindings:
call any LAPACK routine from directly from ruby.

-----------------
Release notes:

Initial release.

There are no dependencies for the pre-built packages --
linalg-0.3.2-i686-linux-ruby18.tgz
linalg-0.3.2-i386-mswin32-ruby18.zip

To build from source, you need: LAPACK, BLAS, libf2c. Your OS should
have these packages available in binary form. If not, you will need a
Fortran compiler. (The pre-builts statically link these packages,
thus no dependencies.)

The pre-built win32 linalg is somewhat incompatible with the 1.8.1
Ruby One-Click Installer, as are all extensions not built with Visual
Studio .NET. (I say "somewhat" because it probably won't crash for
light use, but no guarantees.)

You can pick up a compatible 1.8.1 win32 ruby at
http://www.dm4lab.to/~usa/ruby/index_en.html

There is a new test 1.8.2 one-click installer which seems to work
(it reverts back to the common win32 compatible runtime):
http://rubyforge.org/frs/download.php/852/ruby182-14-test.zip

-----------------
linalg is a by-product of my academic work with crystallographic space
groups. A good deal of linear algebra functionality from Mathematica
and Matlab can be found in linalg, with equal or greater speed insofar
as per-matrix function calls.

It started when I was too lazy to move from ruby back to Mathematica,
and too lazy to set up Mathlink or some such. What I was doing was
not particularly suited to Mathematica either, minus the linear
algebra part, which among other things was communicating with two
other processes, a little networking, and spitting out LaTeX output.
It was nice to be free of Mathematica as well.

I have pounded on this package pretty thoroughly in real-life
applications, so I do not expect many serious bugs, if at all. This
kind of package is very amenable to unit testing as well.

I realize linalg is mostly for specialized use; singular value
decompositions are not the most urgent necessity for rubyists, I can
assume. But that is what I needed, so here it is.

Excerpt from the end of the README: Perhaps some day there will be a
common library which all numerical ruby packages may share. Perhaps
the basis will be the R-project library. But for now, linalg exists
because the LAPACK routines were "right there" in front of me, I
needed them, and it was easy to call them.

I'll add that although full functionality for complex-number matrices
is not yet finished, it would not take too much time to complete.
However I hesitate for fear of something better coming along which can
do singular value decompositions and eigenvalues of a general matrix.

If enough people request it, I'll get off my butt and implement the
complex side. By the way there is no reason to touch C code -- all
the LAPACK routines are available within ruby and all the core methods
are implemented in C for all matrix types. This makes contributing
easier.

linalg contains a few ideas which are independently useful, I think.
The Linalg::Iterators mix-in comes to mind. Check it out :)
 
C

Cai Li

Jeff said:
[ANN] linalg-0.3.2 -- Ruby Linear Algebra Library

http://linalg.rubyforge.org/

http://rubyforge.org/frs/?group_id=273

-----------------
From the README:

Major features:
* Cholesky decomposition
* LU decomposition
* QR decomposition
* Schur decomposition
* Singular value decomposition
* Eigenvalues and eigenvectors of a general matrix
* Minimization by least squares
* Linear equation solving
* Stand-alone LAPACK bindings:
call any LAPACK routine from directly from ruby.

-----------------
Release notes:

Initial release.

There are no dependencies for the pre-built packages --
linalg-0.3.2-i686-linux-ruby18.tgz
linalg-0.3.2-i386-mswin32-ruby18.zip

To build from source, you need: LAPACK, BLAS, libf2c. Your OS should
have these packages available in binary form. If not, you will need a
Fortran compiler. (The pre-builts statically link these packages,
thus no dependencies.)

The pre-built win32 linalg is somewhat incompatible with the 1.8.1
Ruby One-Click Installer, as are all extensions not built with Visual
Studio .NET. (I say "somewhat" because it probably won't crash for
light use, but no guarantees.)

You can pick up a compatible 1.8.1 win32 ruby at
http://www.dm4lab.to/~usa/ruby/index_en.html

There is a new test 1.8.2 one-click installer which seems to work
(it reverts back to the common win32 compatible runtime):
http://rubyforge.org/frs/download.php/852/ruby182-14-test.zip

-----------------
linalg is a by-product of my academic work with crystallographic space
groups. A good deal of linear algebra functionality from Mathematica
and Matlab can be found in linalg, with equal or greater speed insofar
as per-matrix function calls.

It started when I was too lazy to move from ruby back to Mathematica,
and too lazy to set up Mathlink or some such. What I was doing was
not particularly suited to Mathematica either, minus the linear
algebra part, which among other things was communicating with two
other processes, a little networking, and spitting out LaTeX output.
It was nice to be free of Mathematica as well.

I have pounded on this package pretty thoroughly in real-life
applications, so I do not expect many serious bugs, if at all. This
kind of package is very amenable to unit testing as well.

I realize linalg is mostly for specialized use; singular value
decompositions are not the most urgent necessity for rubyists, I can
assume. But that is what I needed, so here it is.

Excerpt from the end of the README: Perhaps some day there will be a
common library which all numerical ruby packages may share. Perhaps
the basis will be the R-project library. But for now, linalg exists
because the LAPACK routines were "right there" in front of me, I
needed them, and it was easy to call them.

I'll add that although full functionality for complex-number matrices
is not yet finished, it would not take too much time to complete.
However I hesitate for fear of something better coming along which can
do singular value decompositions and eigenvalues of a general matrix.

If enough people request it, I'll get off my butt and implement the
complex side. By the way there is no reason to touch C code -- all
the LAPACK routines are available within ruby and all the core methods
are implemented in C for all matrix types. This makes contributing
easier.

linalg contains a few ideas which are independently useful, I think.
The Linalg::Iterators mix-in comes to mind. Check it out :)
Great job!I am just looking forward such a Matlab-like
module.
Do you put some iterative techniques in matrix algebra in your
to-do list?Since I am working on implementing some ones in Ruby ,like SOR.
 
J

Jeff Mitchell

Cai Li said:
Jeff said:

Great job! I am just looking forward such a Matlab-like module. Do
you put some iterative techniques in matrix algebra in your to-do
list?Since I am working on implementing some ones in Ruby ,like SOR.

I have not thought about iterative methods yet. You are welcome to
contribute if you wish. Actually I use conjugate gradient all the
time via some other modeling software.

This is related to a couple general concerns I have:

The first is fragmentation of efforts in ruby. If someone wants to
publish fast Fourier transforms or iterative methods, he or she should
be able to pull from a common library. For example it's essential to
have a common complex number class written in C.

The second is duplication of existing functionality already present in
open software. Can anyone suggest a good C library for numerical
analysis?

There are also application-level packages like Octave and R-Project.
Octave appears to have the most functionality but seems to lack the
means of binding to a language, though I am not sure. R-project
does provide for bindings, but lacks in functionality.
 
C

Cai Li

Jeff said:
The first is fragmentation of efforts in ruby. If someone wants to
publish fast Fourier transforms or iterative methods, he or she should
be able to pull from a common library. For example it's essential to
have a common complex number class written in C.
My work may be based on NARRAY's API,but I have not
read your code yet.I found some of your words in linalg's
README file:
-----------------------
The other issue is +narray+. After a short trial, I decided it wastoo
difficult to retrofit +linalg+ into +narray+. There are also
irreconcilable stylistic differences between +linalg+ and +narray+.

But +linalg+ does not directly compete with +narray+. +linalg+ is
fordoing numerical analysis and is rather isolated from the rest of
ruby.Where +linalg+ has only four matrix types, +narray+ has several
more(including generic ruby objects) and plays well with other ruby
packages.
---------------------------
But maybe We need a more robust base to develop more.Consider
the advantage of Ruby in numerical analysis,a isolated method
package may be not the best one,since we need it to interact
with other packages(Matlab) or languages(FORTRAN) most of the time.

Maybe it's the time to have a fundemental module designed for Ruby
especially.
 

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,982
Messages
2,570,190
Members
46,740
Latest member
AdolphBig6

Latest Threads

Top