Changeset 926 in Sophya for trunk/SophyaLib/NTools/fct1dfit.cc
- Timestamp:
- Apr 13, 2000, 8:39:39 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/fct1dfit.cc
r514 r926 18 18 19 19 ///////////////////////////////////////////////////////////////// 20 //++ 21 // Module Classes de fonctions 1D 22 // Lib Outils++ 23 // include fct1dfit.h 24 //-- 25 ///////////////////////////////////////////////////////////////// 26 27 ///////////////////////////////////////////////////////////////// 28 //++ 29 // Titre Gauss1DPol 30 // \index{Gauss1DPol} 31 // 32 //| Gaussienne+polynome: 33 //| Si polcenter=true: xc=(x-par[1]), sinon xc=x 34 //| f(x) = par[0]*exp[-0.5*( (x-par[1]) / par[2] )**2 ] 35 //| +par[3] + par[4]*xc + .... + par[3+NDegPol]*xc**NDegPol 36 //| NDegPol = degre du polynome, si <0 pas de polynome 37 //-- 38 ///////////////////////////////////////////////////////////////// 39 40 //++ 20 /*! 21 \class SOPHYA::Gauss1DPol 22 \ingroup NTools 23 \anchor Gauss1DPol 24 \verbatim 25 Gaussienne+polynome: 26 Si polcenter=true: xc=(x-par[1]), sinon xc=x 27 f(x) = par[0]*exp[-0.5*( (x-par[1]) / par[2] )**2 ] 28 +par[3] + par[4]*xc + .... + par[3+NDegPol]*xc**NDegPol 29 NDegPol = degre du polynome, si <0 pas de polynome 30 \endverbatim 31 */ 41 32 Gauss1DPol::Gauss1DPol(unsigned int ndegpol,bool polcenter) 42 //43 // Createur.44 //--45 33 : GeneralFunction(1,ndegpol+4), NDegPol(ndegpol), PolCenter(polcenter) 46 34 { 47 35 } 48 36 49 //++50 37 Gauss1DPol::Gauss1DPol(bool polcenter) 51 //52 // Createur.53 //--54 38 : GeneralFunction(1,3), NDegPol(-1), PolCenter(polcenter) 55 39 { … … 107 91 108 92 ///////////////////////////////////////////////////////////////// 109 //++ 110 // Titre GaussN1DPol 111 // \index{GaussN1DPol} 112 // 113 //| Gaussienne_Normalisee+polynome (par[0]=Volume: 114 //| Si polcenter=true: xc=(x-par[1]), sinon xc=x 115 //| f(x) = par[0]/(sqrt(2*Pi)*par[2])*exp[-0.5*((x-par[1])/par[2])**2 ] 116 //| +par[3] + par[4]*xc + .... + par[3+NDegPol]*xc**NDegPol 117 //| NDegPol = degre du polynome, si <0 pas de polynome 118 //-- 119 ///////////////////////////////////////////////////////////////// 120 121 //++ 93 /*! 94 \class SOPHYA::GaussN1DPol 95 \ingroup NTools 96 \anchor GaussN1DPol 97 \verbatim 98 Gaussienne_Normalisee+polynome (par[0]=Volume: 99 Si polcenter=true: xc=(x-par[1]), sinon xc=x 100 f(x) = par[0]/(sqrt(2*Pi)*par[2])*exp[-0.5*((x-par[1])/par[2])**2 ] 101 +par[3] + par[4]*xc + .... + par[3+NDegPol]*xc**NDegPol 102 NDegPol = degre du polynome, si <0 pas de polynome 103 \endverbatim 104 */ 122 105 GaussN1DPol::GaussN1DPol(unsigned int ndegpol,bool polcenter) 123 //124 // Createur.125 //--126 106 : GeneralFunction(1,ndegpol+4), NDegPol(ndegpol), PolCenter(polcenter) 127 107 { 128 108 } 129 109 130 //++131 110 GaussN1DPol::GaussN1DPol(bool polcenter) 132 //133 // Createur.134 //--135 111 : GeneralFunction(1,3), NDegPol(-1), PolCenter(polcenter) 136 112 { … … 189 165 190 166 ///////////////////////////////////////////////////////////////// 191 //++ 192 // Titre Exp1DPol 193 // \index{Exp1DPol} 194 // 195 //| Exponentielle+polynome: 196 //| xx = x - X_Center 197 //| f(x) = exp[par[0]+par[1]*xx] 198 //| +par[2] + par[3]*xx + .... + par[2+NDegPol]*xx**NDegPol 199 //| NDegPol = degre du polynome, si <0 pas de polynome 200 //-- 201 ///////////////////////////////////////////////////////////////// 202 203 //++ 167 /*! 168 \class SOPHYA::Exp1DPol 169 \ingroup NTools 170 \anchor Exp1DPol 171 \verbatim 172 Exponentielle+polynome: 173 xx = x - X_Center 174 f(x) = exp[par[0]+par[1]*xx] 175 +par[2] + par[3]*xx + .... + par[2+NDegPol]*xx**NDegPol 176 NDegPol = degre du polynome, si <0 pas de polynome 177 \endverbatim 178 */ 204 179 Exp1DPol::Exp1DPol(unsigned int ndegpol,double x0) 205 //206 // Createur.207 //--208 180 : GeneralFunction(1,ndegpol+3), NDegPol(ndegpol), X_Center(x0) 209 181 { 210 182 } 211 183 212 //++213 184 Exp1DPol::Exp1DPol(double x0) 214 //215 // Createur.216 //--217 185 : GeneralFunction(1,2), NDegPol(-1), X_Center(x0) 218 186 { … … 259 227 260 228 ///////////////////////////////////////////////////////////////// 261 //++ 262 // Titre Polyn1D 263 // \index{Polyn1D} 264 // 265 //| polynome 1D: 266 //| xx = x - X_Center 267 //| f(x) = par[0] + par[1]*xx + .... + par[NDegPol+1]*xx**NDegPol 268 //| NDegPol = degre du polynome 269 //-- 270 ///////////////////////////////////////////////////////////////// 271 272 //++ 229 /*! 230 \class SOPHYA::Polyn1D 231 \ingroup NTools 232 \anchor Polyn1D 233 \verbatim 234 polynome 1D: 235 xx = x - X_Center 236 f(x) = par[0] + par[1]*xx + .... + par[NDegPol+1]*xx**NDegPol 237 NDegPol = degre du polynome 238 \endverbatim 239 */ 273 240 Polyn1D::Polyn1D(unsigned int ndegpol,double x0) 274 //275 // Createur.276 //--277 241 : GeneralFunction(1,ndegpol+1), NDegPol(ndegpol), X_Center(x0) 278 242 { … … 309 273 310 274 ///////////////////////////////////////////////////////////////// 311 //++ 312 // Titre HarmonieNu 313 // \index{HarmonieNu} 314 // 315 //| Analyse harmonique: 316 //| f(t) = par(1) + Sum[par(2k) *cos(2*pi*k*par(0)*(t-t0)] 317 //| + Sum[par(2k+1)*sin(2*pi*k*par(0)*(t-t0)] 318 //| la somme Sum porte sur l'indice k qui varie de [1,NHarm()+1] 319 //| avec la convention k=1 pour le fondamental 320 //| k>1 pour le (k-1)ieme harmonique 321 //-- 322 //++ 323 //| par(0) = inverse de la periode (frequence) 324 //| par(1) = terme constant 325 //| par(2), par(3) = termes devant le cosinus et le sinus 326 //| du fondamental 327 //| par(2(m+1)), par(2(m+1)+1) = termes devant le cosinus 328 //| et le sinus de l'harmonique m (m>=1). 329 //| NHarm() = nombre d'harmoniques a fitter. 330 //| T0() = centrage des temps, ce n'est pas un parametre du fit. 331 // `Conseil:' Avant de faire un fit avec les `NHarm()' 332 // harmoniques, il est preferable de faire un pre-fit 333 // ou seuls les parametres 1,2 et 3 sont libres et d'injecter 334 // le resultat du fit sur ces 3 parametres comme valeurs 335 // de depart pour le fit global avec les `NHarm()' harmoniques. 336 // De toute facon, le fit ne marchera que si la periode 337 // est initialisee de facon tres precise. 338 //-- 339 ///////////////////////////////////////////////////////////////// 340 341 //++ 275 /*! 276 \class SOPHYA::HarmonieNu 277 \ingroup NTools 278 \anchor HarmonieNu 279 \verbatim 280 Analyse harmonique: 281 f(t) = par(1) + Sum[par(2k) *cos(2*pi*k*par(0)*(t-t0)] 282 + Sum[par(2k+1)*sin(2*pi*k*par(0)*(t-t0)] 283 la somme Sum porte sur l'indice k qui varie de [1,NHarm()+1] 284 avec la convention k=1 pour le fondamental 285 k>1 pour le (k-1)ieme harmonique 286 par(0) = inverse de la periode (frequence) 287 par(1) = terme constant 288 par(2), par(3) = termes devant le cosinus et le sinus 289 du fondamental 290 par(2(m+1)), par(2(m+1)+1) = termes devant le cosinus 291 et le sinus de l'harmonique m (m>=1). 292 NHarm() = nombre d'harmoniques a fitter. 293 T0() = centrage des temps, ce n'est pas un parametre du fit. 294 `Conseil:' Avant de faire un fit avec les `NHarm()' 295 harmoniques, il est preferable de faire un pre-fit 296 ou seuls les parametres 1,2 et 3 sont libres et d'injecter 297 le resultat du fit sur ces 3 parametres comme valeurs 298 de depart pour le fit global avec les `NHarm()' harmoniques. 299 De toute facon, le fit ne marchera que si la periode 300 est initialisee de facon tres precise. 301 \endverbatim 302 */ 342 303 HarmonieNu::HarmonieNu(unsigned int nharm,double t0) 343 //344 // Createur.345 //--346 304 : GeneralFunction(1,4+2*nharm), NHarm(nharm), T0(t0) 347 305 { … … 384 342 385 343 ///////////////////////////////////////////////////////////////// 386 //++ 387 // Titre HarmonieT 388 // \index{HarmonieT} 389 // 390 //| Analyse harmonique: 391 //| f(t) = par(1) + Sum[par(2k) *cos(2*pi*k*(t-t0)/par(0)] 392 //| + Sum[par(2k+1)*sin(2*pi*k*(t-t0)/par(0)] 393 //| la somme Sum porte sur l'indice k qui varie de [1,NHarm()+1] 394 //| avec la convention k=1 pour le fondamental 395 //| k>1 pour le (k-1)ieme harmonique 396 //-- 397 //++ 398 //| par(0) = periode 399 //| par(1) = terme constant 400 //| par(2), par(3) = termes devant le cosinus et le sinus 401 //| du fondamental 402 //| par(2(m+1)), par(2(m+1)+1) = termes devant le cosinus 403 //| et le sinus de l'harmonique m (m>=1). 404 //| NHarm() = nombre d'harmoniques a fitter. 405 //| T0() = centrage des temps, ce n'est pas un parametre du fit. 406 //-- 407 ///////////////////////////////////////////////////////////////// 408 409 //++ 344 /*! 345 \class SOPHYA::HarmonieT 346 \ingroup NTools 347 \anchor HarmonieT 348 \verbatim 349 Analyse harmonique: 350 f(t) = par(1) + Sum[par(2k) *cos(2*pi*k*(t-t0)/par(0)] 351 + Sum[par(2k+1)*sin(2*pi*k*(t-t0)/par(0)] 352 la somme Sum porte sur l'indice k qui varie de [1,NHarm()+1] 353 avec la convention k=1 pour le fondamental 354 k>1 pour le (k-1)ieme harmonique 355 par(0) = periode 356 par(1) = terme constant 357 par(2), par(3) = termes devant le cosinus et le sinus 358 du fondamental 359 par(2(m+1)), par(2(m+1)+1) = termes devant le cosinus 360 et le sinus de l'harmonique m (m>=1). 361 NHarm() = nombre d'harmoniques a fitter. 362 T0() = centrage des temps, ce n'est pas un parametre du fit. 363 \endverbatim 364 */ 410 365 HarmonieT::HarmonieT(unsigned int nharm,double t0) 411 //412 // Createur.413 //--414 366 : GeneralFunction(1,4+2*nharm), NHarm(nharm), T0(t0) 415 367 { … … 455 407 456 408 ///////////////////////////////////////////////////////////////// 457 //++ 458 // Module Classes de fonctions 2D 459 // Lib Outils++ 460 // include fct1dfit.h 461 //-- 462 ///////////////////////////////////////////////////////////////// 463 464 ///////////////////////////////////////////////////////////////// 465 //++ 466 // Titre Polyn2D 467 // \index{Polyn2D} 468 // 469 //| polynome 2D de degre total degre: 470 //| NDegPol = degre du polynome (note N dans la suite) 471 //| x = x - X_Center, y = y - Y_Center 472 //| f(x,y) = p[0] +sum(k=1,n){ sum(i=0,k){ p[ki]*x^i*y^(k-i) }} 473 //| Il y a k+1 termes de degre k (ex: x^i*y^(k-i)) 474 //| terme de degre k avec x^i: p[ki] avec ki = k*(k+1)/2 + i 475 //| C'est a dire: 476 //| deg0: p0 477 //| deg1: + p1*y + p2*x 478 //| deg2: + p3*y^2 + p4*x*y + p5*x^2 479 //| deg3: + p6*y^3 + p7*x*y^2 + p8*x^2*y + p9*x^3 480 //| deg4: + p10*y^4 + p11*x*y^3 + p12*x^2*y^2 + p13*x^3*y + p14*x^4 481 //| deg5: + p15*y^5 + ... ... + ... + p20*x^5 482 //| ... 483 //| degk: + p[k*(k+1)/2]*y^k + ... ... + p[k*(k+3)/2]*x^k 484 //| ... 485 //| degn: + p[n*(n+1)/2]*y^n + ... ... + p[n*(n+3)/2]*x^n 486 //-- 487 ///////////////////////////////////////////////////////////////// 488 489 //++ 409 /*! 410 \class SOPHYA::Polyn2D 411 \ingroup NTools 412 \anchor Polyn2D 413 \verbatim 414 polynome 2D de degre total degre: 415 NDegPol = degre du polynome (note N dans la suite) 416 x = x - X_Center, y = y - Y_Center 417 f(x,y) = p[0] +sum(k=1,n){ sum(i=0,k){ p[ki]*x^i*y^(k-i) }} 418 Il y a k+1 termes de degre k (ex: x^i*y^(k-i)) 419 terme de degre k avec x^i: p[ki] avec ki = k*(k+1)/2 + i 420 C'est a dire: 421 deg0: p0 422 deg1: + p1*y + p2*x 423 deg2: + p3*y^2 + p4*x*y + p5*x^2 424 deg3: + p6*y^3 + p7*x*y^2 + p8*x^2*y + p9*x^3 425 deg4: + p10*y^4 + p11*x*y^3 + p12*x^2*y^2 + p13*x^3*y + p14*x^4 426 deg5: + p15*y^5 + ... ... + ... + p20*x^5 427 ... 428 degk: + p[k*(k+1)/2]*y^k + ... ... + p[k*(k+3)/2]*x^k 429 ... 430 degn: + p[n*(n+1)/2]*y^n + ... ... + p[n*(n+3)/2]*x^n 431 \endverbatim 432 */ 490 433 Polyn2D::Polyn2D(unsigned int ndegpol,double x0,double y0) 491 //492 // Createur.493 //--494 434 : GeneralFunction(2,ndegpol*(ndegpol+3)/2+1), NDegPol(ndegpol), X_Center(x0), Y_Center(y0) 495 435 {
Note:
See TracChangeset
for help on using the changeset viewer.