Re: [eigen] Re: Eigen solver usage: simple questions |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Re: Eigen solver usage: simple questions
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Wed, 21 Jul 2010 00:15:25 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=ylGy62q+R/yiwg884GXIXGD9bB/FNAKhZlMUU5CFG8g=; b=EAi9LV8axyYzqOuwoHnlIvCn9FHRcCGFstXmkJvRuFZfQE2nStklmhOup/t56fLub4 yPUoAi/Kl8fmBWeqA2kMFMP84+AIeUFyLrD291ovYY3eM2zRWTlD6qgumZoA4keyYqel dpSWsZqyyAbXrU1XnuxKlzBY+ZZZ/tLyQVKJk=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=nD1f7G+SMrPtsbbEaHm+38MvwNzW3sqMVDuI3xGd99Ym9DbHglGzgLFEsQh1i4g6N8 UvNMD4HPGBtGT4TkSSVPIM52jzcdnIuRl0BQC+avuNLq0Z2PicrZutmoGzObJ91/h9q3 x0wXqS5RDL5UbIrIDfKqVpRi+vRChQ057V+Ww=
Indeed, that is the explanation. If your matrix is not selfadjoint,
just use class EigenSolver.
EigenSolver solver(matrix);
result = solver.eigenvalues();
Benoit
2010/7/20 William Oquendo <woquendo@xxxxxxxxx>:
> Dear all,
> It seems that .eigenvalues() assumes the matrix is selfadjoint since it is
> calling the self adjoint mehotd (as shown by the compiler in the assertion
> and after looking the source code), and of course produces bad results when
> compiling -DNDEBUG and disabling the assertion
> Is there a way to explicitly indicates that a given matrix is not
> selfadjoint, and in that case to use the more general procedure ?
> Best regards / Cordialmente,
>
> --
> William Oquendo
> Phd Candidate
> Simulation Of Physical Systems Group
> National University of Colombia
> Linux User # 321481
> *********************
> Este correo puede carecer de tildes o eñes ya que el teclado no contiene
> estos caracteres. Presento excusas por eso.
>
> *********************
>
>
>
> On Tue, Jul 20, 2010 at 4:06 PM, William Oquendo <woquendo@xxxxxxxxx> wrote:
>>
>> Dear all,
>> First of all I apologize in advance if my questions are too simple, I read
>> the docs but the info about eigen solvers is small. Second, I would like to
>> thank you for the great work in Eigen!
>> I have been using eigen (currently 2.0.15, compiler g++ 4.4.4,
>> Slackware64 13.1) to solve eigenvalue problems. But now I am concerned with
>> the way I am using the library. I have a 3x3 array (simulating the matrix)
>> and I need to compute, by now, only the eigenvalues. When I execute the code
>> (please see a reduced example copied at the end and also attached), the
>> program dies with the following error assertion (in general my matrix is not
>> self adjoint):
>> a.out:
>> /usr/local/include/eigen2/Eigen/src/QR/SelfAdjointEigenSolver.h:296:
>> Eigen::Matrix<typename Eigen::NumTraits<typename
>> Eigen::ei_traits<T>::Scalar>::Real, Eigen::ei_traits::ColsAtCompileTime, 1,
>> 2, Eigen::ei_traits::ColsAtCompileTime, 1>
>> Eigen::MatrixBase<Derived>::eigenvalues() const [with Derived =
>> Eigen::Map<Eigen::Matrix<double, 3, 3, 2, 3, 3>, 1>]: Assertion
>> `Flags&SelfAdjointBit' failed.
>> But, if I compile with the flag -DNDEBUG, the programs ends successfully
>> with the correct data (even with null matrices), as far as I have checked.
>> How can I specify to Eigen that my matrix is not selfAdjoint? (if that is
>> the problem ...
>> Let's assume now that I need both the eigen values and eigen vectors, and
>> I am using the full eigen solver:
>> EigenSolver<Matrix3d> solver(Meigen);
>> Is it possible to sort the eigen values by norm and, of course, their
>> corresponding eigen vectors by means of some internal eigen function? I can
>> write a function to do that, but I would like to know if Eigen can do it
>> already.
>> Thanks in advance for your kind help and reply.
>> Best regards / Cordialmente,
>>
>> --
>> William Oquendo
>> Phd Candidate
>> Simulation Of Physical Systems Group
>> National University of Colombia
>> Linux User # 321481
>> *********************
>> Este correo puede carecer de tildes o eñes ya que el teclado no contiene
>> estos caracteres. Presento excusas por eso.
>>
>> *********************
>>
>>
>> CODE
>> #include <iostream>
>> #include <eigen2/Eigen/Core>
>> #include <eigen2/Eigen/Array>
>> #include <eigen2/Eigen/QR>
>> using namespace Eigen;
>> using namespace std;
>> void ComputeEigenValues(double Matrix[][3], double & l0, double & l1,
>> double & l2);
>> int main()
>> {
>> double M[3][3] = { 1, 0, 0,
>> 0, 1, 0,
>> 0, 0, 1 };
>> double e0, e1, e2;
>>
>> ComputeEigenValues(M, e0, e1, e2);
>>
>> clog << "The eigen values are " << endl
>> << e0 << endl
>> << e1 << endl
>> << e2 << endl
>> << endl;
>>
>> return 0;
>> }
>> void ComputeEigenValues(double Matrix[][3], double & l0, double & l1,
>> double & l2)
>> {
>> l0 = l1 = l2 = 0;
>> Map<Matrix3d> Meigen(&Matrix[0][0]);
>> Vector3d veval = Meigen.eigenvalues();
>> l0 = veval.real()[0];
>> l1 = veval.real()[1];
>> l2 = veval.real()[2];
>> }
>>
>
>