Changeset 2808 in Sophya for trunk/SophyaLib/NTools/difeq.cc


Ignore:
Timestamp:
Jun 14, 2005, 1:25:05 PM (20 years ago)
Author:
ansari
Message:

MAJ documentation - Reza 14/6/2005

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/difeq.cc

    r2615 r2808  
    33#include "ctimer.h"
    44
    5 //++
    6 // Class        DiffEqSolver
    7 // Lib          Outils++
    8 // include      difeq.h
    9 //
    10 //      Classe abstraite de résolveur d'équation différentielles.
    11 //      Beaucoup de méthodes renvoient l'objet afin de pouvoir
    12 //      utiliser une notation chaînée du type
    13 //|     s.Step(...).Start(...).Solve(...)
    14 //--
    15 //++
    16 // Links        Implementations
    17 // RK4DiffEq
    18 // RK4CDiffEq
    19 //--
    20 
    21 //++
    22 // Titre        Constructeurs
    23 //--
    24 
    25 //++
     5/*!
     6  \ingroup NTools
     7  \class SOPHYA::DiffEqSolver
     8  \brief Classe abstraite de résolveur d'équation différentielles.
     9
     10  Beaucoup de méthodes renvoient l'objet afin de pouvoir
     11  utiliser une notation chaînée du type:
     12
     13  s.Step(...).Start(...).Solve(...)
     14
     15  \warning statut EXPERIMENTAL , NON TESTE
     16
     17  \sa SOPHYA::DiffEqFunction
     18  \sa SOPHYA::RK4DiffEq  SOPHYA::RK4CDiffEq
     19*/
     20
     21//!     Constructeur vide.
    2622DiffEqSolver::DiffEqSolver()
    27 //
    28 //      Constructeur vide.
    29 //--
    3023: mFunc(NULL), mOwnFunc(false),
    3124  mYStart(1), mXStart(0), mStep(0.01)
    3225{}
    3326
    34 //++
     27//!  Constructeur général. L'équation est donnée sous forme de DiffEqFunction
    3528DiffEqSolver::DiffEqSolver(DiffEqFunction* f)
    36 //
    37 //      Constructeur général. L'équation est donnée sous forme
    38 //      de DiffEqFunction
    39 //--
    4029: mFunc(f), mOwnFunc(false),
    4130  mYStart(mFunc->NFuncReal()), mXStart(0), mStep(0.01)
    4231{}
    4332
    44 //++
     33/*!
     34  Constructeur pour le cas particulier d'une équation du premier
     35  ordre. Voir DiffEqFcn1. La fonction f correspond à l'équation
     36  y' = f(y).
     37*/
    4538DiffEqSolver::DiffEqSolver(DIFEQFCN1 f)
    46 //
    47 //      Constructeur pour le cas particulier d'une équation du premier
    48 //      ordre. Voir DiffEqFcn1. La fonction f correspond à l'équation
    49 //      y' = f(y).
    50 //--
    5139: mFunc(new DiffEqFcn1(f)), mOwnFunc(true),
    5240  mYStart(mFunc->NFuncReal()), mXStart(0), mStep(0.01)
     
    5846}
    5947
    60 //++
    61 // Titre        Méthodes
    62 //--
    63 
    64 //++
     48
     49/*!
     50  Permet de spécifier l'équation différentielle, sous la forme
     51  d'une DiffEqFunction. Retourne l'objet DiffEqSolver : notation
     52  chaînée possible
     53*/
    6554DiffEqSolver&
    6655DiffEqSolver::Func(DiffEqFunction* f)
    67 //
    68 //      Permet de spécifier l'équation différentielle, sous la forme
    69 //      d'une DiffEqFunction. Retourne l'objet DiffEqSolver : notation
    70 //      chaînée possible
    71 //--
    7256{
    7357  if (mFunc && mOwnFunc) delete mFunc;
     
    7761}
    7862
    79 //++
     63/*!
     64  Permet de spécifier l'équation différentielle, sous la forme
     65  d'une fonction f telle que y' = f(y). Retourne l'objet DiffEqSolver :
     66  notation chaînée possible.
     67*/
    8068DiffEqSolver&
    8169DiffEqSolver::Func(DIFEQFCN1 f)
    82 //
    83 //      Permet de spécifier l'équation différentielle, sous la forme
    84 //      d'une fonction f telle que y' = f(y). Retourne l'objet DiffEqSolver :
    85 //      notation chaînée possible.
    86 //--
    8770{
    8871  if (mFunc && mOwnFunc) delete mFunc;
     
    9275}
    9376
    94 //++
     77/*!
     78  Spécifie le pas d'intégration de l'équation différentielle (pour
     79  les méthodes où ce pas a un sens). La valeur par défaut est 0.01.
     80  Retourne l'objet DiffEqSolver : notation chaînée possible.
     81*/
    9582DiffEqSolver&
    9683DiffEqSolver::Step(double step)
    97 //
    98 //      Spécifie le pas d'intégration de l'équation différentielle (pour
    99 //      les méthodes où ce pas a un sens). La valeur par défaut est 0.01.
    100 //      Retourne l'objet DiffEqSolver : notation chaînée possible.
    101 //--
    10284{
    10385  mStep = step;
     
    10587}
    10688
    107 //++
     89
     90/*!
     91  Spécifie le point de départ de l'intégration de l'équadif.
     92  Le vecteur \b y contient les valeurs intiales. Voir la description
     93  de chaque fonction-objet-équation différentielle pour connaître
     94  le rôle de chaque élément du vecteur. \b t est la valeur initiale
     95  du temps.
     96  La dimension de y doit correspondre au nombre apparent de fonctions.
     97  Retourne l'objet DiffEqSolver : notation chaînée possible.
     98*/
    10899DiffEqSolver&
    109100DiffEqSolver::StartV(Vector const& yi, double t)
    110 //
    111 //      Spécifie le point de départ de l'intégration de l'équadif.
    112 //      Le vecteur y contient les valeurs intiales. Voir la description
    113 //      de chaque fonction-objet-équation différentielle pour connaître
    114 //      le rôle de chaque élément du vecteur. t est la valeur initiale
    115 //      du temps.
    116 //      La dimension de y doit correspondre au nombre apparent de fonctions.
    117 //      Retourne l'objet DiffEqSolver : notation chaînée possible.
    118 //--
    119101{
    120102  ASSERT(mFunc != NULL);
     
    127109}
    128110
    129 //++
     111/*! 
     112  Spécifie le point de départ de l'intégration de l'équadif,
     113  pour une équation y' = f(y). On donne le temps et la valeur de y.
     114  Retourne l'objet DiffEqSolver : notation chaînée possible.
     115*/
    130116DiffEqSolver&
    131117DiffEqSolver::Start1(double y, double t)
    132 //
    133 //      Spécifie le point de départ de l'intégration de l'équadif,
    134 //      pour une équation y' = f(y). On donne le temps et la valeur de y.
    135 //      Retourne l'objet DiffEqSolver : notation chaînée possible.
    136 //--
    137118{
    138119  ASSERT(mFunc != NULL);
     
    146127}
    147128
    148 //++
     129
     130/*!
     131  Spécifie le point de départ de l'intégration de l'équadif.
     132  Le tableau \b yi contient les valeurs intiales. Voir la description
     133  de chaque fonction-objet-équation différentielle pour connaître
     134  le rôle de chaque élément du tableau. t est la valeur initiale
     135  du temps.
     136  Le nombre d'éléments de yi doit correspondre au nombre apparent
     137  de fonctions.
     138  Retourne l'objet DiffEqSolver : notation chaînée possible.
     139*/
    149140DiffEqSolver&
    150141DiffEqSolver::Start(double const* yi, double t)
    151 //
    152 //      Spécifie le point de départ de l'intégration de l'équadif.
    153 //      Le tableau yi contient les valeurs intiales. Voir la description
    154 //      de chaque fonction-objet-équation différentielle pour connaître
    155 //      le rôle de chaque élément du tableau. t est la valeur initiale
    156 //      du temps.
    157 //      Le nombre d'éléments de yi doit correspondre au nombre apparent
    158 //      de fonctions.
    159 //      Retourne l'objet DiffEqSolver : notation chaînée possible.
    160 //--
    161142{
    162143  mYStart.Realloc(mFunc->NFunc());
     
    169150}
    170151
    171 //++
    172 // virtual void DiffEqSolver::SolveArr(Matrix&  y, double* t, double tf, int n)=0
    173 //      Lance la résolution de l'équadif, jusqu'à la valeur
    174 //      tf du temps. N valeurs intermédiaires sont retournées dans
    175 //      les tableaux y et t :
    176 //      t[i] est le temps au pas i, pour 0<=i<n
    177 //      y[i] sont les valeurs des fonctions au pas i.
    178 //      Voir la description
    179 //      de chaque fonction-objet-équation différentielle pour connaître
    180 //      le rôle de chaque élément de y[i].
    181 //      t[n-1] vaut tf.
    182 //      Le nombre d'éléments de y[i] doit correspondre au nombre apparent
    183 //      de fonctions.
    184 //      Cette fonction doit être redéfinie pour chaque méthode de résolution
    185 //      d'équations. Elle est appelée par toutes les autres fonctions de
    186 //      résolution (autres SolveArr, et Solve).
    187 //--
    188 
    189 
    190 //++
     152/*!
     153  \fn virtual void DiffEqSolver::SolveArr(Matrix&  y, double* t, double tf, int n)
     154
     155  Lance la résolution de l'équadif, jusqu'à la valeur
     156  tf du temps. N valeurs intermédiaires sont retournées dans
     157  les tableaux y et t :
     158  - t[i] est le temps au pas i, pour 0<=i<n
     159  - y[i] sont les valeurs des fonctions au pas i.
     160
     161  Voir la description   
     162  de chaque fonction-objet-équation différentielle pour connaître
     163  le rôle de chaque élément de y[i].
     164  t[n-1] vaut tf.
     165  Le nombre d'éléments de y[i] doit correspondre au nombre apparent
     166  de fonctions.
     167  Cette fonction doit être redéfinie pour chaque méthode de résolution
     168  d'équations. Elle est appelée par toutes les autres fonctions de
     169  résolution (autres SolveArr, et Solve).
     170*/
     171
     172
     173/*!
     174  Lance la résolution de l'équadif, jusqu'à la valeur
     175  tf du temps. Les valeurs finales sont retournées dans yf.
     176  Voir la description
     177  de chaque fonction-objet-équation différentielle pour connaître
     178  le rôle de chaque élément de yf.
     179  Le nombre d'éléments de yf doit correspondre au nombre apparent
     180  de fonctions.
     181*/
    191182void
    192183DiffEqSolver::SolveV(Vector& yf, double tf)
    193 //
    194 //      Lance la résolution de l'équadif, jusqu'à la valeur
    195 //      tf du temps. Les valeurs finales sont retournées dans yf.
    196 //      Voir la description
    197 //      de chaque fonction-objet-équation différentielle pour connaître
    198 //      le rôle de chaque élément de yf.
    199 //      Le nombre d'éléments de yf doit correspondre au nombre apparent
    200 //      de fonctions.
    201 //--
    202184{
    203185  double t;
     
    209191}
    210192
    211 //++
     193
     194/*!
     195  Lance la résolution de l'équadif, jusqu'à la valeur
     196  tf du temps, pour une équation du premier ordre y' = f(y).
     197  La valeur finale de y est retournée dans yf.
     198*/
    212199void
    213200DiffEqSolver::Solve1(double& yf, double tf)
    214 //
    215 //      Lance la résolution de l'équadif, jusqu'à la valeur
    216 //      tf du temps, pour une équation du premier ordre y' = f(y).
    217 //      La valeur finale de y est retournée dans yf.
    218 //--
    219201{
    220202  ASSERT(mFunc->NFunc() == 1);
     
    225207}
    226208
    227 //++
     209
     210/*!
     211  Lance la résolution de l'équadif, jusqu'à la valeur   
     212  tf du temps. Les valeurs finales sont retournées dans yf.
     213  Voir la description
     214  de chaque fonction-objet-équation différentielle pour connaître
     215  le rôle de chaque élément de yf.
     216  Le nombre d'éléments de yf doit correspondre au nombre apparent
     217  de fonctions.
     218*/
    228219void
    229220DiffEqSolver::Solve(double* yf, double tf)
    230 //
    231 //      Lance la résolution de l'équadif, jusqu'à la valeur
    232 //      tf du temps. Les valeurs finales sont retournées dans yf.
    233 //      Voir la description
    234 //      de chaque fonction-objet-équation différentielle pour connaître
    235 //      le rôle de chaque élément de yf.
    236 //      Le nombre d'éléments de yf doit correspondre au nombre apparent
    237 //      de fonctions.
    238 //--
    239221{
    240222  double t;
     
    245227}
    246228
    247 //++
     229/*!
     230  Lance la résolution de l'équadif (du premier ordre), jusqu'à la valeur
     231  tf du temps. N valeurs intermediaires sont retournées dans
     232  les tableaux y et t :
     233  t[i] est le temps au pas i, pour 0<=i<n
     234  y[i] est la valeur de la fonction au pas i.
     235  t[n-1] vaut tf.
     236*/
    248237void
    249238DiffEqSolver::SolveArr1(double*  y, double* t, double tf, int n)
    250 //
    251 //      Lance la résolution de l'équadif (du premier ordre), jusqu'à la valeur
    252 //      tf du temps. N valeurs intermediaires sont retournées dans
    253 //      les tableaux y et t :
    254 //      t[i] est le temps au pas i, pour 0<=i<n
    255 //      y[i] est la valeur de la fonction au pas i.
    256 //      t[n-1] vaut tf.
    257 //--
    258239
    259240{
     
    265246}
    266247
    267 //++
     248/*!
     249  Lance la résolution de l'équadif, jusqu'à la valeur
     250  tf du temps. N valeurs intermédiaires sont retournées dans
     251  les tableaux y et t :
     252  t[i] est le temps au pas i, pour 0<=i<n
     253  y[i] sont les valeurs des fonctions au pas i.
     254  Voir la description
     255  de chaque fonction-objet-équation différentielle pour connaître
     256  le rôle de chaque élément de y[i].
     257  t[n-1] vaut tf.
     258  Le nombre d'éléments de y[i] doit correspondre au nombre apparent
     259  de fonctions.
     260*/
    268261void
    269262DiffEqSolver::SolveArr2(double** y, double* t, double tf, int n)
    270 //
    271 //      Lance la résolution de l'équadif, jusqu'à la valeur
    272 //      tf du temps. N valeurs intermédiaires sont retournées dans
    273 //      les tableaux y et t :
    274 //      t[i] est le temps au pas i, pour 0<=i<n
    275 //      y[i] sont les valeurs des fonctions au pas i.
    276 //      Voir la description
    277 //      de chaque fonction-objet-équation différentielle pour connaître
    278 //      le rôle de chaque élément de y[i].
    279 //      t[n-1] vaut tf.
    280 //      Le nombre d'éléments de y[i] doit correspondre au nombre apparent
    281 //      de fonctions.
    282 //--
    283263{
    284264   Matrix m(n, mFunc->NFuncReal());
     
    290270
    291271
    292 //++
    293 // Class        DiffEqFunction
    294 // Lib  Outils++
    295 // include      difeq.h
    296 //
    297 //      Classe de fonctions pour la résolution d'équations différentielles.
    298 //      On résoud de facon générale un système de n équations différentielles
    299 //      du premier ordre, donnant les dérivées fpi de n fonctions fi.
    300 //      Cette méthode permet de résoudre toutes les sortes d'équations :
    301 //      pour une équation du second ordre on crée une fonction intermédiaire
    302 //      qui est la dérivée de la fonction cherchée.
    303 //--
    304 
    305 //++
    306 // DiffEqFunction::DiffEqFunction(int n)
    307 //      Constructeur. N est le nombre de fonctions dans le
    308 //      système.
    309 //--
    310 
    311 //++
    312 // DiffEqFunction::DiffEqFunction(int n, int napp)
    313 //      Constructeur. N est le nombre réel de fonctions dans le
    314 //      système, et napp le nombre apparent (pour l'utilisateur).
    315 //      En effet, dans certains cas, on peut avoir besoin de fonctions
    316 //      supplémentaires masquées à l'utilisateur, par exemple la fonction
    317 //      constante valant 1, si l'équadif fait intervenir le temps (t).
    318 //--
    319 
    320 //++
    321 //  virtual void ComputeV(Vector& fpi, Vector const& fi)
    322 //      Calcule les valeurs des dérivées fpi à partir des valeurs
    323 //      des fonctions fi. A redéfinir.
    324 //--
    325 
    326 //++
    327 //  virtual void Compute(double& fp, double f)
    328 //      Dans le cas où il y a une seule fonction, calcule la dérivée
    329 //      fp à partir de la valeur de la fonction f. A redéfinir.
    330 //--
    331 
    332 //++
    333 // int NFunc()
    334 //      Nombre apparent de fonctions dans le système
    335 //--
    336  
    337 //++
    338 // int NFuncReal() {return mNFunc;}
    339 //      Nombre réel de fonctions dans le système
    340 //--
     272/*!
     273  \ingroup NTools
     274  \class SOPHYA::DiffEqFunction
     275 
     276  \brief Classe de fonctions pour la résolution d'équations différentielles.
     277 
     278  On résoud de facon générale un système de n équations différentielles
     279  du premier ordre, donnant les dérivées fpi de n fonctions fi.
     280  Cette méthode permet de résoudre toutes les sortes d'équations :
     281  pour une équation du second ordre on crée une fonction intermédiaire
     282  qui est la dérivée de la fonction cherchée.
     283
     284  \warning statut EXPERIMENTAL , NON TESTE
     285
     286  \sa SOPHYA::DiffEqSolver
     287*/
     288
     289
     290
     291/*!
     292  \fn DiffEqFunction::DiffEqFunction(int n, int napp)
     293  Constructeur. N est le nombre réel de fonctions dans le
     294  système, et napp le nombre apparent (pour l'utilisateur).
     295  En effet, dans certains cas, on peut avoir besoin de fonctions
     296  supplémentaires masquées à l'utilisateur, par exemple la fonction
     297  constante valant 1, si l'équadif fait intervenir le temps (t).
     298*/
     299
     300/*!
     301  \fn virtual void ComputeV(Vector& fpi, Vector const& fi)
     302  Calcule les valeurs des dérivées fpi à partir des valeurs
     303  des fonctions fi. A redéfinir.
     304*/
     305
     306/*!
     307  \fn virtual void Compute(double& fp, double f)
     308  Dans le cas où il y a une seule fonction, calcule la dérivée
     309  fp à partir de la valeur de la fonction f. A redéfinir.
     310*/
     311
    341312
    342313//++
     
    348319
    349320
    350 //++
    351 // Class        DiffEqFcn1
    352 // Lib  Outils++
    353 // include      difeq.h
    354 //
    355 //      Objet-fonction générique pour la résolution d'équations
    356 //      différentielles de la forme y' = f(y).
    357 //      On fournit une fonction de type
    358 //|     typedef double(*DIFEQFCN1)(double);
    359 //      qui retourne y' en fonction de y.
    360 //--
    361 //++
    362 // Links        Parents
    363 // DiffEqFunction
    364 //--
    365 
    366 //++
     321/*!
     322  \ingroup NTools
     323  \class SOPHYA::DiffEqFcn1
     324 
     325  \brief Objet-fonction générique pour la résolution d'équations
     326  différentielles de la forme y' = f(y).
     327 
     328  On fournit une fonction de type <br>
     329  <tt> typedef double(*DIFEQFCN1)(double); </tt> <br>
     330  qui retourne y' en fonction de y.
     331
     332  \warning statut EXPERIMENTAL , NON TESTE
     333*/
     334
     335
     336//!     Constructeur. On fournit la fonction f tq y'=f(y)
    367337DiffEqFcn1::DiffEqFcn1(DIFEQFCN1 fcn)
    368 //
    369 //      Constructeur. On fournit la fonction f tq y'=f(y)
    370 //--
    371338: DiffEqFunction(1), mFcn(fcn)
    372339{}
    373340
     341
     342//! Implementation de Compute qui va utiliser la fonction fournie au constructeur.
    374343void
    375344DiffEqFcn1::Compute(double& fp, double f)
     
    378347}
    379348
    380 //++
    381 // Class        DiffEqFcnT1
    382 // Lib  Outils++
    383 // include      difeq.h
    384 //
    385 //      Objet-fonction générique pour la résolution d'équations
    386 //      différentielles de la forme y' = f(y,t).
    387 //      On fournit une fonction de type
    388 //|     typedef double(*DIFEQFCNT1)(double, double);
    389 //      qui retourne y' en fonction de y et t.
    390 //      Note : le système résolu est alors en fait
    391 //|     y'[0] = fcn(y[0], y[1])
    392 //|     y'[1] = 1
    393 //--
    394 //++
    395 // Links        Parents
    396 // DiffEqFunction
    397 //--
    398 
    399 //++
     349/*!
     350  \ingroup NTools
     351  \class   SOPHYA::DiffEqFcnT1
     352
     353  Objet-fonction générique pour la résolution d'équations
     354  différentielles de la forme y' = f(y,t).
     355  On fournit une fonction de type
     356  <tt>  typedef \tt double(*DIFEQFCNT1)(double, double); </tt>
     357  qui retourne y' en fonction de y et t.
     358
     359  \verbatim
     360  Note : le système résolu est alors en fait
     361  y'[0] = fcn(y[0], y[1])
     362  y'[1] = 1
     363  \endverbatim
     364
     365  \warning statut EXPERIMENTAL , NON TESTE
     366*/
     367
     368//! Constructeur. On fournit la fonction f tq y' = f(y,t)
    400369DiffEqFcnT1::DiffEqFcnT1(DIFEQFCNT1 fcn)
    401 //
    402 //      Constructeur. On fournit la fonction f tq y' = f(y,t)
    403 //--
    404370: DiffEqFunction(2, 1), mFcn(fcn)
    405371{}
     
    419385}
    420386
    421 //++
    422 // Class        DiffEqFcn2
    423 // Lib  Outils++
    424 // include      difeq.h
    425 //
    426 //      Objet-fonction générique pour la résolution d'équations
    427 //      différentielles de la forme y'' = f(y',y).
    428 //      On fournit une fonction de type
    429 //|     typedef double(*DIFEQFCN2)(double, double);
    430 //      qui retourne y'' en fonction de y' et y.
    431 //      Note : le système résolu est en fait
    432 //|     y'[0] = y[1]
    433 //|     y'[1] = f(y[1], y[0])
    434 //--
    435 //++
    436 // Links        Parents
    437 // DiffEqFunction
    438 //--
    439 
    440 //++
     387/*!
     388  \ingroup NTools
     389  \class   SOPHYA::DiffEqFcn2
     390 
     391  Objet-fonction générique pour la résolution d'équations
     392  différentielles de la forme y'' = f(y',y).
     393  On fournit une fonction de type
     394  <tt>  typedef double(*DIFEQFCN2)(double, double); </tt>
     395  qui retourne y'' en fonction de y' et y.
     396  \verbatim
     397  Note : le système résolu est en fait
     398  y'[0] = y[1]
     399  y'[1] = f(y[1], y[0])
     400  \endverbatim
     401
     402  \warning statut EXPERIMENTAL , NON TESTE
     403*/
     404
     405//!   Constructeur. On fournit la fonction f tq y''=f(y',y)
    441406DiffEqFcn2::DiffEqFcn2(DIFEQFCN2 fcn)
    442 //
    443 //      Constructeur. On fournit la fonction f tq y''=f(y',y)
    444 //--
    445407: DiffEqFunction(2), mFcn(fcn)
    446408{}
     
    453415}
    454416
    455 //++
    456 // Class        DiffEqFcnT2
    457 // Lib  Outils++
    458 // include      difeq.h
    459 //
    460 //      Objet-fonction générique pour la résolution d'équations
    461 //      différentielles de la forme y'' = f(y',y,t).
    462 //      On fournit une fonction de type
    463 //|     typedef double(*DIFEQFCNT2)(double, double, double);
    464 //      qui retourne y'' en fonction de y', y et t.
    465 //      Note : le système résolu est alors en fait
    466 //|     y'[0] = y[1]
    467 //|     y'[1] = f(y[1], y[0], y[2])
    468 //|     y'[2] = 1
    469 //--
    470 //++
    471 // Links        Parents
    472 // DiffEqFunction
    473 //--
    474 
    475 //++
     417/*!
     418  \ingroup NTools
     419  \class SOPHYA::DiffEqFcnT2
     420 
     421  Objet-fonction générique pour la résolution d'équations
     422  différentielles de la forme y'' = f(y',y,t).
     423  On fournit une fonction de type <br>
     424  <tt> typedef double(*DIFEQFCNT2)(double, double, double); </tt> <br>
     425  qui retourne y'' en fonction de y', y et t.
     426  \verbatim
     427  Note : le système résolu est alors en fait
     428  y'[0] = y[1]
     429  y'[1] = f(y[1], y[0], y[2])
     430  y'[2] = 1
     431  \endverbatim
     432
     433  \warning statut EXPERIMENTAL , NON TESTE
     434*/
     435
     436//!     Constructeur. On fournit la fonction f tq y'' = f(y',y,t)
    476437DiffEqFcnT2::DiffEqFcnT2(DIFEQFCNT2 fcn)
    477 //
    478 //      Constructeur. On fournit la fonction f tq y'' = f(y',y,t)
    479 //--
    480438: DiffEqFunction(3,2), mFcn(fcn)
    481439{}
     
    497455
    498456
    499 //++
    500 // Class        DiffEqFcnV
    501 // Lib  Outils++
    502 // include      difeq.h
    503 //
    504 //      Objet-fonction générique pour la résolution d'équations
    505 //      différentielles 3D de la forme y'' = f(y',y), ou y est
    506 //      un vecteur de dimension 3.
    507 //      On fournit une fonction de type
    508 //|     typedef void(*DIFEQFCNV)(Vector& y2, Vector const& y1,
    509 //|                              Vector const& y);
    510 //      qui retourne y'' en fonction de y' et y.
    511 //      Note : le système résolu est alors en fait
    512 //|     v(0-2) = y, v(3-5) = y'
    513 //|
    514 //|     v'[0] = v[3]
    515 //|     v'[1] = v[4]
    516 //|     v'[2] = v[5]
    517 //|     v'[3-5] = f(v[3-5], v[0-2])
    518 //--
    519 //++
    520 // Links        Parents
    521 // DiffEqFunction
    522 //--
     457/*!
     458  \ingroup NTools
     459  \class  SOPHYA::DiffEqFcnV
     460 
     461  Objet-fonction générique pour la résolution d'équations
     462  différentielles 3D de la forme y'' = f(y',y), ou y est
     463  un vecteur de dimension 3.
     464  On fournit une fonction de type <br>
     465  <tt> typedef void(*DIFEQFCNV)(Vector& y2, Vector const& y1, <br>
     466  Vector const& y); </tt> <br>
     467  qui retourne y'' en fonction de y' et y.
     468  \verbatim
     469  Note : le système résolu est alors en fait
     470  v(0-2) = y, v(3-5) = y'
     471
     472  v'[0] = v[3]
     473  v'[1] = v[4]
     474  v'[2] = v[5]
     475  v'[3-5] = f(v[3-5], v[0-2])
     476  \endverbatim
     477
     478  \warning statut EXPERIMENTAL , NON TESTE
     479*/
    523480
    524481DiffEqFcnV::DiffEqFcnV(DIFEQFCNV fcn)
     
    543500
    544501
    545 //++
    546 // Class        RK4DiffEq
    547 // Lib          Outils++
    548 // include      difeq.h
    549 //
    550 //      Classe de résolution d'équadif par la méthode de
    551 //      Runge-Kutta d'ordre 4.
    552 //      Voir DiffEqSolver pour les méthodes.
    553 //--
    554 //++
    555 // Links        Parents
    556 // DiffEqSolver
    557 //--
    558 
    559 //++
    560 // Titre        Constructeurs
    561 //--
     502/*!
     503  \ingroup NTools
     504  \class SOPHYA::RK4DiffEq
     505 
     506  Classe de résolution d'équadif par la méthode de
     507  Runge-Kutta d'ordre 4.
     508  Voir DiffEqSolver pour les méthodes.
     509
     510  \warning statut EXPERIMENTAL , NON TESTE
     511*/
    562512
    563513RK4DiffEq::RK4DiffEq()
     
    565515{}
    566516
    567 //++
     517//!     Constructeur général
    568518RK4DiffEq::RK4DiffEq(DiffEqFunction* f)
    569 //
    570 //      Constructeur général
    571 //--
    572519: DiffEqSolver(f), k1(f->NFuncReal()),
    573520  k2(f->NFuncReal()), k3(f->NFuncReal()), k4(f->NFuncReal())
    574521{}
    575522
    576 //++
     523
     524//!     Constructeur pour y' = f(y)
    577525RK4DiffEq::RK4DiffEq(DIFEQFCN1 f)
    578 //
    579 //      Constructeur pour y' = f(y)
    580 //--
    581526: DiffEqSolver(f), k1(1), k2(1), k3(1), k4(1)
    582527{}
Note: See TracChangeset for help on using the changeset viewer.