[lisplab-devel] Eigenvalues

Jørn Inge Vestgården jivestgarden at gmail.com
Tue Mar 19 19:58:59 UTC 2013


Dear José Santos
What you describe looks like a bug in lisplab since eigenvalues should
basically just call dgeev.

The reason for for the bug is probably that lisplab has some functionality
to switch between native and foreign implementations when both are present.
In the case of eigenvalues, there is no native lisp implementation, but it
might be that it thinks that it exists.

The matlisp code is, as the name implies, basically taken from Matlisp.
Unfortunately I have not put much emphasis on testing it and making
high-level interface functions. Hence it is prone to get bugs.

Best Regards
Jørn Inge Vestgården



2013/3/15 José Santos <jsmpereira at gmail.com>

> Hi,
>
> After trying out GSLL, Clem, also FemLisp, Lisplab managed to get me
> the functionality I needed with the least trouble.
>
> I'm trying to get the connectivity of a graph (second smallest eigen
> value) from eigenvalues.
>
> Given the fully connected 4x4 adjacency matrix:
>
> #md(( 0.000      1.000      1.000      1.000    )
>     ( 1.000      0.000      1.000      1.000    )
>     ( 1.000      1.000      0.000      1.000    )
>     ( 1.000      1.000      1.000      0.000    ))
>
> I compute the diagonal matrix of the vector sum of the adjacency matrix
> and then
> subtract the adjacency matrix from it to get the laplacian matrix.
>
> I'm unable to call (lisplab:eigenvalues) on that matrix, despite being a
> #md matrix.
> I can see that the function calls for LISPLAB::MATRIX-FOREIGN-DGE. However
> other functions
> that call for the same type seem to work when called with #md, namely FFT1.
>
> As a workaround, I'm using this call to get the eigenvalues:
>
> (lisplab::dgeev (laplacian-matrix *adj-matrix* *diag-matrix*) nil nil) and
> I get:
>
> (
> #md(( 4.000    )
>     (-1.1102d-16)
>     ( 4.000    )
>     ( 4.000    ))
>  NIL NIL)
>
> Is this appropriate?
>
> I'm curious however about different results I get from Matlab.
> I get the same results up until the call to
>
> >> eig(diag(sum(A)) - A)
>
> which gives me
>
> ans =
>
>     0.0000
>     4.0000
>     4.0000
>     4.0000
>
> Any comment I can get on this would be awsome. Am I going about this right?
> What might I be missing?
>
> Sorry about the lengthy email.
>
> Thanks!
> José Santos
>
> _______________________________________________
> lisplab-devel mailing list
> lisplab-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/lisplab-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/lisplab-devel/attachments/20130319/e926a654/attachment.html>


More information about the lisplab-devel mailing list