Changeset 2808 in Sophya for trunk/SophyaLib/NTools/integ.cc
- Timestamp:
- Jun 14, 2005, 1:25:05 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/integ.cc
r2615 r2808 10 10 // utilisant le (1) 11 11 12 //++ 13 // Class Integrator 14 // Lib Outils++ 15 // include integ.h 16 // 17 // Classe abstraite d'intégration numérique 1D. 18 // On fournit une fonction double f(double) au constructeur, ou 19 // une GeneralFunction avec des paramètres définis. 20 // L'objet Integrator est convertible en valeur double qui est la valeur 21 // de l'intégrale. Diverses méthodes permettent de choisir des options 22 // de calcul, et ces méthodes retournent une référence sur l'objet, pour 23 // permettre une notation chaînée. 24 //-- 25 //++ 26 // Links Implementations 27 // TrpzInteg 28 // GLInteg 29 //-- 30 31 //++ 32 // Titre Constructeurs 33 //-- 34 35 //++ 12 /*! 13 \ingroup NTools 14 \class SOPHYA::Integrator 15 16 \brief Classe abstraite d'intégration numérique 1D. 17 18 On fournit une fonction double f(double) au constructeur, ou 19 une GeneralFunction avec des paramètres définis. 20 L'objet Integrator est convertible en valeur double qui est la valeur 21 de l'intégrale. Diverses méthodes permettent de choisir des options 22 de calcul, et ces méthodes retournent une référence sur l'objet, pour 23 permettre une notation chaînée. 24 25 \sa TrpzInteg GLInteg 26 */ 27 28 //! Constructeur par défaut. L'objet n'est pas utilisable en l'état. 36 29 Integrator::Integrator() 37 //38 // Constructeur par défaut. L'objet n'est pas utilisable en l'état.39 //--40 41 30 : mFunc(NULL), mGFF(NULL), mGFFParm(NULL), 42 31 mNStep(50), mDX(-1), mReqPrec(-1), … … 44 33 {} 45 34 46 // ++35 //! Constructeur à partir de la fonction double->double, et des bornes d'intégration. 47 36 Integrator::Integrator(FUNC f, double xmin, double xmax) 48 //49 // Constructeur à partir de la fonction double->double, et des50 // bornes d'intégration.51 //--52 37 : mFunc(f), mGFF(NULL), mGFFParm(NULL), 53 38 mNStep(50), mDX(-1), mReqPrec(-1), … … 55 40 {} 56 41 42 //! Constructeur à partir de la fonction double->double, et des bornes d'intégration. 57 43 Integrator::Integrator(fun f, double xmin, double xmax) 58 //59 // Constructeur à partir de la fonction double->double, et des60 // bornes d'intégration.61 //--62 44 : mFunc(new Function(f)), mGFF(NULL), mGFFParm(NULL), 63 45 mNStep(50), mDX(-1), mReqPrec(-1), … … 66 48 67 49 68 //++ 50 /*! 51 Constructeur sans spécifier les bornes. Elles sont positionnées 52 à [0,1], et on pourra les modifier plus tard. 53 */ 69 54 Integrator::Integrator(FUNC f) 70 //71 // Constructeur sans spécifier les bornes. Elles sont positionnées72 // à [0,1], et on pourra les modifier plus tard.73 //--74 55 : mFunc(f), mGFF(NULL), mGFFParm(NULL), 75 56 mNStep(50), mDX(-1), mReqPrec(-1), … … 77 58 {} 78 59 79 //++ 60 /*! 61 Constructeur sans spécifier les bornes. Elles sont positionnées 62 à [0,1], et on pourra les modifier plus tard. 63 */ 80 64 Integrator::Integrator(fun f) 81 //82 // Constructeur sans spécifier les bornes. Elles sont positionnées83 // à [0,1], et on pourra les modifier plus tard.84 //--85 65 : mFunc(new Function(f)), mGFF(NULL), mGFFParm(NULL), 86 66 mNStep(50), mDX(-1), mReqPrec(-1), … … 88 68 {} 89 69 90 //++ 70 /*! 71 Constructeur à partir d'une GeneralFunction. La fonction doit être une 72 fonction de une variable, et on fournit les valeurs des paramètres ainsi 73 que les bornes d'intégration. 74 */ 91 75 Integrator::Integrator(GeneralFunction* gff, double* par, double xmin, double xmax) 92 //93 // Constructeur à partir d'une GeneralFunction. La fonction doit être une94 // fonction de une variable, et on fournit les valeurs des paramètres ainsi95 // que les bornes d'intégration.96 //--97 76 : mFunc(NULL), mGFF(gff), mGFFParm(par), 98 77 mNStep(50), mDX(-1), mReqPrec(-1), … … 102 81 } 103 82 104 //++ 83 /*! 84 Constructeur à partir d'une GeneralFunction. La fonction doit être une 85 fonction de une variable, et on fournit les valeurs des paramètres. 86 On ne spécifie pas les bornes. Elles sont positionnées 87 à [0,1], et on pourra les modifier plus tard. 88 */ 105 89 Integrator::Integrator(GeneralFunction* gff, double* par) 106 //107 // Constructeur à partir d'une GeneralFunction. La fonction doit être une108 // fonction de une variable, et on fournit les valeurs des paramètres.109 // On ne spécifie pas les bornes. Elles sont positionnées110 // à [0,1], et on pourra les modifier plus tard.111 //--112 90 : mFunc(NULL), mGFF(gff), mGFFParm(par), 113 91 mNStep(50), mDX(-1), mReqPrec(-1), … … 120 98 {if(mFunc) delete mFunc;} 121 99 122 / /++123 // Titre Méthodes 124 //-- 125 126 //++ 100 /*! 101 \brief Spécifie le nombre de pas pour l'intégration numérique. 102 103 La signification peut dépendre de la méthode d'intégration. 104 */ 127 105 Integrator& 128 106 Integrator::NStep(int n) 129 //130 // Spécifie le nombre de pas pour l'intégration numérique.131 // La signification peut dépendre de la méthode d'intégration.132 //--133 107 { 134 108 mNStep = n; … … 138 112 } 139 113 140 //++ 114 /*! 115 \brief Spécifie le nombre de pas pour l'intégration numérique. 116 117 La signification peut dépendre de la méthode d'intégration. 118 */ 141 119 Integrator& 142 120 Integrator::DX(double d) 143 //144 // Spécifie le pas d'intégration.145 // La signification peut dépendre de la méthode d'intégration.146 //--147 121 { 148 122 mDX = d; … … 152 126 } 153 127 154 //++ 128 /*! 129 \brief Spécifie la précision souhaitée. 130 131 La signification peut dépendre de la méthode d'intégration. 132 Non disponible dans toutes les méthodes d'intégration. 133 */ 155 134 Integrator& 156 135 Integrator::ReqPrec(double p) 157 //158 // Spécifie la précision souhaitée.159 // La signification peut dépendre de la méthode d'intégration.160 // Non disponible dans toutes les méthodes d'intégration.161 //--162 136 { 163 137 DBASSERT( !"Pas encore implemente !"); … … 168 142 } 169 143 170 // ++144 //! Spécifie les bornes de l'intégrale. 171 145 Integrator& 172 146 Integrator::Limits(double xmin, double xmax) 173 //174 // Spécifie les bornes de l'intégrale.175 //--176 147 { 177 148 mXMin = xmin; … … 181 152 } 182 153 183 // ++154 //! Spécifie la fonction à intégrer, sous forme double f(double). 184 155 Integrator& 185 156 Integrator::Func(FUNC f) 186 //187 // Spécifie la fonction à intégrer, sous forme double f(double).188 //--189 157 { 190 158 mFunc = f; … … 195 163 } 196 164 197 //++ 165 /*! 166 \brief Spécifie la fonction à intégrer, sous forme de GeneralFunction 167 à une variable, et les paramètres sont fournis. 168 */ 198 169 Integrator& 199 170 Integrator::Func(GeneralFunction* gff, double* par) 200 //201 // Spécifie la fonction à intégrer, sous forme de GeneralFunction202 // à une variable, et les paramètres sont fournis.203 //--204 171 { 205 172 mGFF = gff; … … 234 201 } 235 202 236 //++ 237 // Class TrpzInteg 238 // Lib Outils++ 239 // include integ.h 240 // 241 // Classe d'intégration par la méthode des trapèzes. 242 // Voir Integrator pour les méthodes. Le nombre de pas 243 // est le nombre de trapèze, le pas d'intégration est 244 // la largeur des trapèzez. Impossible de demander une 245 // précision. 246 // 247 //-- 248 //++ 249 // Links Parents 250 // Integrator 251 //-- 252 253 //++ 254 // Titre Constructeurs 255 // Voir Integrator pour les détails. 256 //-- 257 258 //++ 203 /*! 204 \ingroup NTools 205 \class SOPHYA::TrpzInteg 206 207 \brief Implementation de Integrator par la methode des trapezes. 208 209 Classe d'intégration par la méthode des trapèzes. 210 Voir Integrator pour les méthodes. Le nombre de pas 211 est le nombre de trapèze, le pas d'intégration est 212 la largeur des trapèzez. Impossible de demander une 213 précision. 214 215 \sa SOPHYA::Integrator 216 */ 217 218 259 219 TrpzInteg::TrpzInteg() 260 // 261 //-- 262 {} 263 264 //++ 220 {} 221 265 222 TrpzInteg::TrpzInteg(FUNC f, double xmin, double xmax) 266 //267 //--268 223 : Integrator(f, xmin, xmax) 269 224 {} 270 //++ 225 271 226 TrpzInteg::TrpzInteg(fun f, double xmin, double xmax) 272 //273 //--274 227 : Integrator(f, xmin, xmax) 275 228 {} 276 229 277 //++278 230 TrpzInteg::TrpzInteg(FUNC f) 279 //280 //--281 231 : Integrator(f) 282 232 {} 283 233 284 234 TrpzInteg::TrpzInteg(fun f) 285 //286 //--287 235 : Integrator(f) 288 236 {} 289 237 290 //++291 238 TrpzInteg::TrpzInteg(GeneralFunction* gff, double* par, double xmin, double xmax) 292 //293 //--294 239 : Integrator(gff, par, xmin, xmax) 295 240 {} 296 241 297 //++298 242 TrpzInteg::TrpzInteg(GeneralFunction* gff, double* par) 299 //300 //--301 243 : Integrator(gff, par) 302 244 {} … … 305 247 {} 306 248 249 //! Return the value of the integral. 307 250 double 308 251 TrpzInteg::Value() … … 329 272 330 273 331 //++ 332 // Class GLInteg 333 // Lib Outils++ 334 // include integ.h 335 // 336 // Classe d'intégration par la méthode de Gauss-Legendre. 337 // Voir Integrator pour les méthodes. 338 // Pour le moment, nstep est l'ordre de la méthode. 339 // Il est prévu un jour de spécifier l'ordre, et que NStep 340 // découpe en intervalles sur chacun desquels on applique GL. 341 // Le principe de la méthode est de calculer les valeurs de la 342 // fonction aux zéros des polynomes de Legendre. Avec les poids 343 // qui vont bien, GL d'ordre n est exacte pour des polynomes de 344 // degré <= 2n+1 (monome le + haut x^(2*n-1). 345 // Impossible de demander une précision donnée. 346 // 347 //-- 348 //++ 349 // Links Parents 350 // Integrator 351 //-- 352 353 //++ 354 // Titre Constructeurs 355 // Voir Integrator pour les détails. 356 //-- 357 358 359 360 361 //++ 274 /*! 275 \ingroup NTools 276 \class SOPHYA::GLInteg 277 278 \brief Implementation de Integrator par la methode de Gauss-Legendre. 279 280 Classe d'intégration par la méthode de Gauss-Legendre. 281 Voir Integrator pour les méthodes. 282 Pour le moment, nstep est l'ordre de la méthode. 283 Il est prévu un jour de spécifier l'ordre, et que NStep 284 découpe en intervalles sur chacun desquels on applique GL. 285 Le principe de la méthode est de calculer les valeurs de la 286 fonction aux zéros des polynomes de Legendre. Avec les poids 287 qui vont bien, GL d'ordre n est exacte pour des polynomes de 288 degré <= 2n+1 (monome le + haut x^(2*n-1). 289 Impossible de demander une précision donnée. 290 291 \sa SOPHYA::Integrator 292 293 \warning statut EXPERIMENTAL , NON TESTE 294 */ 295 296 297 362 298 GLInteg::GLInteg() 363 //364 //--365 299 : mXPos(NULL), mWeights(NULL) 366 300 {} 367 301 368 302 369 //++370 303 GLInteg::GLInteg(FUNC f, double xmin, double xmax) 371 //372 //--373 304 : Integrator(f, xmin, xmax), mXPos(NULL), mWeights(NULL), mOrder(8) 374 305 { 375 306 NStep(1); 376 307 } 308 377 309 GLInteg::GLInteg(fun f, double xmin, double xmax) 378 //379 //--380 310 : Integrator(f, xmin, xmax), mXPos(NULL), mWeights(NULL), mOrder(8) 381 311 { 382 312 NStep(1); 383 313 } 384 //++ 314 385 315 GLInteg::GLInteg(FUNC f) 386 //387 //--388 316 : Integrator(f), mXPos(NULL), mWeights(NULL), mOrder(8) 389 317 { 390 318 NStep(1); 391 319 } 320 392 321 GLInteg::GLInteg(fun f) 393 //394 //--395 322 : Integrator(f), mXPos(NULL), mWeights(NULL), mOrder(8) 396 323 { … … 398 325 } 399 326 400 //++401 327 GLInteg::GLInteg(GeneralFunction* gff, double* par, double xmin, double xmax) 402 //403 //--404 328 : Integrator(gff, par, xmin, xmax), mXPos(NULL), mWeights(NULL), mOrder(8) 405 329 { … … 407 331 } 408 332 409 //++410 333 GLInteg::GLInteg(GeneralFunction* gff, double* par) 411 //412 //--413 334 : Integrator(gff, par), mXPos(NULL), mWeights(NULL), mOrder(8) 414 335 { … … 453 374 454 375 376 //! Definit l'ordre de la methode d'integration Gauus-Legendre 455 377 GLInteg& 456 378 GLInteg::SetOrder(int order) … … 462 384 463 385 464 386 //! Retourne la valeur de l'integrale 465 387 double 466 388 GLInteg::Value() … … 527 449 } 528 450 451 //! Imprime l'ordre et la valeur des poids sur cout 529 452 void 530 453 GLInteg::Print(int lp)
Note:
See TracChangeset
for help on using the changeset viewer.