1 /*=========================================================================
4 Module: $RCSfile: gslobj.hxx,v $
6 Date: $Date: 2009/05/14 13:55:07 $
7 Version: $Revision: 1.1 $
9 Copyright: (c) 2002, 2003
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notice for more information.
16 =========================================================================*/
18 #ifndef __GSL__OBJ__HXX__
19 #define __GSL__OBJ__HXX__
22 #include <gsl/gsl_math.h>
23 #include <gsl/gsl_matrix.h>
25 /*======================================================================================*/
26 /*=================================gslobj_vector========================================*/
27 /*======================================================================================*/
31 /*==Constructeurs========================================*/
32 gslobj_vector( size_t s = 3 );
33 gslobj_vector( const gslobj_vector& v );
34 gslobj_vector( double* v, size_t s );
35 gslobj_vector( gsl_vector* v );
36 /*==Destructeur========================================*/
37 ~gslobj_vector( ) { if( _copy ) gsl_vector_free( _gsl ); }
39 /*==Operateurs========================================*/
42 gslobj_vector& operator=( const gslobj_vector& o );
43 gslobj_vector& operator=( double o );
44 gslobj_vector& operator=( double* o );
45 gslobj_vector& operator=( gsl_vector* o );
48 friend std::ostream& operator<<( std::ostream& os, const gslobj_vector& v );
50 operator double*( ) const { return( _gsl->data ); }
51 operator gsl_vector*( ) const { return( _gsl ); }
53 double& operator()( size_t i ) { return( _gsl->data[ i ] ); }
54 const double& operator()( size_t i ) const
56 return( _gsl->data[ i ] );
60 bool operator==( const gslobj_vector& o ) const;
61 bool operator!=( const gslobj_vector& o ) const
63 return( !( ( *this ) == o ) );
67 gslobj_vector operator+( const gslobj_vector& o );
68 gslobj_vector operator+( double o );
69 gslobj_vector operator+( double* o );
70 gslobj_vector operator+( gsl_vector* o );
71 gslobj_vector& operator+=( const gslobj_vector& o );
72 gslobj_vector& operator+=( double o );
73 gslobj_vector& operator+=( double* o );
74 gslobj_vector& operator+=( gsl_vector* o );
77 gslobj_vector operator-( const gslobj_vector& o );
78 gslobj_vector operator-( double o );
79 gslobj_vector operator-( double* o );
80 gslobj_vector operator-( gsl_vector* o );
81 gslobj_vector& operator-=( const gslobj_vector& o );
82 gslobj_vector& operator-=( double o );
83 gslobj_vector& operator-=( double* o );
84 gslobj_vector& operator-=( gsl_vector* o );
86 /* Multiplication (produit scalaire) */
87 gslobj_vector operator*( double o );
88 gslobj_vector& operator*=( double o );
90 /* Division (produit scalaire) */
91 gslobj_vector operator/( double o );
92 gslobj_vector& operator/=( double o );
95 /*==Methodes========================================*/
97 /*==PS========================================*/
98 // /* Redimenssionnement */
99 // void resize( size_t s );
101 // /* cree un vecteur unitaire pour une base */
102 // int basis( size_t i )
104 // *this = ( double )0;
105 // ( *this )( i ) = 1;
108 /*==PS========================================*/
110 /* Renvoie la taille du vecteur */
111 size_t size( ) const { return( _gsl->size ); }
113 /*==PS========================================*/
115 // void setValue( size_t i, double val ) { _gsl->data[ i ] = val; }
117 // /* Permutation d'elements */
118 // int swap( size_t i, size_t j )
120 // return( gsl_vector_swap_elements( _gsl, i, j ) );
123 // /* le vecteur est "retourné" */
124 // int reverse( ) { return( gsl_vector_reverse( _gsl ) ); }
125 /*==PS========================================*/
127 /* produit scalaire */
128 double dot( const gslobj_vector& o );
129 double dot( double* o );
130 double dot( gsl_vector* o );
132 /* produit vectoriel : le resultat est renvoye */
133 gslobj_vector cross( const gslobj_vector& o );
134 gslobj_vector cross( double* o );
135 gslobj_vector cross( gsl_vector* o );
136 /* produit vectoriel : le resultat est stocké dans this*/
137 int scross( const gslobj_vector& o );
138 int scross( double* o );
139 int scross( gsl_vector* o );
144 /*==PS========================================*/
145 // double norm1( ); /* somme des valeurs absolues de chaque
146 // composantes du vecteur (norme discrete)*/
147 /*==PS========================================*/
149 double norm2( ); /* norme "normale" */
152 gslobj_vector normalize( ); /* resultat renvoyé */
153 int snormalize( ); /* resultat stocké dans this */
159 gsl_vector_view _view;
164 /*======================================================================================*/
165 /*=================================gslobj_matrix========================================*/
166 /*======================================================================================*/
167 class gslobj_matrix {
169 friend std::ostream& operator<<( std::ostream& os, const gslobj_matrix& m );
173 gslobj_matrix( size_t r = 3, size_t c = 3 );
174 gslobj_matrix( const gslobj_matrix& m );
175 gslobj_matrix( double* m, size_t r, size_t c );
176 gslobj_matrix( double* m[], size_t r, size_t c );
177 gslobj_matrix( gsl_matrix* m );
179 /*==PS========================================*/
180 // void resize( size_t r, size_t c );
181 /*==PS========================================*/
183 ~gslobj_matrix( ) { if( _copy ) gsl_matrix_free( _gsl ); }
185 gslobj_matrix& operator=( const gslobj_matrix& o );
186 gslobj_matrix& operator=( double o );
187 gslobj_matrix& operator=( double* o );
188 gslobj_matrix& operator=( double* o[] );
189 gslobj_matrix& operator=( gsl_matrix* o );
191 operator gsl_matrix*( ) const { return( _gsl ); }
192 operator double*( ) const { return( _gsl->data ); }
194 size_t size1( ) const { return( _gsl->size1 ); }
195 size_t size2( ) const { return( _gsl->size2 ); }
196 size_t rows( ) const { return( _gsl->size1 ); }
197 size_t columns( ) const { return( _gsl->size2 ); }
198 double& operator()( size_t i, size_t j );
199 const double& operator()( size_t i, size_t j ) const;
201 /*==PS========================================*/
202 // void setValue( size_t i, size_t j, double val );
203 /*==PS========================================*/
205 bool operator==( const gslobj_matrix& o ) const;
206 bool operator!=( const gslobj_matrix& o ) const
208 return( !( ( *this ) == o ) );
211 gslobj_matrix operator+( const gslobj_matrix& o );
212 gslobj_matrix operator+( double o );
213 gslobj_matrix operator+( double* o );
214 gslobj_matrix operator+( double* o[] );
215 gslobj_matrix operator+( gsl_matrix* o );
216 gslobj_matrix& operator+=( const gslobj_matrix& o );
217 gslobj_matrix& operator+=( double o );
218 gslobj_matrix& operator+=( double* o );
219 gslobj_matrix& operator+=( double* o[] );
220 gslobj_matrix& operator+=( gsl_matrix* o );
222 gslobj_matrix operator-( const gslobj_matrix& o );
223 gslobj_matrix operator-( double o );
224 gslobj_matrix operator-( double* o );
225 gslobj_matrix operator-( double* o[] );
226 gslobj_matrix operator-( gsl_matrix* o );
227 gslobj_matrix& operator-=( const gslobj_matrix& o );
228 gslobj_matrix& operator-=( double o );
229 gslobj_matrix& operator-=( double* o );
230 gslobj_matrix& operator-=( double* o[] );
231 gslobj_matrix& operator-=( gsl_matrix* o );
233 gslobj_matrix operator*( const gslobj_matrix& o );
234 gslobj_matrix operator*( double o );
235 gslobj_matrix operator*( double* o );
236 gslobj_matrix operator*( double* o[] );
237 gslobj_matrix operator*( gsl_matrix* o );
238 gslobj_vector operator*( const gslobj_vector& o );
239 gslobj_matrix& operator*=( const gslobj_matrix& o );
240 gslobj_matrix& operator*=( double o );
241 gslobj_matrix& operator*=( double* o );
242 gslobj_matrix& operator*=( double* o[] );
243 gslobj_matrix& operator*=( gsl_matrix* o );
245 /*==PS========================================*/
246 // gslobj_matrix transpose( );
247 // gslobj_matrix invertLU( );
248 // double determinant( );
250 // bool isSquare( ) { return( _gsl->size1 == _gsl->size2 ); }
252 /*==PS========================================*/
258 gsl_matrix_view _view;
261 #endif // __GSL__OBJ__HXX__