00001 // -------------------------------------------------------------------------- 00002 // OpenMS -- Open-Source Mass Spectrometry 00003 // -------------------------------------------------------------------------- 00004 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen, 00005 // ETH Zurich, and Freie Universitaet Berlin 2002-2012. 00006 // 00007 // This software is released under a three-clause BSD license: 00008 // * Redistributions of source code must retain the above copyright 00009 // notice, this list of conditions and the following disclaimer. 00010 // * Redistributions in binary form must reproduce the above copyright 00011 // notice, this list of conditions and the following disclaimer in the 00012 // documentation and/or other materials provided with the distribution. 00013 // * Neither the name of any author or any participating institution 00014 // may be used to endorse or promote products derived from this software 00015 // without specific prior written permission. 00016 // For a full list of authors, refer to the file AUTHORS. 00017 // -------------------------------------------------------------------------- 00018 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00019 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING 00022 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00023 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00024 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 00025 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00026 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00027 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00028 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 // 00030 // -------------------------------------------------------------------------- 00031 // $Maintainer: Chris Bielow $ 00032 // $Authors: Chris Bielow $ 00033 // -------------------------------------------------------------------------- 00034 00035 #ifndef OPENMS_MATH_MISC_NNLS_NNLS_H 00036 #define OPENMS_MATH_MISC_NNLS_NNLS_H 00037 00038 #include <OpenMS/config.h> 00039 00040 namespace OpenMS 00041 { 00042 00043 namespace NNLS 00044 { 00045 typedef int integer; 00046 typedef double doublereal; 00047 00048 /* SUBROUTINE NNLS (A,MDA,M,N,B,X,RNORM,W,ZZ,INDEX,MODE) */ 00049 00050 /* Algorithm NNLS: NONNEGATIVE LEAST SQUARES */ 00051 00052 /* The original version of this code was developed by */ 00053 /* Charles L. Lawson and Richard J. Hanson at Jet Propulsion Laboratory */ 00054 /* 1973 JUN 15, and published in the book */ 00055 /* "SOLVING LEAST SQUARES PROBLEMS", Prentice-HalL, 1974. */ 00056 /* Revised FEB 1995 to accompany reprinting of the book by SIAM. */ 00057 00058 /* GIVEN AN M BY N MATRIX, A, AND AN M-VECTOR, B, COMPUTE AN */ 00059 /* N-VECTOR, X, THAT SOLVES THE LEAST SQUARES PROBLEM */ 00060 00061 /* A * X = B SUBJECT TO X .GE. 0 */ 00062 /* ------------------------------------------------------------------ */ 00063 /* Subroutine Arguments */ 00064 00065 /* A(),MDA,M,N MDA IS THE FIRST DIMENSIONING PARAMETER FOR THE */ 00066 /* ARRAY, A(). ON ENTRY A() CONTAINS THE M BY N */ 00067 /* MATRIX, A. ON EXIT A() CONTAINS */ 00068 /* THE PRODUCT MATRIX, Q*A , WHERE Q IS AN */ 00069 /* M BY M ORTHOGONAL MATRIX GENERATED IMPLICITLY BY */ 00070 /* THIS SUBROUTINE. */ 00071 /* B() ON ENTRY B() CONTAINS THE M-VECTOR, B. ON EXIT B() CON- */ 00072 /* TAINS Q*B. */ 00073 /* X() ON ENTRY X() NEED NOT BE INITIALIZED. ON EXIT X() WILL */ 00074 /* CONTAIN THE SOLUTION VECTOR. */ 00075 /* RNORM ON EXIT RNORM CONTAINS THE EUCLIDEAN NORM OF THE */ 00076 /* RESIDUAL VECTOR. */ 00077 /* W() AN N-ARRAY OF WORKING SPACE. ON EXIT W() WILL CONTAIN */ 00078 /* THE DUAL SOLUTION VECTOR. W WILL SATISFY W(I) = 0. */ 00079 /* FOR ALL I IN SET P AND W(I) .LE. 0. FOR ALL I IN SET Z */ 00080 /* ZZ() AN M-ARRAY OF WORKING SPACE. */ 00081 /* INDEX() AN INTEGER WORKING ARRAY OF LENGTH AT LEAST N. */ 00082 /* ON EXIT THE CONTENTS OF THIS ARRAY DEFINE THE SETS */ 00083 /* P AND Z AS FOLLOWS.. */ 00084 00085 /* INDEX(1) THRU INDEX(NSETP) = SET P. */ 00086 /* INDEX(IZ1) THRU INDEX(IZ2) = SET Z. */ 00087 /* IZ1 = NSETP + 1 = NPP1 */ 00088 /* IZ2 = N */ 00089 /* MODE THIS IS A SUCCESS-FAILURE FLAG WITH THE FOLLOWING */ 00090 /* MEANINGS. */ 00091 /* 1 THE SOLUTION HAS BEEN COMPUTED SUCCESSFULLY. */ 00092 /* 2 THE DIMENSIONS OF THE PROBLEM ARE BAD. */ 00093 /* EITHER M .LE. 0 OR N .LE. 0. */ 00094 /* 3 ITERATION COUNT EXCEEDED. MORE THAN 3*N ITERATIONS. */ 00095 int OPENMS_DLLAPI nnls_(doublereal * a, integer * mda, integer * m, integer * 00096 n, doublereal * b, doublereal * x, doublereal * rnorm, doublereal * w, 00097 doublereal * zz, integer * index, integer * mode); 00098 00099 /* Subroutine */ 00100 int OPENMS_DLLAPI g1_(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *); 00101 00102 /* Subroutine */ 00103 int OPENMS_DLLAPI h12_(integer *, integer *, integer *, integer *, doublereal *, integer *, doublereal *, doublereal *, integer *, integer *, integer *); 00104 00105 /* Subroutine */ 00106 doublereal OPENMS_DLLAPI diff_(doublereal *, doublereal *); 00107 00108 /* Subroutine */ 00109 double OPENMS_DLLAPI d_sign_(double & a, double & b); 00110 } 00111 00112 } 00113 00114 #endif //OPENMS_MATH_MISC_NNLS_NNLS_H
| OpenMS / TOPP release 1.10.0 | Documentation generated on Thu Mar 7 2013 09:42:43 using doxygen 1.7.1 |