aimsalgo 6.0.0
Neuroimaging image processing
lmgauss.h
Go to the documentation of this file.
1/* This software and supporting documentation are distributed by
2 * Institut Federatif de Recherche 49
3 * CEA/NeuroSpin, Batiment 145,
4 * 91191 Gif-sur-Yvette cedex
5 * France
6 *
7 * This software is governed by the CeCILL-B license under
8 * French law and abiding by the rules of distribution of free software.
9 * You can use, modify and/or redistribute the software under the
10 * terms of the CeCILL-B license as circulated by CEA, CNRS
11 * and INRIA at the following URL "http://www.cecill.info".
12 *
13 * As a counterpart to the access to the source code and rights to copy,
14 * modify and redistribute granted by the license, users are provided only
15 * with a limited warranty and the software's author, the holder of the
16 * economic rights, and the successive licensors have only limited
17 * liability.
18 *
19 * In this respect, the user's attention is drawn to the risks associated
20 * with loading, using, modifying and/or developing or reproducing the
21 * software by the user in light of its specific status of free software,
22 * that may mean that it is complicated to manipulate, and that also
23 * therefore means that it is reserved for developers and experienced
24 * professionals having in-depth computer knowledge. Users are therefore
25 * encouraged to load and test the software's suitability as regards their
26 * requirements in conditions enabling the security of their systems and/or
27 * data to be ensured and, more generally, to use and operate it in the
28 * same conditions as regards security.
29 *
30 * The fact that you are presently reading this means that you have had
31 * knowledge of the CeCILL-B license and that you accept its terms.
32 */
33
34
35#ifndef AIMS_OPTIMIZATION_LMGAUSS_H
36#define AIMS_OPTIMIZATION_LMGAUSS_H
37
39
40
41template < class T >
42class LMGaussian : public LMFunction< T >
43{
44public:
45
46 LMGaussian( T k=(T)1.0, T m=(T)0.0, T s=(T)1.0 );
47
48 T apply( T );
49 T eval( T );
50};
51
52
53template< class T > inline
54LMGaussian< T >::LMGaussian( T k, T m, T s ) : LMFunction< T >()
55{
56 this->par.push_back( k );
57 this->par.push_back( m );
58 this->par.push_back( s );
59
60 this->der = std::vector< T >( 3 );
61}
62
63
64
65template< class T > inline
67{
68 T arg = ( x - this->par[ 1 ] ) / this->par[ 2 ];
69 T ex = (T)exp( -1.0 * (arg * arg ) );
70 T fac = (T)2 * this->par[ 0 ] * ex * arg;
71
72 this->der[ 0 ] = ex;
73 this->der[ 1 ] = fac / this->par[ 2 ];
74 this->der[ 2 ] = fac * arg / this->par[ 2 ];
75
76 return this->par[ 0 ] * ex;
77}
78
79
80template< class T > inline
82{
83 T arg = ( x - this->par[ 1 ] ) / this->par[ 2 ];
84
85 return this->par[ 0 ] * (T)exp( -1.0 * ( arg * arg ) );
86}
87
88#endif
LMFunction()
Definition lmfunc.h:46
std::vector< T > der
Definition lmfunc.h:59
std::vector< T > par
Definition lmfunc.h:58
T eval(T)
Definition lmgauss.h:66
T apply(T)
Definition lmgauss.h:81
LMGaussian(T k=(T) 1.0, T m=(T) 0.0, T s=(T) 1.0)
Definition lmgauss.h:54