1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//===================================================== 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// File : action_hessenberg.hh 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//===================================================== 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is free software; you can redistribute it and/or 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// modify it under the terms of the GNU General Public License 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// as published by the Free Software Foundation; either version 2 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// of the License, or (at your option) any later version. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is distributed in the hope that it will be useful, 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// but WITHOUT ANY WARRANTY; without even the implied warranty of 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// GNU General Public License for more details. 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// You should have received a copy of the GNU General Public License 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// along with this program; if not, write to the Free Software 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef ACTION_HESSENBERG 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define ACTION_HESSENBERG 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "utilities.h" 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "STL_interface.hh" 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <string> 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "init/init_function.hh" 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "init/init_vector.hh" 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "init/init_matrix.hh" 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std; 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<class Interface> 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass Action_hessenberg { 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic : 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Ctor 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Action_hessenberg( int size ):_size(size) 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Action_hessenberg Ctor"); 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // STL vector initialization 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<pseudo_random>(X_stl,_size); 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<null_function>(C_stl,_size); 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<null_function>(resu_stl,_size); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // generic matrix and vector initialization 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(X_ref,X_stl); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(X,X_stl); 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(C,C_stl); 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath _cost = 0; 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<_size-2; ++j) 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double r = std::max(0,_size-j-1); 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double b = std::max(0,_size-j-2); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath _cost += 6 + 3*b + r*r*4 + r*_size*4; 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // invalidate copy ctor 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Action_hessenberg( const Action_hessenberg & ) 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS("illegal call to Action_hessenberg Copy Ctor"); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath exit(1); 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Dtor 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~Action_hessenberg( void ){ 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Action_hessenberg Dtor"); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // deallocation 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(X_ref,_size); 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(X,_size); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(C,_size); 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // action name 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static inline std::string name( void ) 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return "hessenberg_"+Interface::name(); 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double nb_op_base( void ){ 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return _cost; 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void initialize( void ){ 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::copy_matrix(X_ref,X,_size); 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void calculate( void ) { 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::hessenberg(X,C,_size); 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void check_result( void ){ 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // calculation check 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_to_stl(C,resu_stl); 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// STL_interface<typename Interface::real_type>::hessenberg(X_stl,C_stl,_size); 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// typename Interface::real_type error= 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl); 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// if (error>1.e-6){ 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// INFOS("WRONG CALCULATION...residual=" << error); 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// exit(0); 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// } 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprivate : 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix X_stl; 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix C_stl; 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix resu_stl; 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix X_ref; 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix X; 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix C; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _size; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double _cost; 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<class Interface> 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass Action_tridiagonalization { 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic : 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Ctor 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Action_tridiagonalization( int size ):_size(size) 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Action_tridiagonalization Ctor"); 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // STL vector initialization 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<pseudo_random>(X_stl,_size); 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i=0; i<_size; ++i) 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int j=0; j<i; ++j) 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath X_stl[i][j] = X_stl[j][i]; 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<null_function>(C_stl,_size); 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath init_matrix<null_function>(resu_stl,_size); 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // generic matrix and vector initialization 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(X_ref,X_stl); 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(X,X_stl); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_from_stl(C,C_stl); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath _cost = 0; 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<_size-2; ++j) 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double r = std::max(0,_size-j-1); 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double b = std::max(0,_size-j-2); 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath _cost += 6. + 3.*b + r*r*8.; 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // invalidate copy ctor 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Action_tridiagonalization( const Action_tridiagonalization & ) 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS("illegal call to Action_tridiagonalization Copy Ctor"); 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath exit(1); 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // Dtor 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~Action_tridiagonalization( void ){ 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Action_tridiagonalization Dtor"); 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // deallocation 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(X_ref,_size); 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(X,_size); 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::free_matrix(C,_size); 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // action name 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static inline std::string name( void ) { return "tridiagonalization_"+Interface::name(); } 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double nb_op_base( void ){ 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return _cost; 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void initialize( void ){ 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::copy_matrix(X_ref,X,_size); 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void calculate( void ) { 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::tridiagonalization(X,C,_size); 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void check_result( void ){ 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // calculation check 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Interface::matrix_to_stl(C,resu_stl); 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// STL_interface<typename Interface::real_type>::tridiagonalization(X_stl,C_stl,_size); 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// typename Interface::real_type error= 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl); 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// if (error>1.e-6){ 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// INFOS("WRONG CALCULATION...residual=" << error); 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// exit(0); 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// } 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprivate : 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix X_stl; 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix C_stl; 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::stl_matrix resu_stl; 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix X_ref; 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix X; 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename Interface::gene_matrix C; 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _size; 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double _cost; 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 234