PARP Research Group | Universidad de Murcia |
src/qvmath/qvstatistics.cppGo to the documentation of this file.00001 /* 00002 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012. PARP Research Group. 00003 * <http://perception.inf.um.es> 00004 * University of Murcia, Spain. 00005 * 00006 * This file is part of the QVision library. 00007 * 00008 * QVision is free software: you can redistribute it and/or modify 00009 * it under the terms of the GNU Lesser General Public License as 00010 * published by the Free Software Foundation, version 3 of the License. 00011 * 00012 * QVision is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with QVision. If not, see <http://www.gnu.org/licenses/>. 00019 */ 00020 00024 00025 #include <qvmath/qvstatistics.h> 00026 00027 #ifdef QVMATRIXALGEBRA_AVAILABLE 00028 double BhattacharyyaDistance(const QVVector &m1, const QVMatrix &S1, const QVVector &m2, const QVMatrix &S2) 00029 { 00030 QVVector diff = m2-m1; 00031 QVMatrix mS = (S1+S2)/2; 00032 QVMatrix inv = mS.inverse(); 00033 double value = (diff*(inv*diff))/8 + log(mS.det()/sqrt(S1.det()*S2.det()))/2; 00034 return value; 00035 } 00036 00037 QVVector qvLinearRegularizedRegression(const QVMatrix &A, const QVVector &b, const QVMatrix &Gamma) 00038 { 00039 const QVMatrix tikhonovMatrix = (Gamma == QVMatrix())? QVMatrix::identity(A.getCols()): Gamma; 00040 return pseudoInverse(A.transpose()*A + tikhonovMatrix)*A.transpose() * b; 00041 } 00042 #endif 00043 00044 double randomNormalValue(const double mean, const double variance) 00045 { 00046 const double U = double( rand() % (RAND_MAX) ) / double(RAND_MAX), 00047 V = double( rand() % (RAND_MAX) ) / double(RAND_MAX); 00048 00049 const double X = sqrt(-2*log(U))*sin(2*PI*V); 00050 00051 return X * sqrt(variance) + mean; 00052 } |