"I added a
new primitive in GNU APL which computes the QR factorization of a real
or complex matrix"

Looking through the source code I see the following in `src/LApack.hh`:
```
   // Compute QR factorization with column pivoting of A:
   // A * P = Q * R
   //
char * pivot_tau_tmp = new char[N*(sizeof(ShapeItem) +
4*sizeof(APL_Float))];
```

Which is part of the parent function:
```
int scaled_gelsy(Matrix<T> & A, Matrix<T> & B, double rcond)
```

Is this exposed to the APL interpreter? Or is it used internally in dyadic
⌹?
If its used internally, I will do some digging later if dyadic ⌹ can be
used to solve the eigenvalue problem.
My linear algebra experience is mostly from college and I am out of
practice, I've mostly been piecing things together from various wikipedia
articles.

Thanks for the ACM article, I scanned it briefly and it seems to be very
helpful. I agree that reading equations in APL have made them abundantly
more clear, so I have no problem pursuing an APL based solution, especially
if it can benefit the community.
Any additional ACM APL articles are appreciated!

- Rowan
On Mon, Apr 13, 2020 at 9:50 AM Dr. Jürgen Sauermann <
mail@jürgen-sauermann.de> wrote:

> Hi again,
>
> sorry, but I have to correct myself: it was actually Peter Teeson who
> pointed us to the ACM papers.
>
> Best Regards,
> Jürgen
>
>
> On 4/13/20 1:17 PM, Dr. Jürgen Sauermann wrote:
>
> Hi Rowan,
>
> i would like to share some thoughts of mine with you.
>
> First of all some history. As you have correctly noticed, LAPACK was a
> build
> requirement for GNU APL up to including version 1.4. Looking at the
> configure.ac in 1.4:
>
> AC_CHECK_LIB([lapack],    [dgelsy_])
> AC_CHECK_LIB([blas],      [dcopy_])
> #AC_CHECK_LIB([gfortran], [_gfortran_transpose])
>
> So, I only needed in single function dgelsy (in order to implement ⌹).
> dgelsy was kindly provided by liblapack, liblapack in turn was dependent
> on libblas, and libblas was dependent on libgfortran. At that time I
> wasn't sure if these libraries would be available on all platforms. My
> suspicion at that time was that libgfortran might limit the use of GNU APL
> to GNU-only platforms. Also, installing these libraries was rather tedious
> at that time.
>
> In order to simplify the GNU APL build process, I decided to manually
> translate
> the FORTRAN version of dgelsy_ (and all functions that it called, and all
> functions that they called...) to C++. Before doing that (which was a major
> task) I looked at existing ports of LAPACK to C or C++, but none of them
> really convinced me. You can still see the result of the manual translation
> in file src/LApack.hh of GNU APL.
>
> So, as a summary, reintroducing a dependency on liblapack is not an idea
> that would make me happy. The situations here is different though because
> unlike ⌹ which is a built-in primitive of every APL interpreter, while
> LAPACK support would be an optional feature that could be dropped on all
> platforms that cause problems. Similar to the emacs and SQL functions in
> GNU APL today.
>
> A second thought is the following. As you may have noticed, I added a
> new primitive in GNU APL which computes the QR factorization of a real
> or complex matrix. Before implementing that primitive I browsed through
> quite a number of linear algebra publications on the web, most of them
> concerning the householder transformation which is the core algorithm of
> both ⌹ and of QR factorization. I should at this point admit, that I never
> fully understood what my own code in LApack.hh was doing, Rather I
> translated every LAPACK function needed from FORTRAN to C++ in a 1:1
> fashion, and the result seemed to be OK. For that reason I was never too
> happy with the ⌹ implementation in GNU APL even though it apparently does
> what it should.
>
> Then, while I was looking into QR factorization, Jay Foad pointed us to
> the now available ACM papers. I was formerly looking for some of these
> papers because they were cited in the ISO APL standard, but at that time
> I could not get them without paying for them (I am not an ACM member).
> On the other hand the papers were not that important either. While
> browsing through the now freely available papers, I stumbled upon a
> paper "THE HOUSEHOLDER ALGORITHM AND APPLICATIONS" written by Garry Helzer
> in the 1970s. That paper contains in its Appendix a 12-line APL
> function of the algorithm that I was trying to implement. Suddenly,
> simply by looking at those 12 lines of APL code, the matter became so
> crystal clear to me that I could implement it right away.
>
> The point that I am trying to make here is the following. Suppose we would
> create a good translation from (parts of) LApack to APL. The resulting APL
> code would then be fairly valuable not only for those who want to solve a
> particular problem (like eigenvalues) but also for those who want to
> understand the mathematics behind the problem. Such a translation would
> not be limited to GNU APL but would be useful for all APL programmers.
>
> Of course a translation of LApack to APL will have a worse performance than
> a direct implementation in, say, C/C++. But that is the only drawback that
> I can currently see. Given the many advantages that a translation of LApack
> to APL could have, that would be my preferred option (= the last option in
> your "way forward" list below).
>
>
> Best Regards,
> Jürgen
>
>
> On 4/12/20 6:08 PM, Rowan Cannaday wrote:
>
> I've been mulling over methods of bringing linear algebra methods into
> gnu-apl, specifically eigenvalues & eigenvectors (leaving open the
> possibility for more).
>
> The canonical methods for this are from LAPACK (which was formerly a
> compilation dependency).
> Specifically:
>     dgeev
>     dsyev
>     zheev
>     zgeev
>
> There are a few paths forward I can think of:
>     - include LAPACK as an optional dependency and wrap the functions
> (similar to how ⌹ was implemented before it was ported to C++). Possibly
> with a ⎕FOO wrapper.
>     - Port (or find) C/C++ versions of the functions and use the ⎕FX
> interface
>     - Implement the underlying algorithms as APL libraries
>
> Mostly looking for advice on how to proceed, that would make this:
>     1. Simple to integrate
>     2. 'okay' performance
>     3. Possibility to expand to more LAPACK functionality
>     4. Not introducing unnecessary compilation challenges
>
> Since this is something I suspect has been considered, I figured I'd reach
> out to the broader list before attempting something.
>
> Thanks,
>
> - Rowan
>
>
>
>

Reply via email to