Thanks! That did the trick.
Vadim.
From:
ublas-bounces@lists.boost.org [mailto:ublas-bounces@lists.boost.org] On Behalf Of Jesse Manning
Sent: Sunday, February 03, 2008
10:24 PM
To: ublas mailing list
Subject: Re: [ublas] geev call
parameters
>From looking at the
geev binding in geev.hpp it does not look like passing in NULL for the left and
right eigenvector parameters will succeed. Maybe someone else more
familiar with the function can provide more assistance on this.
I modified your code in the following ways to get it to compile:
int main()
{
ublas::matrix<double, ublas::column_major> Y(3,3);
ublas::vector< std::complex<double> > evals(3);
// assign some vals to Y
//.....
ublas::matrix<double, ublas::column_major> vl(3,3);
ublas::matrix<double, ublas::column_major> vr(3,3);
// make sure to pass in matrices for left and right
eigenvectors
lapack::geev(Y, evals, &vl, &vr,
lapack::optimal_workspace());
}
These changes at least allowed your code to compile, but I did not check if
these changes produced correct results when actually running the geev function.
>From the documentation it looks like vl and vr should be matrices with the same
dimensions as the matrix you pass in as input (in your case the Y matrix)
Hope this helps.
Jesse
On Feb 4, 2008 12:44 AM, Vadim von Brzeski <madvlad@sbcglobal.net> wrote:
I
am trying to call lapack::geev via lapack as follows:
#include
<boost/numeric/ublas/vector.hpp>
#include
<boost/numeric/ublas/matrix.hpp>
#include
<boost/numeric/ublas/io.hpp>
#include
<boost/numeric/bindings/lapack/geev.hpp>
#include
<boost/numeric/bindings/traits/ublas_matrix.hpp>
#include
<boost/numeric/bindings/traits/ublas_vector.hpp>
#include
<boost/numeric/ublas/matrix_proxy.hpp>
namespace
ublas = boost::numeric::ublas;
namespace
lapack = boost::numeric::bindings::lapack;
int
main()
{
ublas::matrix<double, ublas::column_major>
Y(3,3);
ublas::vector< std::complex<double> >
evals(3);
// assign some vals to Y
//.....
lapack::geev(Y, evals, NULL, NULL,
lapack::optimal_workspace());
}
But
I get is this:
test.cpp:78:
error: no matching function for call to `geev
(boost::numeric::ublas::matrix<double,
boost::numeric::ublas::column_major,
boost::numeric::ublas::unbounded_array<double,
std::allocator<double> >
>&,
boost::numeric::ublas::vector<std::complex<double>,
boost::numeric::ublas::unbounded_array<std::complex<double>,
std::allocator<std::complex<double>
> > >&, int, int,
boost::numeric::bindings::lapack::optimal_workspace)'
I
tried Y as 'row-major' – same result.
If
you look into boost/numeric/bindings/lapack/geev.hpp, this is the definition
// gateway / dispatch routine
template <typename A, typename W, typename V>
int geev(A& a, W& w, V* vl, V* vr, optimal_workspace)
{
.....
}
So
I am confused. Can someone please provide some examples on how one would
call geev, and also what the vl and vr parameters should be?
Thank
you.
Vadim
v. B.
_______________________________________________
ublas mailing list
ublas@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/ublas