### Research LAPACKE Solutions to Common Matrix Problems

**completed by**: Cezar Mocan

**mentors**: whiteknight

**Task Description**: Parrot-Linear-Algebra (PLA) is a linear algebra add-in library for the Parrot Virtual Machine. Currently PLA uses the BLAS library to implement basic matrix operations like multiply. There is another standard library, LAPACK, which supports more advanced operations, and PLA would like to use this to start offering more capabilities. The original LAPACK library is written in FORTRAN. A new version of it called LAPACKE (notice the "E" at the end) provides an interface for C language code. Another older variant, CLAPACK, used software to translate the original LAPACK source code into C, though some of the translations are strange and the interface is not standardized.

Since LAPACKE provides a native C interface PLA would like to use it first, with support for other variants added later. We would like to use LAPACKE to implement some simple behaviors on square matrices:

- Calculate the determinant
- Find the Eigenvectors (left or right, both if possible)
- Find the Eigenvalues
- Calculate the matrix inverse, if possible.

To complete this task, the student should research the new LAPACKE library and the functions that it provides. Determine which functions must be called in order to perform the 4 operations above for a *general matrix*. Notice that some LAPACK functions require a matrix to be diagonal, or be in some other special format. If that's the case, you will need to find functions to convert a *general matrix* into the correct format first.

If LAPACKE provides a function to do something directly with one function call, that would be preferred. Otherwise, any reasonable list of functions will be acceptable.

You do not need to implement the solution, you only need to research the functions needed to solve the problem.

**Deliverables**: For each behavior described above, the student will provide:

- The name of the algorithm, if any, that you think will produce the correct result. If a single LAPACKE function provides the necessary result, you don't need to worry about this.
- A list of LAPACKE interface functions needed to perform that algorithm
- A description of each function used (what inputs it takes, what outputs it generates, etc)
- A general estimate about how difficult it would be to implement the particular algorithm using the listed LAPACKE functions

**Links**: ** parrot-linear-algebra**, http://www.netlib.org/lapack/,