Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7062 Discussions

How to use dgeevx?

Beginner
635 Views

Dear all,

I am a beginer of LAPACK routines. Now I am trying to use dgeevx for computing the eigenvalues and left and right eigenvectors of a real nonsymmetric matrix on Linux. I set the parameters for dgeevx as follows:

balanc='B'

jobvl='V'

jobvr='V'

sense='B'

Moreover, I set the other parameters like lda, ldvl, ldvr, lwork following the description of the Math Kernel Library Reference Manual. The size of the matrix is 500*500.

If I run the program, my computer returns the following error:

-------------

forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source

Stack trace terminated abnormally.
-------------

What is the reason of this error? How to fix this error?

When I try to compute just eigenvalues of the matrix, the program returns the correct ones.

That is, I set the paramters as follows:

balanc='B'

jobvl='V'

jobvr='V'

sense='E'

The computer does not return any error messages.

One other question:

When I set the parameters like this, I can get the values in vl or vr variables. What are these values in these variables? Are these correct eigenvectors? Since the driver routine dgeevx calculates both left and right eigenvectors if sense is 'E' or 'B', Iwould like to know whatare thevalues that Igetin vr and vl.

In summary, I wouldlike to knowthe correct way touse dgeevx to calculate eigenvalues and their eigenvectors.

I am using Math Kernel Library 9.1.023.

T. Yamanobe

2 Replies
Employee
635 Views

Dear T. Yamanobe,

did you try analogous routine dgeev with a little bit different interface to solve the problem?

vl(i) and vr(i) (i-th columns of vl, vr) should keep areal left/right eigenvector for the corresponding real eigenvalue wr(i) in case wi(i) = 0, that is

vl(i)**T*A = wr(i)*vl(i)**T, and A*vr(i) = wr(i)*vr(i)

If wi(i) != 0, that is, there's a complex conjugate pair ofeigenvalues ( wr(i), wi(i) ), ( wr(i+1), wi(i+1) ), thentheir respective left/right eigenvectors (u/v) are

u(i) = vl(i) + i*vl(i+1), u(i)**T*A = ( wr(i)+i*wi(i) )*u(i)**T

u(i+1) = vl(i)- i*vl(i+1), u(i+1)**T*A = ( wr(i)-i*wi(i) )*u(i+1)**T

v(i) = vr(i) + i*vr(i+1), A*v(i) = ( wr(i)+i*wi(i) )*v(i)

v(i+1) = vr(i)- i*vr(i+1), A*v(i+1) = ( wr(i)-i*wi(i) )*v(i+1)

Michael.

Employee
635 Views

Dear T. Yamanobe,

I'vetried dgeevx routine with your parameters and it has been completed with no seg.faults.

One of the issues could be the arrays location in memory - I encountered seg.faultswhenlarge arrays were put on stack. Do you observe the issue on thesmall sizes around n=10 too?

Michael.