www.pudn.com > Image_segment.rar > Lapack.h
//Copyright (c) 2004-2005, Baris Sumengen //All rights reserved. // // CIMPL Matrix Performance Library // //Redistribution and use in source and binary //forms, with or without modification, are //permitted provided that the following //conditions are met: // // * No commercial use is allowed. // This software can only be used // for non-commercial purposes. This // distribution is mainly intended for // academic research and teaching. // * Redistributions of source code must // retain the above copyright notice, this // list of conditions and the following // disclaimer. // * Redistributions of binary form must // mention the above copyright notice, this // list of conditions and the following // disclaimer in a clearly visible part // in associated product manual, // readme, and web site of the redistributed // software. // * Redistributions in binary form must // reproduce the above copyright notice, // this list of conditions and the // following disclaimer in the // documentation and/or other materials // provided with the distribution. // * The name of Baris Sumengen may not be // used to endorse or promote products // derived from this software without // specific prior written permission. // //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT //HOLDERS AND CONTRIBUTORS "AS IS" AND ANY //EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT //NOT LIMITED TO, THE IMPLIED WARRANTIES OF //MERCHANTABILITY AND FITNESS FOR A PARTICULAR //PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE //CONTRIBUTORS BE LIABLE FOR ANY //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, //EXEMPLARY, OR CONSEQUENTIAL DAMAGES //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT //OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, //DATA, OR PROFITS; OR BUSINESS INTERRUPTION) //HOWEVER CAUSED AND ON ANY THEORY OF //LIABILITY, WHETHER IN CONTRACT, STRICT //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR //OTHERWISE) ARISING IN ANY WAY OUT OF THE USE //OF THIS SOFTWARE, EVEN IF ADVISED OF THE //POSSIBILITY OF SUCH DAMAGE. #pragma once #ifndef LAPACK_H #define LAPACK_H #include "cimpl.h" using namespace CIMPL; #include#include #include using std::numeric_limits; /// \brief Lapack Toolbox namespace Lapack { //========================================================= // Linear equations solver //========================================================= // Gesv Matrix Gesv(Matrix & A, Matrix & B); Matrix Gesv(Matrix & A, Matrix & B); Matrix Gesv(Matrix & A, Matrix & B); Matrix Gesv(Matrix & A, Matrix & B); //Gesvx //Posv Matrix Posv(Matrix & A, Matrix & B); Matrix Posv(Matrix & A, Matrix & B); Matrix Posv(Matrix & A, Matrix & B); Matrix Posv(Matrix & A, Matrix & B); //Posvx //Sysv Matrix Sysv(Matrix & A, Matrix & B); Matrix Sysv(Matrix & A, Matrix & B); Matrix Sysv(Matrix & A, Matrix & B); Matrix Sysv(Matrix & A, Matrix & B); //Sysvx //Hesv Matrix Hesv(Matrix & A, Matrix & B); Matrix Hesv(Matrix & A, Matrix & B); //Hesvx //========================================================= // Linear Least Squares problems //========================================================= // Gels Matrix Gels(Matrix & A, Matrix & B); Matrix Gels(Matrix & A, Matrix & B); Matrix Gels(Matrix & A, Matrix & B); Matrix Gels(Matrix & A, Matrix & B); // Gelsy Matrix Gelsy(Matrix & A, Matrix & B); Matrix Gelsy(Matrix & A, Matrix & B); Matrix Gelsy(Matrix & A, Matrix & B); Matrix Gelsy(Matrix & A, Matrix & B); // Gelss Matrix Gelss(Matrix & A, Matrix & B); Matrix Gelss(Matrix & A, Matrix & B); Matrix Gelss(Matrix & A, Matrix & B); Matrix Gelss(Matrix & A, Matrix & B); // Gelsd Matrix Gelsd(Matrix & A, Matrix & B); Matrix Gelsd(Matrix & A, Matrix & B); Matrix Gelsd(Matrix & A, Matrix & B); Matrix Gelsd(Matrix & A, Matrix & B); //========================================================= // Generalized Linear Least Squares problems //========================================================= // Gglse Vector Gglse(Matrix & A, Matrix & B, Vector & c, Vector & d); Vector Gglse(Matrix & A, Matrix & B, Vector & c, Vector & d); Vector Gglse(Matrix & A, Matrix & B, Vector & c, Vector & d); Vector Gglse(Matrix & A, Matrix & B, Vector & c, Vector & d); // Ggglm void Ggglm(Matrix & A, Matrix & B, Vector & d, Vector & x, Vector & y); void Ggglm(Matrix & A, Matrix & B, Vector & d, Vector & x, Vector & y); void Ggglm(Matrix & A, Matrix & B, Vector & d, Vector & x, Vector & y); void Ggglm(Matrix & A, Matrix & B, Vector & d, Vector & x, Vector & y); //========================================================= // Symmetric eigenproblem //========================================================= // Syevd Vector Syevd(Matrix & A); Vector Syevd(Matrix & A, Matrix & EV); Vector Syevd(Matrix & A); Vector Syevd(Matrix & A, Matrix & EV); // Heevd Vector Heevd(Matrix & A); Vector Heevd(Matrix & A, Matrix & EV); Vector Heevd(Matrix & A); Vector Heevd(Matrix & A, Matrix & EV); // Syevr Vector Syevr(Matrix & A); Vector Syevr(Matrix & A, int il, int iu); Vector Syevr(Matrix & A, Matrix & EV); Vector Syevr(Matrix & A, Matrix & EV, int il, int iu); Vector Syevr(Matrix & A); Vector Syevr(Matrix & A, int il, int iu); Vector Syevr(Matrix & A, Matrix & EV); Vector Syevr(Matrix & A, Matrix & EV, int il, int iu); // Heevr Vector Heevr(Matrix & A); Vector Heevr(Matrix & A, int il, int iu); Vector Heevr(Matrix & A, Matrix & EV); Vector Heevr(Matrix & A, Matrix & EV, int il, int iu); Vector Heevr(Matrix & A); Vector Heevr(Matrix & A, int il, int iu); Vector Heevr(Matrix & A, Matrix & EV); Vector Heevr(Matrix & A, Matrix & EV, int il, int iu); //========================================================= // Non-Symmetric eigenvalue problem //========================================================= // Gees Vector Gees(Matrix & A, Matrix & T); Vector Gees(Matrix & A, Matrix & T, Matrix & Z); Vector Gees(Matrix & A, Matrix & T); Vector Gees(Matrix & A, Matrix & T, Matrix & Z); Vector Gees(Matrix & A, Matrix & T); Vector Gees(Matrix & A, Matrix & T, Matrix & Z); Vector Gees(Matrix & A, Matrix & T); Vector Gees(Matrix & A, Matrix & T, Matrix & Z); // Geesx // Geev Vector Geev(Matrix & A); Vector Geev(Matrix & A, Matrix & Vl, Matrix & Vr); Vector Geev(Matrix & A); Vector Geev(Matrix & A, Matrix & Vl, Matrix & Vr); Vector Geev(Matrix & A); Vector Geev(Matrix & A, Matrix & Vl, Matrix & Vr); Vector Geev(Matrix & A); Vector Geev(Matrix & A, Matrix & Vl, Matrix & Vr); // Geevx //========================================================= // Singular Value Decomposition (SVD) //========================================================= // Gesvd // Gesdd Vector Gesdd(Matrix & A); Vector Gesdd(Matrix & A, Matrix & U, Matrix & V); Vector Gesdd(Matrix & A); Vector Gesdd(Matrix