{"id":1291,"date":"2026-08-21T14:31:19","date_gmt":"2026-08-21T14:31:19","guid":{"rendered":"https:\/\/matforge.org\/?p=1291","raw":"https:\/\/matforge.org\/?p=1291"},"modified":"2026-08-21T14:31:19","modified_gmt":"2026-08-21T14:31:19","slug":"stiff-problems-and-stiff-solvers","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/","title":{"rendered":"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent","raw":"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 13<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><article>\n<p>Une simulation d\u00e9pendante du temps peut sembler bien formul\u00e9e et obliger toujours un solveur explicite \u00e0 franchir des milliers de mesures extr\u00eamement petites. Augmenter la commande d&rsquo;Euler vers l&rsquo;avant vers RK4 peut retarder le probl\u00e8me, mais cela ne le supprime pas toujours. Le syst\u00e8me peut \u00eatre rigide.<\/p>\n<p>La rigidit\u00e9 appara\u00eet lorsque la stabilit\u00e9 num\u00e9rique n\u00e9cessite un pas de temps beaucoup plus petit que l&rsquo;\u00e9tape n\u00e9cessaire pour r\u00e9soudre le comportement d&rsquo;int\u00e9r\u00eat scientifique. Les composants rapides peuvent se d\u00e9composer presque imm\u00e9diatement, tandis que des composants plus lents contr\u00f4lent la solution \u00e0 long terme. Un int\u00e9grateur explicite doit rester stable pour les deux.<\/p>\n<p>Les solveurs rigides implicites peuvent d\u00e9passer les modes de d\u00e9croissance rapide car leurs r\u00e9gions de stabilit\u00e9 s&rsquo;\u00e9tendent beaucoup plus loin dans la moiti\u00e9 gauche du plan complexe. Le compromis est que chaque \u00e9tape accept\u00e9e peut n\u00e9cessiter une \u00e9valuation jacobienne, une factorisation matricielle, une alg\u00e8bre lin\u00e9aire it\u00e9rative ou une solution non lin\u00e9aire.<\/p>\n<p>La bonne question n&rsquo;est donc pas de savoir si les m\u00e9thodes implicites sont toujours meilleures. Il s&rsquo;agit de savoir si le co\u00fbt de calcul d&rsquo;une \u00e9tape implicite est inf\u00e9rieur au co\u00fbt des nombreuses petites \u00e9tapes explicites n\u00e9cessaires \u00e0 la stabilit\u00e9.<\/p>\n<p>Le guide plus large <a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" rel=\"nofollow\">M\u00e9thodes d&rsquo;int\u00e9gration temporelle pour les solveurs PDE<\/a> compare les approches explicites, implicites et IMEX. Cet article se concentre sp\u00e9cifiquement sur la rigidit\u00e9, les r\u00e9gions de stabilit\u00e9, les jacobiens et les familles de solveurs rigides.<\/p>\n<h2>Ce que signifie la rigidit\u00e9<\/h2>\n<p>Il n&rsquo;y a pas de d\u00e9finition unique de la rigidit\u00e9 qui s&rsquo;applique parfaitement \u00e0 chaque syst\u00e8me non lin\u00e9aire, m\u00e9thode num\u00e9rique, tol\u00e9rance et intervalle d&rsquo;int\u00e9gration.<\/p>\n<p>Une description pratique utile est :<\/p>\n<blockquote>\n<p>Un probl\u00e8me est rigoureux lorsqu&rsquo;une m\u00e9thode num\u00e9rique doit prendre des mesures beaucoup plus petites que l&rsquo;\u00e9chelle requise pour la pr\u00e9cision en raison des restrictions de stabilit\u00e9.<\/p>\n<\/blockquote>\n<p>Cette d\u00e9finition souligne que la rigidit\u00e9 d\u00e9pend en partie du solveur. Un probl\u00e8me raide pour une m\u00e9thode Runge-Kutta explicite peut \u00eatre g\u00e9rable pour une m\u00e9thode implicite L-stable.<\/p>\n<p>Cela d\u00e9pend \u00e9galement de la sortie demand\u00e9e. Un transitoire chimique rapide peut \u00eatre scientifiquement important dans une \u00e9tude et non pertinent dans une autre. S&rsquo;il doit \u00eatre r\u00e9solu, une petite \u00e9tape est une exigence de pr\u00e9cision plut\u00f4t qu&rsquo;une restriction inutile de rigidit\u00e9.<\/p>\n<h2>Un syst\u00e8me simple et rigide<\/h2>\n<p>Envisagez deux \u00e9l\u00e9ments en d\u00e9composition :<\/p>\n<pre><code>dy\u2081\/dt = -y\u2081\n\ndy\u2082\/dt = -1000y\u2082<\/code><\/pre>\n<p>Les solutions exactes sont :<\/p>\n<pre><code>y\u2081(t) = y\u2081(0)e\u207b\u1d57\n\ny\u2082(t) = y\u2082(0)e\u207b\u00b9\u2070\u2070\u2070\u1d57<\/code><\/pre>\n<p>Le deuxi\u00e8me composant dispara\u00eet beaucoup plus rapidement que le premier. Apr\u00e8s son transitoire initial, la solution scientifiquement pertinente peut \u00eatre contr\u00f4l\u00e9e presque enti\u00e8rement par <code>y\u2081<\/code>.<\/p>\n<p>Le forward Euler appliqu\u00e9 \u00e0 la deuxi\u00e8me \u00e9quation n&rsquo;est stable que lorsque :<\/p>\n<pre><code>|1 - 1000\u0394t| \u2264 1<\/code><\/pre>\n<p>Cela donne :<\/p>\n<pre><code>0 \u2264 \u0394t \u2264 0.002<\/code><\/pre>\n<p>Le solveur doit continuer \u00e0 utiliser une \u00e9tape proche de cette \u00e9chelle m\u00eame apr\u00e8s que <code>y\u2082<\/code> est devenu n\u00e9gligeable. La composante lente pourrait \u00eatre repr\u00e9sent\u00e9e avec pr\u00e9cision avec des \u00e9tapes beaucoup plus grandes, mais la stabilit\u00e9 explicite est contr\u00f4l\u00e9e par le mode rapide.<\/p>\n<h2>Pourquoi le rapport de rigidit\u00e9 est incomplet<\/h2>\n<p>Pour un syst\u00e8me lin\u00e9aire :<\/p>\n<pre><code>dy\/dt = Ay<\/code><\/pre>\n<p>Un rapport de rigidit\u00e9 couramment indiqu\u00e9 est :<\/p>\n<pre><code>\u03ba =\nmax |Re(\u03bb\u1d62)|\n\/\nmin |Re(\u03bb\u1d62)|<\/code><\/pre>\n<p>Le rapport peut \u00eatre informatif lorsque toutes les valeurs propres pertinentes ont des parties r\u00e9elles n\u00e9gatives et que la matrice se comporte r\u00e9guli\u00e8rement. Une valeur importante sugg\u00e8re des taux de d\u00e9croissance largement s\u00e9par\u00e9s.<\/p>\n<p>Cependant, ce n&rsquo;est pas un test universel. Il n&rsquo;inclut pas l&rsquo;intervalle d&rsquo;int\u00e9gration, la pr\u00e9cision demand\u00e9e, la condition initiale ou la direction dans laquelle la solution \u00e9volue. Il peut \u00e9galement devenir ind\u00e9fini ou trompeur lorsque le Jacobien contient z\u00e9ro valeurs propres, des modes de conservation ou un comportement fortement non normal.<\/p>\n<p>Dans un syst\u00e8me non lin\u00e9aire, le Jacobien change le long de la trajectoire :<\/p>\n<pre><code>J(t) =\n\u2202f\n\/\n\u2202y\nevaluated at y(t)<\/code><\/pre>\n<p>Un syst\u00e8me peut donc se d\u00e9placer entre des r\u00e9gions rigides et non raides au cours d&rsquo;une m\u00eame simulation.<\/p>\n<h2>Indicateurs bas\u00e9s sur Jacobien<\/h2>\n<p>Les estimations des valeurs propres du Jacobien local sont utiles car les modes stables rapides sont associ\u00e9s \u00e0 des valeurs propres qui ont de grandes parties r\u00e9elles n\u00e9gatives.<\/p>\n<p>Un indicateur moins cher utilise parfois la trace mise \u00e0 l&rsquo;\u00e9chelle :<\/p>\n<pre><code>\u03c4(J) =\ntrace(J) \/ d\n=\ndiv(f) \/ d<\/code><\/pre>\n<p>Sur un intervalle d&rsquo;int\u00e9gration avec une longueur caract\u00e9ristique <code>T<\/code>, une valeur fortement n\u00e9gative de&nbsp;:<\/p>\n<pre><code>T trace(J) \/ d<\/code><\/pre>\n<p>Peut indiquer une contraction rapide de la phase-volume et des \u00e9ventuelles restrictions de pas explicites.<\/p>\n<p>Il s&rsquo;agit d&rsquo;un indicateur heuristique, pas une d\u00e9finition n\u00e9cessaire et suffisante de la rigidit\u00e9. Une trace fait la moyenne des parties r\u00e9elles de la valeur propre et peut masquer une direction fortement raide lorsque d&rsquo;autres directions la compensent.<\/p>\n<p>Les syst\u00e8mes non normaux peuvent \u00e9galement pr\u00e9senter une croissance transitoire qui n&rsquo;est pas pr\u00e9dite de mani\u00e8re fiable par les valeurs propres ou les traces seules. Les normes logarithmiques, les diagnostics de solveur direct et les restrictions de taille de pas observ\u00e9es peuvent fournir des informations suppl\u00e9mentaires.<\/p>\n<p>L&rsquo;arri\u00e8re-plan math\u00e9matique est r\u00e9sum\u00e9 dans <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stiff_equation\" rel=\"nofollow\">Aper\u00e7u des \u00e9quations rigides<\/a>. Une analyse plus approfondie de la raison pour laquelle la rigidit\u00e9 r\u00e9siste \u00e0 une simple d\u00e9finition bas\u00e9e sur des valeurs propres est fournie dans <a href=\"https:\/\/people.maths.ox.ac.uk\/trefethen\/publication\/PDF\/1993_56.pdf\" rel=\"nofollow\" target=\"_blank\">rigidit\u00e9 des ODE<\/a>.<\/p>\n<h2>Signes pratiques de rigidit\u00e9<\/h2>\n<p>Un mod\u00e8le peut \u00eatre raide lorsque :<\/p>\n<ul>\n<li>Une m\u00e9thode explicite adaptative r\u00e9duit \u00e0 plusieurs reprises son pas malgr\u00e9 une solution fluide.<\/li>\n<li>Le solveur explicite prend de nombreuses \u00e9tapes apr\u00e8s qu&rsquo;un transitoire rapide s&rsquo;est d\u00e9j\u00e0 d\u00e9grad\u00e9.<\/li>\n<li>Un petit changement de taille de pas fait passer le calcul de stable \u00e0 explosif.<\/li>\n<li>Le Jacobien contient des modes fortement n\u00e9gatifs avec des \u00e9chelles tr\u00e8s diff\u00e9rentes.<\/li>\n<li>Un solveur implicite effectue le m\u00eame calcul avec beaucoup moins d&rsquo;\u00e9tapes accept\u00e9es.<\/li>\n<li>Les r\u00e9actions chimiques, la diffusion, la relaxation ou les termes de p\u00e9nalit\u00e9 introduisent des \u00e9chelles de temps tr\u00e8s courtes.<\/li>\n<\/ul>\n<p>Ces sympt\u00f4mes ne doivent pas \u00eatre utilis\u00e9s pour rejeter d&rsquo;\u00e9ventuelles erreurs de codage ou de mod\u00e9lisation. Des signes, des unit\u00e9s, des conditions aux limites ou des Jacobiens incorrects peuvent cr\u00e9er un comportement qui ressemble \u00e0 la rigidit\u00e9.<\/p>\n<h2>L&rsquo;\u00e9quation du test de Dahlquist<\/h2>\n<p>La stabilit\u00e9 est g\u00e9n\u00e9ralement \u00e9tudi\u00e9e avec :<\/p>\n<pre><code>dy\/dt = \u03bby<\/code><\/pre>\n<p>La solution exacte apr\u00e8s une \u00e9tape est :<\/p>\n<pre><code>y(t + \u0394t) =\ne^(\u03bb\u0394t)y(t)<\/code><\/pre>\n<p>Une m\u00e9thode num\u00e9rique produit :<\/p>\n<pre><code>y\u207f\u207a\u00b9 =\nR(z)y\u207f\n\nz = \u03bb\u0394t<\/code><\/pre>\n<p>La fonction <code>R(z)<\/code> est la fonction de stabilit\u00e9. La m\u00e9thode est absolument stable lorsque :<\/p>\n<pre><code>|R(z)| \u2264 1<\/code><\/pre>\n<p>L&rsquo;ensemble de toutes ces valeurs forme la r\u00e9gion de stabilit\u00e9 absolue.<\/p>\n<p>Une introduction claire \u00e0 l&rsquo;\u00e9quation de Dahlquist et \u00e0 la stabilit\u00e9 A est disponible dans les <a href=\"https:\/\/www.math.iit.edu\/~fass\/478578_Chapter_4.pdf\" rel=\"nofollow\" target=\"_blank\">Notes d&rsquo;analyse num\u00e9rique<\/a>.<\/p>\n<h2>Pourquoi les m\u00e9thodes explicites \u00e9chouent<\/h2>\n<p>L&rsquo;attaquant Euler a :<\/p>\n<pre><code>R(z) = 1 + z<\/code><\/pre>\n<p>Sa r\u00e9gion de stabilit\u00e9 est un disque centr\u00e9 sur <code>\u22121<\/code> avec un rayon. Le long de l&rsquo;axe r\u00e9el n\u00e9gatif :<\/p>\n<pre><code>\u22122 \u2264 z \u2264 0<\/code><\/pre>\n<p>Le RK4 classique a une r\u00e9gion plus grande, s&rsquo;\u00e9tendant \u00e0 environ :<\/p>\n<pre><code>z \u2248 \u22122.785<\/code><\/pre>\n<p>Il est toujours d\u00e9limit\u00e9. Aucune m\u00e9thode Runge-Kutta explicite ne peut \u00eatre stable.<\/p>\n<p>Lorsqu&rsquo;une valeur propre jacobienne est d&rsquo;environ <code>\u22121000<\/code>, RK4 n\u00e9cessite une \u00e9tape inf\u00e9rieure \u00e0 environ&nbsp;:<\/p>\n<pre><code>\u0394t \u2272 2.785 \/ 1000<\/code><\/pre>\n<p>Une m\u00e9thode explicite d&rsquo;ordre sup\u00e9rieur am\u00e9liore la pr\u00e9cision et peut agrandir l&rsquo;intervalle stable, mais elle ne peut pas \u00e9tendre la stabilit\u00e9 arbitrairement loin le long de l&rsquo;axe r\u00e9el n\u00e9gatif.<\/p>\n<h2>A-stabilit\u00e9<\/h2>\n<p>Une m\u00e9thode A-stable contient le demi-plan entier gauche dans sa r\u00e9gion de stabilit\u00e9 :<\/p>\n<pre><code>Re(z) \u2264 0\n\u21d2\n|R(z)| \u2264 1<\/code><\/pre>\n<p>Euler \u00e0 l&rsquo;envers est A-stable parce que&nbsp;:<\/p>\n<pre><code>R(z) =\n1 \/ (1 - z)<\/code><\/pre>\n<p>Pour les modes avec des parties r\u00e9elles n\u00e9gatives, la m\u00e9thode reste stable quelle que soit la taille du pas.<\/p>\n<p>Cela ne signifie pas qu&rsquo;un pas arbitrairement grand est exact. La stabilit\u00e9 A supprime une restriction de stabilit\u00e9 mais ne supprime pas l&rsquo;erreur de troncature.<\/p>\n<h2>L-stabilit\u00e9<\/h2>\n<p>Une m\u00e9thode L-stable est A-stable et satisfait \u00e9galement :<\/p>\n<pre><code>R(z) \u2192 0\nas\nz \u2192 -\u221e<\/code><\/pre>\n<p>Cette propri\u00e9t\u00e9 amortit fortement les modes rapides non r\u00e9solus. Euler \u00e0 l&rsquo;envers est L-stable.<\/p>\n<p>Crank\u2013Nicolson est A-stable mais pas stable. Sa fonction de stabilit\u00e9 est :<\/p>\n<pre><code>R(z) =\n(1 + z\/2)\n\/\n(1 - z\/2)<\/code><\/pre>\n<p>Comme <code>z \u2192 -\u221e<\/code>, le facteur approche <code>\u22121<\/code>. Un composant tr\u00e8s rigide peut alterner signe au lieu de se d\u00e9composer rapidement. Cela peut cr\u00e9er des oscillations non physiques m\u00eame si la m\u00e9thode reste limit\u00e9e.<\/p>\n<p>La L-stabilit\u00e9 est particuli\u00e8rement pr\u00e9cieuse lorsque les transitoires rapides doivent dispara\u00eetre plut\u00f4t que de rester visibles dans la solution calcul\u00e9e.<\/p>\n<h2>Le probl\u00e8me Prothero-Robinson<\/h2>\n<p>Le probl\u00e8me du test Prothero\u2013Robinson a la forme g\u00e9n\u00e9rale :<\/p>\n<pre><code>dy\/dt =\n\u03bb[y - g(t)]\n+ g'(t)<\/code><\/pre>\n<p>Sa solution exacte est :<\/p>\n<pre><code>y(t) =\ng(t)\n+\n[y(0) - g(0)]e^(\u03bbt)<\/code><\/pre>\n<p>Choisir&nbsp;:<\/p>\n<pre><code>g(t) = sin(t)<\/code><\/pre>\n<p>donne&nbsp;:<\/p>\n<pre><code>dy\/dt =\n\u03bb[y - sin(t)]\n+ cos(t)<\/code><\/pre>\n<p>et&nbsp;:<\/p>\n<pre><code>y(t) =\nsin(t)\n+\ny(0)e^(\u03bbt)<\/code><\/pre>\n<p>Lorsque <code>g(0)=0<\/code>.<\/p>\n<p>Pour un grand n\u00e9gatif <code>\u03bb<\/code>, le transitoire exponentiel se d\u00e9sint\u00e8gre rapidement, tandis que le for\u00e7age lisse <code>sin(t)<\/code> reste. Une m\u00e9thode explicite peut encore \u00eatre forc\u00e9e de r\u00e9soudre le mode de d\u00e9croissance rapide pour la stabilit\u00e9.<\/p>\n<p>Le probl\u00e8me est \u00e9galement utilis\u00e9 pour \u00e9tudier la r\u00e9duction de la commande rigide. Certaines m\u00e9thodes ne parviennent pas \u00e0 atteindre leur ordre de convergence nominale lorsque la rigidit\u00e9, le for\u00e7age et les effets de limites ou de contraintes interagissent.<\/p>\n<h2>Comparaison Python avec Scipy<\/h2>\n<p>L&rsquo;exemple suivant compare une m\u00e9thode explicite avec deux solveurs rigides&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\nfrom scipy.integrate import solve_ivp\n\nstiffness = -1000.0\ntime_interval = (0.0, 10.0)\ninitial_state = [1.0]\n\ndef right_hand_side(time, state):\n    value = state[0]\n\n    return [\n        stiffness\n        * (value - np.sin(time))\n        + np.cos(time)\n    ]\n\ndef jacobian(time, state):\n    return np.array([\n        [stiffness]\n    ])\n\ndef exact_solution(time):\n    return (\n        np.sin(time)\n        + np.exp(stiffness * time)\n    )\n\nmethods = [\n    (\"RK45\", {}),\n    (\"Radau\", {\"jac\": jacobian}),\n    (\"BDF\", {\"jac\": jacobian}),\n    (\"LSODA\", {})\n]\n\nfor method, options in methods:\n    solution = solve_ivp(\n        fun=right_hand_side,\n        t_span=time_interval,\n        y0=initial_state,\n        method=method,\n        rtol=1e-7,\n        atol=1e-9,\n        **options\n    )\n\n    reference = exact_solution(\n        solution.t\n    )\n\n    maximum_error = np.max(\n        np.abs(\n            solution.y[0]\n            - reference\n        )\n    )\n\n    print(method)\n    print(\"  Success:\", solution.success)\n    print(\"  Accepted points:\", solution.t.size)\n    print(\"  Function evaluations:\", solution.nfev)\n    print(\"  Jacobian evaluations:\", solution.njev)\n    print(\"  LU factorizations:\", solution.nlu)\n    print(\"  Maximum error:\", maximum_error)<\/code><\/pre>\n<p>Les d\u00e9comptes exacts d\u00e9pendent des tol\u00e9rances, de la version du logiciel, de l&rsquo;\u00e9tat initial, des informations de Jacobien et des param\u00e8tres du solveur. La comparaison importante est le co\u00fbt total de calcul au m\u00eame niveau d&rsquo;erreur.<\/p>\n<h2>Familles de solveurs rigides<\/h2>\n<p>Aucun solveur unique n&rsquo;est id\u00e9al pour chaque syst\u00e8me rigide. Les consid\u00e9rations importantes comprennent :<\/p>\n<ul>\n<li>Dimension du syst\u00e8me<\/li>\n<li>La parcimonie et la bande passante de Jacobien<\/li>\n<li>Co\u00fbt d&rsquo;\u00e9valuation du c\u00f4t\u00e9 droit<\/li>\n<li>Disponibilit\u00e9 des d\u00e9riv\u00e9s analytiques<\/li>\n<li>tol\u00e9rance demand\u00e9e<\/li>\n<li>pr\u00e9sence de contraintes ou d&rsquo;une matrice de masse<\/li>\n<li>Si le probl\u00e8me change entre les phases rigides et non raides<\/li>\n<\/ul>\n<h2>Formules de diff\u00e9renciation en arri\u00e8re<\/h2>\n<p>Les m\u00e9thodes BDF sont des formules implicites en plusieurs \u00e9tapes. Ils se rapprochent de la d\u00e9riv\u00e9e \u00e0 l&rsquo;aide de plusieurs valeurs de solution pr\u00e9c\u00e9dentes et \u00e9valuent l&rsquo;\u00e9quation gouvernante au nouveau moment.<\/p>\n<p>Une formule BDF du premier ordre est Euler \u00e0 l&rsquo;envers :<\/p>\n<pre><code>(\n    y\u207f\u207a\u00b9 - y\u207f\n) \/ \u0394t\n=\nf(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>BDF2 utilise deux valeurs pr\u00e9c\u00e9dentes&nbsp;:<\/p>\n<pre><code>(\n    3y\u207f\u207a\u00b9\n    - 4y\u207f\n    + y\u207f\u207b\u00b9\n) \/ (2\u0394t)\n=\nf(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>Les impl\u00e9mentations d&rsquo;ordre variable peuvent utiliser plusieurs commandes BDF et adapter \u00e0 la fois la taille de la commande et la taille des pas. Les commandes un et deux sont stables. Les formules BDF d&rsquo;ordre sup\u00e9rieur sacrifient la pleine stabilit\u00e9 A mais restent utiles pour de nombreux syst\u00e8mes rigides.<\/p>\n<p>Les m\u00e9thodes BDF sont souvent efficaces pour les grands syst\u00e8mes lorsque le Jacobien est clairsem\u00e9 et qu&rsquo;un solveur lin\u00e9aire ou un pr\u00e9conditionneur parsem\u00e9 degr\u00e9s est disponible.<\/p>\n<p>Les exemples incluent les <code>BDF<\/code> de Scipy, les m\u00e9thodes <code>ode15s<\/code> de Matlab, les cadrans solaires CVODE BDF et les m\u00e9thodes SCIML telles que <code>QNDF<\/code> et <code>FBDF<\/code>.<\/p>\n<h2>M\u00e9thodes de Rosenbrock<\/h2>\n<p>Les m\u00e9thodes de Rosenbrock sont des m\u00e9thodes Runge-Kutta lin\u00e9airement implicites. Ils lin\u00e9arisent les \u00e9quations d&rsquo;\u00e9tape et r\u00e9solvent les syst\u00e8mes de la forme :<\/p>\n<pre><code>(\n    I - \u03b3\u0394tJ\n)k\u1d62\n=\nknown stage terms<\/code><\/pre>\n<p>Cela \u00e9vite une solution non lin\u00e9aire compl\u00e8te \u00e0 chaque \u00e9tape. La m\u00e9thode n\u00e9cessite toujours des informations jacobiennes ou une approximation utile.<\/p>\n<p>Les m\u00e9thodes de Rosenbrock sont souvent efficaces pour les petits et moyens raides, en particulier \u00e0 des tol\u00e9rances strictes. La m\u00eame structure matricielle peut \u00eatre r\u00e9utilis\u00e9e en plusieurs \u00e9tapes.<\/p>\n<p>Les exemples de l&rsquo;\u00e9cosyst\u00e8me du SCIML incluent :<\/p>\n<ul>\n<li><code>Rosenbrock23<\/code><\/li>\n<li><code>Rodas4<\/code><\/li>\n<li><code>Rodas5P<\/code><\/li>\n<\/ul>\n<p>La <a href=\"https:\/\/docs.sciml.ai\/OrdinaryDiffEq\/stable\/semiimplicit\/Rosenbrock\/\" rel=\"nofollow\" target=\"_blank\">Sciml Rosenbrock Documentation<\/a> fournit des recommandations sp\u00e9cifiques \u00e0 la m\u00e9thode et des d\u00e9tails de mise en \u0153uvre.<\/p>\n<h2>M\u00e9thodes Sdirk<\/h2>\n<p>Sdirk signifie <strong>Runge-Kutta<\/strong> implicite individuellement en diagonale. Chaque \u00e9tape implicite utilise le m\u00eame coefficient diagonal dans la matrice Runge-Kutta.<\/p>\n<p>Cela produit des syst\u00e8mes sc\u00e9niques avec une structure r\u00e9p\u00e9t\u00e9e :<\/p>\n<pre><code>(\n    I - \u03b3\u0394tJ\n)k\u1d62\n=\nstage residual<\/code><\/pre>\n<p>Une factorisation matricielle ou un pr\u00e9conditionneur peut donc \u00eatre r\u00e9utilis\u00e9 \u00e0 travers les \u00e9tapes lorsque le Jacobien est maintenu fixe.<\/p>\n<p>Les m\u00e9thodes Sdirk sont des m\u00e9thodes en une seule \u00e9tape, ce qui les rend plus faciles \u00e0 red\u00e9marrer apr\u00e8s des \u00e9v\u00e9nements ou des discontinuit\u00e9s que les formules BDF en plusieurs \u00e9tapes.<\/p>\n<p>Les exemples incluent les m\u00e9thodes esdirk et kencarp. Certains fournissent des estimations de stabilit\u00e9 en L et d&rsquo;erreurs int\u00e9gr\u00e9es.<\/p>\n<h2>Tr-BDF2<\/h2>\n<p>TR-BDF2 est une m\u00e9thode composite en une seule \u00e9tape. Il combine une \u00e9tape de r\u00e8gle trap\u00e9zo\u00efdale avec une \u00e9tape de diff\u00e9renciation vers l&rsquo;arri\u00e8re du second ordre.<\/p>\n<p>Il ne doit pas \u00eatre regroup\u00e9 avec des solveurs BDF \u00e0 plusieurs \u00e9tapes ordinaires. Sa construction sp\u00e9ciale donne une pr\u00e9cision de second ordre et de fortes propri\u00e9t\u00e9s de stabilit\u00e9, notamment la stabilit\u00e9 en L pour le choix des param\u00e8tres standard.<\/p>\n<p>TR-BDF2 est souvent une m\u00e9thode raide \u00e0 usage g\u00e9n\u00e9ral pratique lorsqu&rsquo;un amortissement mod\u00e9r\u00e9 et robuste est plus important que l&rsquo;ordre asymptotique tr\u00e8s \u00e9lev\u00e9.<\/p>\n<h2>M\u00e9thodes Runge-Kutta enti\u00e8rement implicites<\/h2>\n<p>Firk signifie <strong>Runge\u2013Kutta enti\u00e8rement implicite<\/strong>. Les \u00e9tapes sont coupl\u00e9es et n\u00e9cessitent normalement la r\u00e9solution d&rsquo;un syst\u00e8me non lin\u00e9aire plus grand.<\/p>\n<p>Les familles importantes comprennent :<\/p>\n<ul>\n<li>M\u00e9thodes Radau IIA<\/li>\n<li>M\u00e9thodes de Gauss-Legendre<\/li>\n<li>M\u00e9thodes lobatto<\/li>\n<\/ul>\n<p>Les m\u00e9thodes RADAU IIA peuvent fournir un ordre \u00e9lev\u00e9, une stabilit\u00e9 A et une stabilit\u00e9 en L. Ils sont attractifs pour les probl\u00e8mes de grande pr\u00e9cision mais peuvent avoir un co\u00fbt par \u00e9tape plus \u00e9lev\u00e9 que les m\u00e9thodes Rosenbrock, Sdirk ou BDF.<\/p>\n<p>Le solveur <code>Radau<\/code> de Scipy est bas\u00e9 sur une m\u00e9thode Radau IIa du cinqui\u00e8me ordre.<\/p>\n<h2>M\u00e9thodes explicites stabilis\u00e9es<\/h2>\n<p>Les m\u00e9thodes explicites stabilis\u00e9es utilisent des polyn\u00f4mes de stabilit\u00e9 sp\u00e9cialement construits pour \u00e9tendre l&rsquo;intervalle stable le long de l&rsquo;axe r\u00e9el n\u00e9gatif.<\/p>\n<p>Les exemples incluent :<\/p>\n<ul>\n<li>M\u00e9thodes RKC<\/li>\n<li>rock2<\/li>\n<li>rock4<\/li>\n<\/ul>\n<p>Pour une m\u00e9thode avec des \u00e9tapes <code>s<\/code>, l&rsquo;intervalle stable peut cro\u00eetre approximativement comme <code>s\u00b2<\/code>. Cela rend l&rsquo;approche utile pour les grands syst\u00e8mes domin\u00e9s par la diffusion o\u00f9 le spectre jacobien se situe principalement \u00e0 proximit\u00e9 de l&rsquo;axe r\u00e9el n\u00e9gatif.<\/p>\n<p>Ces m\u00e9thodes ne sont pas stables et ne r\u00e9solvent pas tous les types de rigidit\u00e9. Ils peuvent ne pas convenir lorsque le syst\u00e8me a des valeurs imaginaires substantielles, une rigidit\u00e9 de r\u00e9action hautement non lin\u00e9aire, des contraintes alg\u00e9briques diff\u00e9rentielles ou un couplage difficile.<\/p>\n<p>Le <a href=\"https:\/\/www.epfl.ch\/labs\/mathicse\/wp-content\/uploads\/2018\/10\/27.2011_AA.pdf\" rel=\"nofollow\" target=\"_blank\">mat\u00e9riau EPFL sur les m\u00e9thodes explicites stabilis\u00e9es<\/a> illustre comment les m\u00e9thodes bas\u00e9es sur Chebyshev \u00e9tendent le domaine de stabilit\u00e9.<\/p>\n<h2>M\u00e9thodes IMEX<\/h2>\n<p>Lorsque la rigidit\u00e9 peut \u00eatre s\u00e9par\u00e9e d&rsquo;une dynamique non raide, une m\u00e9thode implicite et explicite peut \u00eatre plus efficace que de traiter implicitement le syst\u00e8me complet&nbsp;:<\/p>\n<pre><code>dy\/dt =\nf_nonstiff(y)\n+\nf_stiff(y)<\/code><\/pre>\n<p>Le terme non raide est int\u00e9gr\u00e9 explicitement, tandis que le terme rigide est int\u00e9gr\u00e9 implicitement.<\/p>\n<p>Les exemples incluent l&rsquo;advection trait\u00e9e explicitement et la diffusion trait\u00e9e implicitement, ou le transport trait\u00e9 explicitement et les r\u00e9actions chimiques trait\u00e9es implicitement.<\/p>\n<p>Les m\u00e9thodes IMEX n\u00e9cessitent une division d&rsquo;op\u00e9rateur physiquement et num\u00e9riquement significative. Leur stabilit\u00e9 d\u00e9pend de la paire compl\u00e8te explicite-implicite.<\/p>\n<h2>Commutation automatique de la rigidit\u00e9<\/h2>\n<p>Certains algorithmes estiment la rigidit\u00e9 lors de l&rsquo;int\u00e9gration et passent entre des formules non raides et rigides.<\/p>\n<p>LSODA bascule entre une m\u00e9thode ADAMS et une m\u00e9thode BDF. Il est disponible via Odepack, Scipy et plusieurs interfaces linguistiques.<\/p>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me SCIML, une m\u00e9thode automatique peut combiner un algorithme explicite avec un solveur rigide, par exemple :<\/p>\n<pre><code class=\"language-julia\">AutoTsit5(\n    Rosenbrock23()\n)<\/code><\/pre>\n<p>La commutation automatique est utile lorsque la rigidit\u00e9 est inconnue ou n&rsquo;appara\u00eet que pendant une partie de la trajectoire. La d\u00e9tection n&rsquo;est pas parfaite, de sorte que des probl\u00e8mes difficiles peuvent toujours b\u00e9n\u00e9ficier de la s\u00e9lection directe d&rsquo;un solveur rigide.<\/p>\n<p>Le <a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/solvers\/ode_solve\" rel=\"nofollow\" target=\"_blank\">Guide de solveur d&rsquo;odes Sciml<\/a> recommande les m\u00e9thodes de commutation automatique lorsque la rigidit\u00e9 est incertaine.<\/p>\n<h2>Les questions jacobiennes<\/h2>\n<p>Pour une \u00e9tape implicite, le r\u00e9sidu non lin\u00e9aire peut \u00eatre :<\/p>\n<pre><code>G(y\u207f\u207a\u00b9) =\ny\u207f\u207a\u00b9\n- y\u207f\n- \u0394t f(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>La m\u00e9thode de Newton n\u00e9cessite :<\/p>\n<pre><code>[\n    I\n    - \u0394tJ\n]\u03b4\n=\n-G<\/code><\/pre>\n<p>o\u00f9&nbsp;:<\/p>\n<pre><code>J =\n\u2202f \/ \u2202y<\/code><\/pre>\n<p>La solution lin\u00e9aire peut dominer le temps d&rsquo;ex\u00e9cution. Un solveur rigide fonctionnera mal s&rsquo;il traite un grand Jacobien clairsem\u00e9 comme une matrice dense.<\/p>\n<p>Les performances peuvent s&rsquo;am\u00e9liorer gr\u00e2ce \u00e0 :<\/p>\n<ul>\n<li>Un Jacobien analytique<\/li>\n<li>Diff\u00e9renciation automatique<\/li>\n<li>Un mod\u00e8le de parcimonie d\u00e9clar\u00e9<\/li>\n<li>Stockage de la matrice \u00e0 bandes<\/li>\n<li>Factorisation directe clairsem\u00e9e<\/li>\n<li>M\u00e9thodes Krylov<\/li>\n<li>Pr\u00e9conditionnement bas\u00e9 sur la physique<\/li>\n<li>Produits vectoriels Jacobian sans matrice<\/li>\n<\/ul>\n<p>Le didacticiel SCIML sur <a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/tutorials\/advanced_ode_example\/\" rel=\"nofollow\" target=\"_blank\">r\u00e9solution de grandes \u00e9quations rigides<\/a> montre comment la structure jacobienne et la s\u00e9lection des solveurs lin\u00e9aires affectent les performances.<\/p>\n<h2>Guide de s\u00e9lection des solveurs<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Probl\u00e8me caract\u00e9ristique<\/th>\n<th>Point de d\u00e9part possible<\/th>\n<th>consid\u00e9ration principale<\/th>\n<\/tr>\n<tr>\n<td>Ode lisse non rigide<\/td>\n<td>RK explicite adaptatif<\/td>\n<td>Faible co\u00fbt par \u00e9tape<\/td>\n<\/tr>\n<tr>\n<td>Syst\u00e8me petit ou moyen rigide<\/td>\n<td>M\u00e9thode de Rosenbrock ou Radau<\/td>\n<td>Pr\u00e9cision, co\u00fbt jacobien et tol\u00e9rance<\/td>\n<\/tr>\n<tr>\n<td>Grand syst\u00e8me rigide clairsem\u00e9<\/td>\n<td>BDF, Rosenbrock ou Sdirk avec alg\u00e8bre lin\u00e9aire clairsem\u00e9e<\/td>\n<td>La structure jacobienne compte plus qu&rsquo;un seuil de taille fixe<\/td>\n<\/tr>\n<tr>\n<td>Int\u00e9gration rigide de haute pr\u00e9cision<\/td>\n<td>Radau IIA ou Rosenbrock d&rsquo;ordre \u00e9lev\u00e9<\/td>\n<td>Plus grande \u00e9tape et r\u00e9solution des co\u00fbts<\/td>\n<\/tr>\n<tr>\n<td>Raideur l\u00e9g\u00e8re domin\u00e9e par la diffusion<\/td>\n<td>RKC ou rock<\/td>\n<td>Le spectre doit se situer principalement pr\u00e8s de l&rsquo;axe r\u00e9el n\u00e9gatif<\/td>\n<\/tr>\n<tr>\n<td>Physique rigide et non rigide s\u00e9parable<\/td>\n<td>M\u00e9thode IMEX<\/td>\n<td>N\u00e9cessite une division d&rsquo;op\u00e9rateur appropri\u00e9e<\/td>\n<\/tr>\n<tr>\n<td>Raideur inconnue ou changeante<\/td>\n<td>Commutation automatique LOSODA ou explicite-implicite<\/td>\n<td>La d\u00e9tection ajoute de la complexit\u00e9 mais peu de r\u00e9glage manuel<\/td>\n<\/tr>\n<tr>\n<td>Probl\u00e8me DAE ou matricielle de masse<\/td>\n<td>M\u00e9thode DAE-capable BDF, Radau ou Rosenbrock<\/td>\n<td>Les solveurs ODE peuvent ne pas appliquer correctement les contraintes alg\u00e9briques<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Pourquoi les seuils de dimension fixe sont trompeurs<\/h2>\n<p>Il est tentant de recommander les m\u00e9thodes de Rosenbrock en dessous de 1 000 \u00e9quations, les m\u00e9thodes Sdirk jusqu&rsquo;\u00e0 10 000 et les m\u00e9thodes BDF au-dessus de cela. Ces seuils ne sont pas fiables.<\/p>\n<p>Un probl\u00e8me dense de 500 \u00e9quations peut \u00eatre plus co\u00fbteux qu&rsquo;un syst\u00e8me clairsem\u00e9 contenant des centaines de milliers d&rsquo;\u00e9quations. Les facteurs d\u00e9cisifs comprennent :<\/p>\n<ul>\n<li>Nombre d&rsquo;entr\u00e9es non nulles de Jacobien<\/li>\n<li>Remplissage lors de la factorisation<\/li>\n<li>Qualit\u00e9 de pr\u00e9conditionnement<\/li>\n<li>Co\u00fbt de droite<\/li>\n<li>Tol\u00e9rance requise<\/li>\n<li>Fr\u00e9quence des mises \u00e0 jour jacobiennes<\/li>\n<li>Disponibilit\u00e9 de produits sans matrice<\/li>\n<li>\u00c9volutivit\u00e9 parall\u00e8le<\/li>\n<\/ul>\n<p>Le choix du solveur doit \u00eatre test\u00e9 gr\u00e2ce \u00e0 des comparaisons de pr\u00e9cision du travail sur le probl\u00e8me r\u00e9el.<\/p>\n<h2>L&rsquo;exemple de propagation de la flamme<\/h2>\n<p>L&rsquo;exemple de propagation de la flamme de Cleve Moler utilise l&rsquo;\u00e9quation scalaire non lin\u00e9aire :<\/p>\n<pre><code>dy\/dt =\ny\u00b2(1 - y)<\/code><\/pre>\n<p>La valeur initiale est tr\u00e8s faible. La solution reste proche de z\u00e9ro pendant une longue p\u00e9riode d&rsquo;induction, passe rapidement, puis s&rsquo;approche d&rsquo;une seule.<\/p>\n<p>Dans la comparaison MATLAB publi\u00e9e, le solveur non rigide <code>ode45<\/code> a suivi 3&nbsp;040&nbsp;\u00e9tapes et 20&nbsp;179&nbsp;\u00e9valuations de fonctions. Le solveur rigide bas\u00e9 \u00e0 Rosenbrock <code>ode23s<\/code> a suivi 99&nbsp;\u00e9tapes et 412&nbsp;\u00e9valuations de fonctions.<\/p>\n<p>Il s&rsquo;agit d&rsquo;environ trente fois moins d&rsquo;\u00e9tapes accept\u00e9es, et non d&rsquo;un pour cent du nombre de pas d&rsquo;origine.<\/p>\n<p>L&rsquo;exemple et sa repr\u00e9sentation analytique Lambert w sont d\u00e9crits dans <a href=\"https:\/\/de.mathworks.com\/company\/technical-articles\/stiff-differential-equations.html\" rel=\"nofollow\" target=\"_blank\">\u00e9quations diff\u00e9rentielles raides<\/a> par Cleve Moler.<\/p>\n<p>Le r\u00e9sultat ne doit pas \u00eatre interpr\u00e9t\u00e9 comme un avantage universel pour les m\u00e9thodes implicites. Il montre \u00e0 quel point l&rsquo;efficacit\u00e9 du solveur peut changer lorsque la stabilit\u00e9 plut\u00f4t que la pr\u00e9cision contr\u00f4le un int\u00e9grateur explicite.<\/p>\n<h2>Comparaison \u00e9quitable des solveurs<\/h2>\n<p>Une r\u00e9f\u00e9rence juste doit comparer les m\u00e9thodes avec une pr\u00e9cision \u00e9quivalente. Enregistrer&nbsp;:<\/p>\n<ul>\n<li>Erreur ou erreur globale dans une quantit\u00e9 d&rsquo;int\u00e9r\u00eat<\/li>\n<li>\u00c9tapes accept\u00e9es et rejet\u00e9es<\/li>\n<li>\u00c9valuations de droite<\/li>\n<li>\u00c9valuations jacobiennes<\/li>\n<li>R\u00e9solutions lin\u00e9aires et factorisations<\/li>\n<li>It\u00e9rations non lin\u00e9aires<\/li>\n<li>consommation de m\u00e9moire<\/li>\n<li>Heure totale de l&rsquo;horloge murale<\/li>\n<\/ul>\n<p>Un solveur prenant moins d&rsquo;\u00e9tapes peut encore \u00eatre plus lent si chaque \u00e9tape n\u00e9cessite une factorisation co\u00fbteuse. Une m\u00e9thode avec plus d&rsquo;\u00e9valuations de fonctions peut gagner lorsque la fonction est bon march\u00e9 et que l&rsquo;alg\u00e8bre lin\u00e9aire concurrente est co\u00fbteuse.<\/p>\n<h2>erreurs courantes<\/h2>\n<ul>\n<li>En supposant que chaque solution explicite divergente prouve la rigidit\u00e9<\/li>\n<li>Traiter le taux de rigidit\u00e9 comme un diagnostic d\u00e9finitif<\/li>\n<li>Utiliser la trace jacobienne comme d\u00e9finition universelle de rigidit\u00e9<\/li>\n<li>En supposant que chaque m\u00e9thode implicite est A-stable<\/li>\n<li>En supposant que chaque m\u00e9thode A-stable est L-stable<\/li>\n<li>Appeler TR-BDF2 une m\u00e9thode BDF en plusieurs \u00e9tapes ordinaire<\/li>\n<li>D\u00e9velopper Firk de mani\u00e8re incorrecte en tant que famille Runge-Kutta explicite<\/li>\n<li>Utilisation d&rsquo;un Jacobien dense pour un grand syst\u00e8me clairsem\u00e9<\/li>\n<li>Ne pas fournir un mod\u00e8le de jacobien ou de parcimonie lorsque le solveur peut en utiliser un<\/li>\n<li>S\u00e9lection d&rsquo;un solveur uniquement \u00e0 partir du nombre d&rsquo;\u00e9quations<\/li>\n<li>Utilisation d&rsquo;une m\u00e9thode explicite stabilis\u00e9e pour la rigidit\u00e9 en dehors de sa conception spectrale<\/li>\n<li>Comparaison des nombres d&rsquo;\u00e9tapes sans comparaison d&rsquo;erreur et d&rsquo;ex\u00e9cution<\/li>\n<li>Prendre des mesures implicites tr\u00e8s importantes sans v\u00e9rifier la pr\u00e9cision temporelle<\/li>\n<\/ul>\n<h2>Un flux de travail pratique<\/h2>\n<ol>\n<li>V\u00e9rifiez les \u00e9quations, les unit\u00e9s, les signes et les conditions initiales.<\/li>\n<li>Ex\u00e9cutez une m\u00e9thode explicite adaptative en tant que diagnostic.<\/li>\n<li>Inspectez les \u00e9tapes accept\u00e9es, les \u00e9tapes rejet\u00e9es et la taille minimale des \u00e9tapes.<\/li>\n<li>Estimez ou analysez le spectre jacobien lorsque cela est pratique.<\/li>\n<li>V\u00e9rifiez si les composants rapides doivent \u00eatre r\u00e9solus physiquement.<\/li>\n<li>Essayez un solveur rigide en L aux m\u00eames tol\u00e9rances.<\/li>\n<li>Fournir des informations jacobiennes et de la parcimonie.<\/li>\n<li>Comparez le travail et la pr\u00e9cision, non seulement les \u00e9tapes accept\u00e9es.<\/li>\n<li>R\u00e9p\u00e9tez avec des tol\u00e9rances plus serr\u00e9es.<\/li>\n<li>Solveur de documents, tol\u00e9rances, alg\u00e8bre lin\u00e9aire et crit\u00e8res de d\u00e9faillance.<\/li>\n<\/ol>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" rel=\"nofollow\">M\u00e9thodes d&rsquo;int\u00e9gration temporelle pour les solveurs PDE<\/a> \u2014 Comparez les approches explicites, implicites et hybrides.<\/li>\n<li><a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\">S\u00e9paration de l&rsquo;op\u00e9rateur, fractionnement de Strang et sch\u00e9mas IMEX<\/a> &#8211; S\u00e9parez les processus physiques rigides et non raides.<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\">\u00e9tudes sur la qualit\u00e9 et la convergence du maillage<\/a> &#8211; D\u00e9terminer si le raffinement spatial augmente la rigidit\u00e9 et modifie la solution.<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">V\u00e9rification vs. Validation dans les simulations scientifiques<\/a> \u2014 Convergence du solveur de places \u00e0 l&rsquo;int\u00e9rieur Flux de travail de cr\u00e9dibilit\u00e9.<\/li>\n<li><a href=\"https:\/\/matforge.org\/category\/simulation-modeling-projects\/\" rel=\"nofollow\">simulation &amp; Projets de mod\u00e9lisation<\/a> \u2014 Parcourez les ressources MatForge associ\u00e9es.<\/li>\n<\/ul>\n<h2>Lectures compl\u00e9mentaires<\/h2>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Stiff_equation\" rel=\"nofollow\" target=\"_blank\">\u00c9quation rigide : d\u00e9finitions, indicateurs et contexte historique<\/a><\/li>\n<li><a href=\"https:\/\/people.maths.ox.ac.uk\/trefethen\/publication\/PDF\/1993_56.pdf\" rel=\"nofollow\" target=\"_blank\">Higham et Trefethen : rigidit\u00e9 des Odes<\/a><\/li>\n<li><a href=\"https:\/\/www.math.iit.edu\/~fass\/478578_Chapter_4.pdf\" rel=\"nofollow\" target=\"_blank\">L&rsquo;IIT note une stabilit\u00e9 absolue et une stabilit\u00e9 A<\/a><\/li>\n<li><a href=\"https:\/\/www.epfl.ch\/labs\/mathicse\/wp-content\/uploads\/2018\/10\/27.2011_AA.pdf\" rel=\"nofollow\" target=\"_blank\">Mat\u00e9riau EPFL sur les m\u00e9thodes explicites stabilis\u00e9es<\/a><\/li>\n<li><a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/solvers\/ode_solve\" rel=\"nofollow\" target=\"_blank\">Recommandations de solveur Sciml Ode<\/a><\/li>\n<li><a href=\"https:\/\/de.mathworks.com\/company\/technical-articles\/stiff-differential-equations.html\" rel=\"nofollow\" target=\"_blank\">MathWorks : \u00e9quations diff\u00e9rentielles rigides<\/a><\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>La rigidit\u00e9 se produit lorsque la stabilit\u00e9 num\u00e9rique force une m\u00e9thode pour r\u00e9soudre les composants rapides de plus pr\u00e8s que la sortie souhait\u00e9e n&rsquo;est requise. Les m\u00e9thodes explicites de Runge-Kutta ont des r\u00e9gions de stabilit\u00e9 limit\u00e9es, de sorte que les grands modes jacobiens n\u00e9gatifs peuvent imposer des \u00e9tapes extr\u00eamement petites.<\/p>\n<p>Les m\u00e9thodes implicites A-stables suppriment cette restriction de stabilit\u00e9 du demi-plan gauche. Les m\u00e9thodes L-stables vont plus loin en amortissant fortement les modes rapides non r\u00e9solus. Ces propri\u00e9t\u00e9s expliquent pourquoi les m\u00e9thodes Backward Euler, BDF, Rosenbrock, Sdirk, TR-BDF2 et Radau peuvent surpasser les solveurs explicites sur les syst\u00e8mes rigides.<\/p>\n<p>Aucun diagnostic ou solveur ne fonctionne pour chaque probl\u00e8me. Les valeurs propres, les rapports de rigidit\u00e9, la divergence \u00e0 l&rsquo;\u00e9chelle et les restrictions d&rsquo;\u00e9tape observ\u00e9es fournissent toutes des informations partielles. La structure du jacobien et du solveur lin\u00e9aire peut avoir plus d&rsquo;importance que le nombre nominal d&rsquo;\u00e9quations.<\/p>\n<p>Des m\u00e9thodes explicites stabilis\u00e9es sont utiles lorsque la rigidit\u00e9 est mod\u00e9r\u00e9e et domin\u00e9e par des valeurs propres d&rsquo;axe n\u00e9gatif-r\u00e9el. Les m\u00e9thodes IMEX fonctionnent lorsque des op\u00e9rateurs rigides et non rigides peuvent \u00eatre s\u00e9par\u00e9s. Les m\u00e9thodes de commutation automatique aident lorsque le r\u00e9gime change lors de l&rsquo;int\u00e9gration.<\/p>\n<p>Le choix final doit \u00eatre bas\u00e9 sur des tests de pr\u00e9cision du travail. Le meilleur solveur rigide est la m\u00e9thode qui atteint la pr\u00e9cision scientifique requise avec le co\u00fbt de calcul fiable le plus bas.<\/p>\n<\/article>\n","protected":false,"raw":"<article>\n<p>Une simulation d\u00e9pendante du temps peut sembler bien formul\u00e9e et obliger toujours un solveur explicite \u00e0 franchir des milliers de mesures extr\u00eamement petites. Augmenter la commande d'Euler vers l'avant vers RK4 peut retarder le probl\u00e8me, mais cela ne le supprime pas toujours. Le syst\u00e8me peut \u00eatre rigide.<\/p>\n<p>La rigidit\u00e9 appara\u00eet lorsque la stabilit\u00e9 num\u00e9rique n\u00e9cessite un pas de temps beaucoup plus petit que l'\u00e9tape n\u00e9cessaire pour r\u00e9soudre le comportement d'int\u00e9r\u00eat scientifique. Les composants rapides peuvent se d\u00e9composer presque imm\u00e9diatement, tandis que des composants plus lents contr\u00f4lent la solution \u00e0 long terme. Un int\u00e9grateur explicite doit rester stable pour les deux.<\/p>\n<p>Les solveurs rigides implicites peuvent d\u00e9passer les modes de d\u00e9croissance rapide car leurs r\u00e9gions de stabilit\u00e9 s'\u00e9tendent beaucoup plus loin dans la moiti\u00e9 gauche du plan complexe. Le compromis est que chaque \u00e9tape accept\u00e9e peut n\u00e9cessiter une \u00e9valuation jacobienne, une factorisation matricielle, une alg\u00e8bre lin\u00e9aire it\u00e9rative ou une solution non lin\u00e9aire.<\/p>\n<p>La bonne question n'est donc pas de savoir si les m\u00e9thodes implicites sont toujours meilleures. Il s'agit de savoir si le co\u00fbt de calcul d'une \u00e9tape implicite est inf\u00e9rieur au co\u00fbt des nombreuses petites \u00e9tapes explicites n\u00e9cessaires \u00e0 la stabilit\u00e9.<\/p>\n<p>Le guide plus large <a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" rel=\"nofollow\">M\u00e9thodes d'int\u00e9gration temporelle pour les solveurs PDE<\/a> compare les approches explicites, implicites et IMEX. Cet article se concentre sp\u00e9cifiquement sur la rigidit\u00e9, les r\u00e9gions de stabilit\u00e9, les jacobiens et les familles de solveurs rigides.<\/p>\n<h2>Ce que signifie la rigidit\u00e9<\/h2>\n<p>Il n'y a pas de d\u00e9finition unique de la rigidit\u00e9 qui s'applique parfaitement \u00e0 chaque syst\u00e8me non lin\u00e9aire, m\u00e9thode num\u00e9rique, tol\u00e9rance et intervalle d'int\u00e9gration.<\/p>\n<p>Une description pratique utile est :<\/p>\n<blockquote>\n<p>Un probl\u00e8me est rigoureux lorsqu'une m\u00e9thode num\u00e9rique doit prendre des mesures beaucoup plus petites que l'\u00e9chelle requise pour la pr\u00e9cision en raison des restrictions de stabilit\u00e9.<\/p>\n<\/blockquote>\n<p>Cette d\u00e9finition souligne que la rigidit\u00e9 d\u00e9pend en partie du solveur. Un probl\u00e8me raide pour une m\u00e9thode Runge-Kutta explicite peut \u00eatre g\u00e9rable pour une m\u00e9thode implicite L-stable.<\/p>\n<p>Cela d\u00e9pend \u00e9galement de la sortie demand\u00e9e. Un transitoire chimique rapide peut \u00eatre scientifiquement important dans une \u00e9tude et non pertinent dans une autre. S'il doit \u00eatre r\u00e9solu, une petite \u00e9tape est une exigence de pr\u00e9cision plut\u00f4t qu'une restriction inutile de rigidit\u00e9.<\/p>\n<h2>Un syst\u00e8me simple et rigide<\/h2>\n<p>Envisagez deux \u00e9l\u00e9ments en d\u00e9composition :<\/p>\n<pre><code>dy\u2081\/dt = -y\u2081\n\ndy\u2082\/dt = -1000y\u2082<\/code><\/pre>\n<p>Les solutions exactes sont :<\/p>\n<pre><code>y\u2081(t) = y\u2081(0)e\u207b\u1d57\n\ny\u2082(t) = y\u2082(0)e\u207b\u00b9\u2070\u2070\u2070\u1d57<\/code><\/pre>\n<p>Le deuxi\u00e8me composant dispara\u00eet beaucoup plus rapidement que le premier. Apr\u00e8s son transitoire initial, la solution scientifiquement pertinente peut \u00eatre contr\u00f4l\u00e9e presque enti\u00e8rement par <code>y\u2081<\/code>.<\/p>\n<p>Le forward Euler appliqu\u00e9 \u00e0 la deuxi\u00e8me \u00e9quation n'est stable que lorsque :<\/p>\n<pre><code>|1 - 1000\u0394t| \u2264 1<\/code><\/pre>\n<p>Cela donne :<\/p>\n<pre><code>0 \u2264 \u0394t \u2264 0.002<\/code><\/pre>\n<p>Le solveur doit continuer \u00e0 utiliser une \u00e9tape proche de cette \u00e9chelle m\u00eame apr\u00e8s que <code>y\u2082<\/code> est devenu n\u00e9gligeable. La composante lente pourrait \u00eatre repr\u00e9sent\u00e9e avec pr\u00e9cision avec des \u00e9tapes beaucoup plus grandes, mais la stabilit\u00e9 explicite est contr\u00f4l\u00e9e par le mode rapide.<\/p>\n<h2>Pourquoi le rapport de rigidit\u00e9 est incomplet<\/h2>\n<p>Pour un syst\u00e8me lin\u00e9aire :<\/p>\n<pre><code>dy\/dt = Ay<\/code><\/pre>\n<p>Un rapport de rigidit\u00e9 couramment indiqu\u00e9 est :<\/p>\n<pre><code>\u03ba =\nmax |Re(\u03bb\u1d62)|\n\/\nmin |Re(\u03bb\u1d62)|<\/code><\/pre>\n<p>Le rapport peut \u00eatre informatif lorsque toutes les valeurs propres pertinentes ont des parties r\u00e9elles n\u00e9gatives et que la matrice se comporte r\u00e9guli\u00e8rement. Une valeur importante sugg\u00e8re des taux de d\u00e9croissance largement s\u00e9par\u00e9s.<\/p>\n<p>Cependant, ce n'est pas un test universel. Il n'inclut pas l'intervalle d'int\u00e9gration, la pr\u00e9cision demand\u00e9e, la condition initiale ou la direction dans laquelle la solution \u00e9volue. Il peut \u00e9galement devenir ind\u00e9fini ou trompeur lorsque le Jacobien contient z\u00e9ro valeurs propres, des modes de conservation ou un comportement fortement non normal.<\/p>\n<p>Dans un syst\u00e8me non lin\u00e9aire, le Jacobien change le long de la trajectoire :<\/p>\n<pre><code>J(t) =\n\u2202f\n\/\n\u2202y\nevaluated at y(t)<\/code><\/pre>\n<p>Un syst\u00e8me peut donc se d\u00e9placer entre des r\u00e9gions rigides et non raides au cours d'une m\u00eame simulation.<\/p>\n<h2>Indicateurs bas\u00e9s sur Jacobien<\/h2>\n<p>Les estimations des valeurs propres du Jacobien local sont utiles car les modes stables rapides sont associ\u00e9s \u00e0 des valeurs propres qui ont de grandes parties r\u00e9elles n\u00e9gatives.<\/p>\n<p>Un indicateur moins cher utilise parfois la trace mise \u00e0 l'\u00e9chelle :<\/p>\n<pre><code>\u03c4(J) =\ntrace(J) \/ d\n=\ndiv(f) \/ d<\/code><\/pre>\n<p>Sur un intervalle d'int\u00e9gration avec une longueur caract\u00e9ristique <code>T<\/code>, une valeur fortement n\u00e9gative de&nbsp;:<\/p>\n<pre><code>T trace(J) \/ d<\/code><\/pre>\n<p>Peut indiquer une contraction rapide de la phase-volume et des \u00e9ventuelles restrictions de pas explicites.<\/p>\n<p>Il s'agit d'un indicateur heuristique, pas une d\u00e9finition n\u00e9cessaire et suffisante de la rigidit\u00e9. Une trace fait la moyenne des parties r\u00e9elles de la valeur propre et peut masquer une direction fortement raide lorsque d'autres directions la compensent.<\/p>\n<p>Les syst\u00e8mes non normaux peuvent \u00e9galement pr\u00e9senter une croissance transitoire qui n'est pas pr\u00e9dite de mani\u00e8re fiable par les valeurs propres ou les traces seules. Les normes logarithmiques, les diagnostics de solveur direct et les restrictions de taille de pas observ\u00e9es peuvent fournir des informations suppl\u00e9mentaires.<\/p>\n<p>L'arri\u00e8re-plan math\u00e9matique est r\u00e9sum\u00e9 dans <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stiff_equation\" rel=\"nofollow\">Aper\u00e7u des \u00e9quations rigides<\/a>. Une analyse plus approfondie de la raison pour laquelle la rigidit\u00e9 r\u00e9siste \u00e0 une simple d\u00e9finition bas\u00e9e sur des valeurs propres est fournie dans <a href=\"https:\/\/people.maths.ox.ac.uk\/trefethen\/publication\/PDF\/1993_56.pdf\" rel=\"nofollow\" target=\"_blank\">rigidit\u00e9 des ODE<\/a>.<\/p>\n<h2>Signes pratiques de rigidit\u00e9<\/h2>\n<p>Un mod\u00e8le peut \u00eatre raide lorsque :<\/p>\n<ul>\n<li>Une m\u00e9thode explicite adaptative r\u00e9duit \u00e0 plusieurs reprises son pas malgr\u00e9 une solution fluide.<\/li>\n<li>Le solveur explicite prend de nombreuses \u00e9tapes apr\u00e8s qu'un transitoire rapide s'est d\u00e9j\u00e0 d\u00e9grad\u00e9.<\/li>\n<li>Un petit changement de taille de pas fait passer le calcul de stable \u00e0 explosif.<\/li>\n<li>Le Jacobien contient des modes fortement n\u00e9gatifs avec des \u00e9chelles tr\u00e8s diff\u00e9rentes.<\/li>\n<li>Un solveur implicite effectue le m\u00eame calcul avec beaucoup moins d'\u00e9tapes accept\u00e9es.<\/li>\n<li>Les r\u00e9actions chimiques, la diffusion, la relaxation ou les termes de p\u00e9nalit\u00e9 introduisent des \u00e9chelles de temps tr\u00e8s courtes.<\/li>\n<\/ul>\n<p>Ces sympt\u00f4mes ne doivent pas \u00eatre utilis\u00e9s pour rejeter d'\u00e9ventuelles erreurs de codage ou de mod\u00e9lisation. Des signes, des unit\u00e9s, des conditions aux limites ou des Jacobiens incorrects peuvent cr\u00e9er un comportement qui ressemble \u00e0 la rigidit\u00e9.<\/p>\n<h2>L'\u00e9quation du test de Dahlquist<\/h2>\n<p>La stabilit\u00e9 est g\u00e9n\u00e9ralement \u00e9tudi\u00e9e avec :<\/p>\n<pre><code>dy\/dt = \u03bby<\/code><\/pre>\n<p>La solution exacte apr\u00e8s une \u00e9tape est :<\/p>\n<pre><code>y(t + \u0394t) =\ne^(\u03bb\u0394t)y(t)<\/code><\/pre>\n<p>Une m\u00e9thode num\u00e9rique produit :<\/p>\n<pre><code>y\u207f\u207a\u00b9 =\nR(z)y\u207f\n\nz = \u03bb\u0394t<\/code><\/pre>\n<p>La fonction <code>R(z)<\/code> est la fonction de stabilit\u00e9. La m\u00e9thode est absolument stable lorsque :<\/p>\n<pre><code>|R(z)| \u2264 1<\/code><\/pre>\n<p>L'ensemble de toutes ces valeurs forme la r\u00e9gion de stabilit\u00e9 absolue.<\/p>\n<p>Une introduction claire \u00e0 l'\u00e9quation de Dahlquist et \u00e0 la stabilit\u00e9 A est disponible dans les <a href=\"https:\/\/www.math.iit.edu\/~fass\/478578_Chapter_4.pdf\" rel=\"nofollow\" target=\"_blank\">Notes d'analyse num\u00e9rique<\/a>.<\/p>\n<h2>Pourquoi les m\u00e9thodes explicites \u00e9chouent<\/h2>\n<p>L'attaquant Euler a :<\/p>\n<pre><code>R(z) = 1 + z<\/code><\/pre>\n<p>Sa r\u00e9gion de stabilit\u00e9 est un disque centr\u00e9 sur <code>\u22121<\/code> avec un rayon. Le long de l'axe r\u00e9el n\u00e9gatif :<\/p>\n<pre><code>\u22122 \u2264 z \u2264 0<\/code><\/pre>\n<p>Le RK4 classique a une r\u00e9gion plus grande, s'\u00e9tendant \u00e0 environ :<\/p>\n<pre><code>z \u2248 \u22122.785<\/code><\/pre>\n<p>Il est toujours d\u00e9limit\u00e9. Aucune m\u00e9thode Runge-Kutta explicite ne peut \u00eatre stable.<\/p>\n<p>Lorsqu'une valeur propre jacobienne est d'environ <code>\u22121000<\/code>, RK4 n\u00e9cessite une \u00e9tape inf\u00e9rieure \u00e0 environ&nbsp;:<\/p>\n<pre><code>\u0394t \u2272 2.785 \/ 1000<\/code><\/pre>\n<p>Une m\u00e9thode explicite d'ordre sup\u00e9rieur am\u00e9liore la pr\u00e9cision et peut agrandir l'intervalle stable, mais elle ne peut pas \u00e9tendre la stabilit\u00e9 arbitrairement loin le long de l'axe r\u00e9el n\u00e9gatif.<\/p>\n<h2>A-stabilit\u00e9<\/h2>\n<p>Une m\u00e9thode A-stable contient le demi-plan entier gauche dans sa r\u00e9gion de stabilit\u00e9 :<\/p>\n<pre><code>Re(z) \u2264 0\n\u21d2\n|R(z)| \u2264 1<\/code><\/pre>\n<p>Euler \u00e0 l'envers est A-stable parce que&nbsp;:<\/p>\n<pre><code>R(z) =\n1 \/ (1 - z)<\/code><\/pre>\n<p>Pour les modes avec des parties r\u00e9elles n\u00e9gatives, la m\u00e9thode reste stable quelle que soit la taille du pas.<\/p>\n<p>Cela ne signifie pas qu'un pas arbitrairement grand est exact. La stabilit\u00e9 A supprime une restriction de stabilit\u00e9 mais ne supprime pas l'erreur de troncature.<\/p>\n<h2>L-stabilit\u00e9<\/h2>\n<p>Une m\u00e9thode L-stable est A-stable et satisfait \u00e9galement :<\/p>\n<pre><code>R(z) \u2192 0\nas\nz \u2192 -\u221e<\/code><\/pre>\n<p>Cette propri\u00e9t\u00e9 amortit fortement les modes rapides non r\u00e9solus. Euler \u00e0 l'envers est L-stable.<\/p>\n<p>Crank\u2013Nicolson est A-stable mais pas stable. Sa fonction de stabilit\u00e9 est :<\/p>\n<pre><code>R(z) =\n(1 + z\/2)\n\/\n(1 - z\/2)<\/code><\/pre>\n<p>Comme <code>z \u2192 -\u221e<\/code>, le facteur approche <code>\u22121<\/code>. Un composant tr\u00e8s rigide peut alterner signe au lieu de se d\u00e9composer rapidement. Cela peut cr\u00e9er des oscillations non physiques m\u00eame si la m\u00e9thode reste limit\u00e9e.<\/p>\n<p>La L-stabilit\u00e9 est particuli\u00e8rement pr\u00e9cieuse lorsque les transitoires rapides doivent dispara\u00eetre plut\u00f4t que de rester visibles dans la solution calcul\u00e9e.<\/p>\n<h2>Le probl\u00e8me Prothero-Robinson<\/h2>\n<p>Le probl\u00e8me du test Prothero\u2013Robinson a la forme g\u00e9n\u00e9rale :<\/p>\n<pre><code>dy\/dt =\n\u03bb[y - g(t)]\n+ g'(t)<\/code><\/pre>\n<p>Sa solution exacte est :<\/p>\n<pre><code>y(t) =\ng(t)\n+\n[y(0) - g(0)]e^(\u03bbt)<\/code><\/pre>\n<p>Choisir&nbsp;:<\/p>\n<pre><code>g(t) = sin(t)<\/code><\/pre>\n<p>donne&nbsp;:<\/p>\n<pre><code>dy\/dt =\n\u03bb[y - sin(t)]\n+ cos(t)<\/code><\/pre>\n<p>et&nbsp;:<\/p>\n<pre><code>y(t) =\nsin(t)\n+\ny(0)e^(\u03bbt)<\/code><\/pre>\n<p>Lorsque <code>g(0)=0<\/code>.<\/p>\n<p>Pour un grand n\u00e9gatif <code>\u03bb<\/code>, le transitoire exponentiel se d\u00e9sint\u00e8gre rapidement, tandis que le for\u00e7age lisse <code>sin(t)<\/code> reste. Une m\u00e9thode explicite peut encore \u00eatre forc\u00e9e de r\u00e9soudre le mode de d\u00e9croissance rapide pour la stabilit\u00e9.<\/p>\n<p>Le probl\u00e8me est \u00e9galement utilis\u00e9 pour \u00e9tudier la r\u00e9duction de la commande rigide. Certaines m\u00e9thodes ne parviennent pas \u00e0 atteindre leur ordre de convergence nominale lorsque la rigidit\u00e9, le for\u00e7age et les effets de limites ou de contraintes interagissent.<\/p>\n<h2>Comparaison Python avec Scipy<\/h2>\n<p>L'exemple suivant compare une m\u00e9thode explicite avec deux solveurs rigides&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\nfrom scipy.integrate import solve_ivp\n\nstiffness = -1000.0\ntime_interval = (0.0, 10.0)\ninitial_state = [1.0]\n\ndef right_hand_side(time, state):\n    value = state[0]\n\n    return [\n        stiffness\n        * (value - np.sin(time))\n        + np.cos(time)\n    ]\n\ndef jacobian(time, state):\n    return np.array([\n        [stiffness]\n    ])\n\ndef exact_solution(time):\n    return (\n        np.sin(time)\n        + np.exp(stiffness * time)\n    )\n\nmethods = [\n    (\"RK45\", {}),\n    (\"Radau\", {\"jac\": jacobian}),\n    (\"BDF\", {\"jac\": jacobian}),\n    (\"LSODA\", {})\n]\n\nfor method, options in methods:\n    solution = solve_ivp(\n        fun=right_hand_side,\n        t_span=time_interval,\n        y0=initial_state,\n        method=method,\n        rtol=1e-7,\n        atol=1e-9,\n        **options\n    )\n\n    reference = exact_solution(\n        solution.t\n    )\n\n    maximum_error = np.max(\n        np.abs(\n            solution.y[0]\n            - reference\n        )\n    )\n\n    print(method)\n    print(\"  Success:\", solution.success)\n    print(\"  Accepted points:\", solution.t.size)\n    print(\"  Function evaluations:\", solution.nfev)\n    print(\"  Jacobian evaluations:\", solution.njev)\n    print(\"  LU factorizations:\", solution.nlu)\n    print(\"  Maximum error:\", maximum_error)<\/code><\/pre>\n<p>Les d\u00e9comptes exacts d\u00e9pendent des tol\u00e9rances, de la version du logiciel, de l'\u00e9tat initial, des informations de Jacobien et des param\u00e8tres du solveur. La comparaison importante est le co\u00fbt total de calcul au m\u00eame niveau d'erreur.<\/p>\n<h2>Familles de solveurs rigides<\/h2>\n<p>Aucun solveur unique n'est id\u00e9al pour chaque syst\u00e8me rigide. Les consid\u00e9rations importantes comprennent :<\/p>\n<ul>\n<li>Dimension du syst\u00e8me<\/li>\n<li>La parcimonie et la bande passante de Jacobien<\/li>\n<li>Co\u00fbt d'\u00e9valuation du c\u00f4t\u00e9 droit<\/li>\n<li>Disponibilit\u00e9 des d\u00e9riv\u00e9s analytiques<\/li>\n<li>tol\u00e9rance demand\u00e9e<\/li>\n<li>pr\u00e9sence de contraintes ou d'une matrice de masse<\/li>\n<li>Si le probl\u00e8me change entre les phases rigides et non raides<\/li>\n<\/ul>\n<h2>Formules de diff\u00e9renciation en arri\u00e8re<\/h2>\n<p>Les m\u00e9thodes BDF sont des formules implicites en plusieurs \u00e9tapes. Ils se rapprochent de la d\u00e9riv\u00e9e \u00e0 l'aide de plusieurs valeurs de solution pr\u00e9c\u00e9dentes et \u00e9valuent l'\u00e9quation gouvernante au nouveau moment.<\/p>\n<p>Une formule BDF du premier ordre est Euler \u00e0 l'envers :<\/p>\n<pre><code>(\n    y\u207f\u207a\u00b9 - y\u207f\n) \/ \u0394t\n=\nf(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>BDF2 utilise deux valeurs pr\u00e9c\u00e9dentes&nbsp;:<\/p>\n<pre><code>(\n    3y\u207f\u207a\u00b9\n    - 4y\u207f\n    + y\u207f\u207b\u00b9\n) \/ (2\u0394t)\n=\nf(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>Les impl\u00e9mentations d'ordre variable peuvent utiliser plusieurs commandes BDF et adapter \u00e0 la fois la taille de la commande et la taille des pas. Les commandes un et deux sont stables. Les formules BDF d'ordre sup\u00e9rieur sacrifient la pleine stabilit\u00e9 A mais restent utiles pour de nombreux syst\u00e8mes rigides.<\/p>\n<p>Les m\u00e9thodes BDF sont souvent efficaces pour les grands syst\u00e8mes lorsque le Jacobien est clairsem\u00e9 et qu'un solveur lin\u00e9aire ou un pr\u00e9conditionneur parsem\u00e9 degr\u00e9s est disponible.<\/p>\n<p>Les exemples incluent les <code>BDF<\/code> de Scipy, les m\u00e9thodes <code>ode15s<\/code> de Matlab, les cadrans solaires CVODE BDF et les m\u00e9thodes SCIML telles que <code>QNDF<\/code> et <code>FBDF<\/code>.<\/p>\n<h2>M\u00e9thodes de Rosenbrock<\/h2>\n<p>Les m\u00e9thodes de Rosenbrock sont des m\u00e9thodes Runge-Kutta lin\u00e9airement implicites. Ils lin\u00e9arisent les \u00e9quations d'\u00e9tape et r\u00e9solvent les syst\u00e8mes de la forme :<\/p>\n<pre><code>(\n    I - \u03b3\u0394tJ\n)k\u1d62\n=\nknown stage terms<\/code><\/pre>\n<p>Cela \u00e9vite une solution non lin\u00e9aire compl\u00e8te \u00e0 chaque \u00e9tape. La m\u00e9thode n\u00e9cessite toujours des informations jacobiennes ou une approximation utile.<\/p>\n<p>Les m\u00e9thodes de Rosenbrock sont souvent efficaces pour les petits et moyens raides, en particulier \u00e0 des tol\u00e9rances strictes. La m\u00eame structure matricielle peut \u00eatre r\u00e9utilis\u00e9e en plusieurs \u00e9tapes.<\/p>\n<p>Les exemples de l'\u00e9cosyst\u00e8me du SCIML incluent :<\/p>\n<ul>\n<li><code>Rosenbrock23<\/code><\/li>\n<li><code>Rodas4<\/code><\/li>\n<li><code>Rodas5P<\/code><\/li>\n<\/ul>\n<p>La <a href=\"https:\/\/docs.sciml.ai\/OrdinaryDiffEq\/stable\/semiimplicit\/Rosenbrock\/\" rel=\"nofollow\" target=\"_blank\">Sciml Rosenbrock Documentation<\/a> fournit des recommandations sp\u00e9cifiques \u00e0 la m\u00e9thode et des d\u00e9tails de mise en \u0153uvre.<\/p>\n<h2>M\u00e9thodes Sdirk<\/h2>\n<p>Sdirk signifie <strong>Runge-Kutta<\/strong> implicite individuellement en diagonale. Chaque \u00e9tape implicite utilise le m\u00eame coefficient diagonal dans la matrice Runge-Kutta.<\/p>\n<p>Cela produit des syst\u00e8mes sc\u00e9niques avec une structure r\u00e9p\u00e9t\u00e9e :<\/p>\n<pre><code>(\n    I - \u03b3\u0394tJ\n)k\u1d62\n=\nstage residual<\/code><\/pre>\n<p>Une factorisation matricielle ou un pr\u00e9conditionneur peut donc \u00eatre r\u00e9utilis\u00e9 \u00e0 travers les \u00e9tapes lorsque le Jacobien est maintenu fixe.<\/p>\n<p>Les m\u00e9thodes Sdirk sont des m\u00e9thodes en une seule \u00e9tape, ce qui les rend plus faciles \u00e0 red\u00e9marrer apr\u00e8s des \u00e9v\u00e9nements ou des discontinuit\u00e9s que les formules BDF en plusieurs \u00e9tapes.<\/p>\n<p>Les exemples incluent les m\u00e9thodes esdirk et kencarp. Certains fournissent des estimations de stabilit\u00e9 en L et d'erreurs int\u00e9gr\u00e9es.<\/p>\n<h2>Tr-BDF2<\/h2>\n<p>TR-BDF2 est une m\u00e9thode composite en une seule \u00e9tape. Il combine une \u00e9tape de r\u00e8gle trap\u00e9zo\u00efdale avec une \u00e9tape de diff\u00e9renciation vers l'arri\u00e8re du second ordre.<\/p>\n<p>Il ne doit pas \u00eatre regroup\u00e9 avec des solveurs BDF \u00e0 plusieurs \u00e9tapes ordinaires. Sa construction sp\u00e9ciale donne une pr\u00e9cision de second ordre et de fortes propri\u00e9t\u00e9s de stabilit\u00e9, notamment la stabilit\u00e9 en L pour le choix des param\u00e8tres standard.<\/p>\n<p>TR-BDF2 est souvent une m\u00e9thode raide \u00e0 usage g\u00e9n\u00e9ral pratique lorsqu'un amortissement mod\u00e9r\u00e9 et robuste est plus important que l'ordre asymptotique tr\u00e8s \u00e9lev\u00e9.<\/p>\n<h2>M\u00e9thodes Runge-Kutta enti\u00e8rement implicites<\/h2>\n<p>Firk signifie <strong>Runge\u2013Kutta enti\u00e8rement implicite<\/strong>. Les \u00e9tapes sont coupl\u00e9es et n\u00e9cessitent normalement la r\u00e9solution d'un syst\u00e8me non lin\u00e9aire plus grand.<\/p>\n<p>Les familles importantes comprennent :<\/p>\n<ul>\n<li>M\u00e9thodes Radau IIA<\/li>\n<li>M\u00e9thodes de Gauss-Legendre<\/li>\n<li>M\u00e9thodes lobatto<\/li>\n<\/ul>\n<p>Les m\u00e9thodes RADAU IIA peuvent fournir un ordre \u00e9lev\u00e9, une stabilit\u00e9 A et une stabilit\u00e9 en L. Ils sont attractifs pour les probl\u00e8mes de grande pr\u00e9cision mais peuvent avoir un co\u00fbt par \u00e9tape plus \u00e9lev\u00e9 que les m\u00e9thodes Rosenbrock, Sdirk ou BDF.<\/p>\n<p>Le solveur <code>Radau<\/code> de Scipy est bas\u00e9 sur une m\u00e9thode Radau IIa du cinqui\u00e8me ordre.<\/p>\n<h2>M\u00e9thodes explicites stabilis\u00e9es<\/h2>\n<p>Les m\u00e9thodes explicites stabilis\u00e9es utilisent des polyn\u00f4mes de stabilit\u00e9 sp\u00e9cialement construits pour \u00e9tendre l'intervalle stable le long de l'axe r\u00e9el n\u00e9gatif.<\/p>\n<p>Les exemples incluent :<\/p>\n<ul>\n<li>M\u00e9thodes RKC<\/li>\n<li>rock2<\/li>\n<li>rock4<\/li>\n<\/ul>\n<p>Pour une m\u00e9thode avec des \u00e9tapes <code>s<\/code>, l'intervalle stable peut cro\u00eetre approximativement comme <code>s\u00b2<\/code>. Cela rend l'approche utile pour les grands syst\u00e8mes domin\u00e9s par la diffusion o\u00f9 le spectre jacobien se situe principalement \u00e0 proximit\u00e9 de l'axe r\u00e9el n\u00e9gatif.<\/p>\n<p>Ces m\u00e9thodes ne sont pas stables et ne r\u00e9solvent pas tous les types de rigidit\u00e9. Ils peuvent ne pas convenir lorsque le syst\u00e8me a des valeurs imaginaires substantielles, une rigidit\u00e9 de r\u00e9action hautement non lin\u00e9aire, des contraintes alg\u00e9briques diff\u00e9rentielles ou un couplage difficile.<\/p>\n<p>Le <a href=\"https:\/\/www.epfl.ch\/labs\/mathicse\/wp-content\/uploads\/2018\/10\/27.2011_AA.pdf\" rel=\"nofollow\" target=\"_blank\">mat\u00e9riau EPFL sur les m\u00e9thodes explicites stabilis\u00e9es<\/a> illustre comment les m\u00e9thodes bas\u00e9es sur Chebyshev \u00e9tendent le domaine de stabilit\u00e9.<\/p>\n<h2>M\u00e9thodes IMEX<\/h2>\n<p>Lorsque la rigidit\u00e9 peut \u00eatre s\u00e9par\u00e9e d'une dynamique non raide, une m\u00e9thode implicite et explicite peut \u00eatre plus efficace que de traiter implicitement le syst\u00e8me complet&nbsp;:<\/p>\n<pre><code>dy\/dt =\nf_nonstiff(y)\n+\nf_stiff(y)<\/code><\/pre>\n<p>Le terme non raide est int\u00e9gr\u00e9 explicitement, tandis que le terme rigide est int\u00e9gr\u00e9 implicitement.<\/p>\n<p>Les exemples incluent l'advection trait\u00e9e explicitement et la diffusion trait\u00e9e implicitement, ou le transport trait\u00e9 explicitement et les r\u00e9actions chimiques trait\u00e9es implicitement.<\/p>\n<p>Les m\u00e9thodes IMEX n\u00e9cessitent une division d'op\u00e9rateur physiquement et num\u00e9riquement significative. Leur stabilit\u00e9 d\u00e9pend de la paire compl\u00e8te explicite-implicite.<\/p>\n<h2>Commutation automatique de la rigidit\u00e9<\/h2>\n<p>Certains algorithmes estiment la rigidit\u00e9 lors de l'int\u00e9gration et passent entre des formules non raides et rigides.<\/p>\n<p>LSODA bascule entre une m\u00e9thode ADAMS et une m\u00e9thode BDF. Il est disponible via Odepack, Scipy et plusieurs interfaces linguistiques.<\/p>\n<p>Dans l'\u00e9cosyst\u00e8me SCIML, une m\u00e9thode automatique peut combiner un algorithme explicite avec un solveur rigide, par exemple :<\/p>\n<pre><code class=\"language-julia\">AutoTsit5(\n    Rosenbrock23()\n)<\/code><\/pre>\n<p>La commutation automatique est utile lorsque la rigidit\u00e9 est inconnue ou n'appara\u00eet que pendant une partie de la trajectoire. La d\u00e9tection n'est pas parfaite, de sorte que des probl\u00e8mes difficiles peuvent toujours b\u00e9n\u00e9ficier de la s\u00e9lection directe d'un solveur rigide.<\/p>\n<p>Le <a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/solvers\/ode_solve\" rel=\"nofollow\" target=\"_blank\">Guide de solveur d'odes Sciml<\/a> recommande les m\u00e9thodes de commutation automatique lorsque la rigidit\u00e9 est incertaine.<\/p>\n<h2>Les questions jacobiennes<\/h2>\n<p>Pour une \u00e9tape implicite, le r\u00e9sidu non lin\u00e9aire peut \u00eatre :<\/p>\n<pre><code>G(y\u207f\u207a\u00b9) =\ny\u207f\u207a\u00b9\n- y\u207f\n- \u0394t f(t\u207f\u207a\u00b9, y\u207f\u207a\u00b9)<\/code><\/pre>\n<p>La m\u00e9thode de Newton n\u00e9cessite :<\/p>\n<pre><code>[\n    I\n    - \u0394tJ\n]\u03b4\n=\n-G<\/code><\/pre>\n<p>o\u00f9&nbsp;:<\/p>\n<pre><code>J =\n\u2202f \/ \u2202y<\/code><\/pre>\n<p>La solution lin\u00e9aire peut dominer le temps d'ex\u00e9cution. Un solveur rigide fonctionnera mal s'il traite un grand Jacobien clairsem\u00e9 comme une matrice dense.<\/p>\n<p>Les performances peuvent s'am\u00e9liorer gr\u00e2ce \u00e0 :<\/p>\n<ul>\n<li>Un Jacobien analytique<\/li>\n<li>Diff\u00e9renciation automatique<\/li>\n<li>Un mod\u00e8le de parcimonie d\u00e9clar\u00e9<\/li>\n<li>Stockage de la matrice \u00e0 bandes<\/li>\n<li>Factorisation directe clairsem\u00e9e<\/li>\n<li>M\u00e9thodes Krylov<\/li>\n<li>Pr\u00e9conditionnement bas\u00e9 sur la physique<\/li>\n<li>Produits vectoriels Jacobian sans matrice<\/li>\n<\/ul>\n<p>Le didacticiel SCIML sur <a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/tutorials\/advanced_ode_example\/\" rel=\"nofollow\" target=\"_blank\">r\u00e9solution de grandes \u00e9quations rigides<\/a> montre comment la structure jacobienne et la s\u00e9lection des solveurs lin\u00e9aires affectent les performances.<\/p>\n<h2>Guide de s\u00e9lection des solveurs<\/h2>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Probl\u00e8me caract\u00e9ristique<\/th>\n<th>Point de d\u00e9part possible<\/th>\n<th>consid\u00e9ration principale<\/th>\n<\/tr>\n<tr>\n<td>Ode lisse non rigide<\/td>\n<td>RK explicite adaptatif<\/td>\n<td>Faible co\u00fbt par \u00e9tape<\/td>\n<\/tr>\n<tr>\n<td>Syst\u00e8me petit ou moyen rigide<\/td>\n<td>M\u00e9thode de Rosenbrock ou Radau<\/td>\n<td>Pr\u00e9cision, co\u00fbt jacobien et tol\u00e9rance<\/td>\n<\/tr>\n<tr>\n<td>Grand syst\u00e8me rigide clairsem\u00e9<\/td>\n<td>BDF, Rosenbrock ou Sdirk avec alg\u00e8bre lin\u00e9aire clairsem\u00e9e<\/td>\n<td>La structure jacobienne compte plus qu'un seuil de taille fixe<\/td>\n<\/tr>\n<tr>\n<td>Int\u00e9gration rigide de haute pr\u00e9cision<\/td>\n<td>Radau IIA ou Rosenbrock d'ordre \u00e9lev\u00e9<\/td>\n<td>Plus grande \u00e9tape et r\u00e9solution des co\u00fbts<\/td>\n<\/tr>\n<tr>\n<td>Raideur l\u00e9g\u00e8re domin\u00e9e par la diffusion<\/td>\n<td>RKC ou rock<\/td>\n<td>Le spectre doit se situer principalement pr\u00e8s de l'axe r\u00e9el n\u00e9gatif<\/td>\n<\/tr>\n<tr>\n<td>Physique rigide et non rigide s\u00e9parable<\/td>\n<td>M\u00e9thode IMEX<\/td>\n<td>N\u00e9cessite une division d'op\u00e9rateur appropri\u00e9e<\/td>\n<\/tr>\n<tr>\n<td>Raideur inconnue ou changeante<\/td>\n<td>Commutation automatique LOSODA ou explicite-implicite<\/td>\n<td>La d\u00e9tection ajoute de la complexit\u00e9 mais peu de r\u00e9glage manuel<\/td>\n<\/tr>\n<tr>\n<td>Probl\u00e8me DAE ou matricielle de masse<\/td>\n<td>M\u00e9thode DAE-capable BDF, Radau ou Rosenbrock<\/td>\n<td>Les solveurs ODE peuvent ne pas appliquer correctement les contraintes alg\u00e9briques<\/td>\n<\/tr>\n<\/tbody><\/table>\n<h2>Pourquoi les seuils de dimension fixe sont trompeurs<\/h2>\n<p>Il est tentant de recommander les m\u00e9thodes de Rosenbrock en dessous de 1 000 \u00e9quations, les m\u00e9thodes Sdirk jusqu'\u00e0 10 000 et les m\u00e9thodes BDF au-dessus de cela. Ces seuils ne sont pas fiables.<\/p>\n<p>Un probl\u00e8me dense de 500 \u00e9quations peut \u00eatre plus co\u00fbteux qu'un syst\u00e8me clairsem\u00e9 contenant des centaines de milliers d'\u00e9quations. Les facteurs d\u00e9cisifs comprennent :<\/p>\n<ul>\n<li>Nombre d'entr\u00e9es non nulles de Jacobien<\/li>\n<li>Remplissage lors de la factorisation<\/li>\n<li>Qualit\u00e9 de pr\u00e9conditionnement<\/li>\n<li>Co\u00fbt de droite<\/li>\n<li>Tol\u00e9rance requise<\/li>\n<li>Fr\u00e9quence des mises \u00e0 jour jacobiennes<\/li>\n<li>Disponibilit\u00e9 de produits sans matrice<\/li>\n<li>\u00c9volutivit\u00e9 parall\u00e8le<\/li>\n<\/ul>\n<p>Le choix du solveur doit \u00eatre test\u00e9 gr\u00e2ce \u00e0 des comparaisons de pr\u00e9cision du travail sur le probl\u00e8me r\u00e9el.<\/p>\n<h2>L'exemple de propagation de la flamme<\/h2>\n<p>L'exemple de propagation de la flamme de Cleve Moler utilise l'\u00e9quation scalaire non lin\u00e9aire :<\/p>\n<pre><code>dy\/dt =\ny\u00b2(1 - y)<\/code><\/pre>\n<p>La valeur initiale est tr\u00e8s faible. La solution reste proche de z\u00e9ro pendant une longue p\u00e9riode d'induction, passe rapidement, puis s'approche d'une seule.<\/p>\n<p>Dans la comparaison MATLAB publi\u00e9e, le solveur non rigide <code>ode45<\/code> a suivi 3&nbsp;040&nbsp;\u00e9tapes et 20&nbsp;179&nbsp;\u00e9valuations de fonctions. Le solveur rigide bas\u00e9 \u00e0 Rosenbrock <code>ode23s<\/code> a suivi 99&nbsp;\u00e9tapes et 412&nbsp;\u00e9valuations de fonctions.<\/p>\n<p>Il s'agit d'environ trente fois moins d'\u00e9tapes accept\u00e9es, et non d'un pour cent du nombre de pas d'origine.<\/p>\n<p>L'exemple et sa repr\u00e9sentation analytique Lambert w sont d\u00e9crits dans <a href=\"https:\/\/de.mathworks.com\/company\/technical-articles\/stiff-differential-equations.html\" rel=\"nofollow\" target=\"_blank\">\u00e9quations diff\u00e9rentielles raides<\/a> par Cleve Moler.<\/p>\n<p>Le r\u00e9sultat ne doit pas \u00eatre interpr\u00e9t\u00e9 comme un avantage universel pour les m\u00e9thodes implicites. Il montre \u00e0 quel point l'efficacit\u00e9 du solveur peut changer lorsque la stabilit\u00e9 plut\u00f4t que la pr\u00e9cision contr\u00f4le un int\u00e9grateur explicite.<\/p>\n<h2>Comparaison \u00e9quitable des solveurs<\/h2>\n<p>Une r\u00e9f\u00e9rence juste doit comparer les m\u00e9thodes avec une pr\u00e9cision \u00e9quivalente. Enregistrer&nbsp;:<\/p>\n<ul>\n<li>Erreur ou erreur globale dans une quantit\u00e9 d'int\u00e9r\u00eat<\/li>\n<li>\u00c9tapes accept\u00e9es et rejet\u00e9es<\/li>\n<li>\u00c9valuations de droite<\/li>\n<li>\u00c9valuations jacobiennes<\/li>\n<li>R\u00e9solutions lin\u00e9aires et factorisations<\/li>\n<li>It\u00e9rations non lin\u00e9aires<\/li>\n<li>consommation de m\u00e9moire<\/li>\n<li>Heure totale de l'horloge murale<\/li>\n<\/ul>\n<p>Un solveur prenant moins d'\u00e9tapes peut encore \u00eatre plus lent si chaque \u00e9tape n\u00e9cessite une factorisation co\u00fbteuse. Une m\u00e9thode avec plus d'\u00e9valuations de fonctions peut gagner lorsque la fonction est bon march\u00e9 et que l'alg\u00e8bre lin\u00e9aire concurrente est co\u00fbteuse.<\/p>\n<h2>erreurs courantes<\/h2>\n<ul>\n<li>En supposant que chaque solution explicite divergente prouve la rigidit\u00e9<\/li>\n<li>Traiter le taux de rigidit\u00e9 comme un diagnostic d\u00e9finitif<\/li>\n<li>Utiliser la trace jacobienne comme d\u00e9finition universelle de rigidit\u00e9<\/li>\n<li>En supposant que chaque m\u00e9thode implicite est A-stable<\/li>\n<li>En supposant que chaque m\u00e9thode A-stable est L-stable<\/li>\n<li>Appeler TR-BDF2 une m\u00e9thode BDF en plusieurs \u00e9tapes ordinaire<\/li>\n<li>D\u00e9velopper Firk de mani\u00e8re incorrecte en tant que famille Runge-Kutta explicite<\/li>\n<li>Utilisation d'un Jacobien dense pour un grand syst\u00e8me clairsem\u00e9<\/li>\n<li>Ne pas fournir un mod\u00e8le de jacobien ou de parcimonie lorsque le solveur peut en utiliser un<\/li>\n<li>S\u00e9lection d'un solveur uniquement \u00e0 partir du nombre d'\u00e9quations<\/li>\n<li>Utilisation d'une m\u00e9thode explicite stabilis\u00e9e pour la rigidit\u00e9 en dehors de sa conception spectrale<\/li>\n<li>Comparaison des nombres d'\u00e9tapes sans comparaison d'erreur et d'ex\u00e9cution<\/li>\n<li>Prendre des mesures implicites tr\u00e8s importantes sans v\u00e9rifier la pr\u00e9cision temporelle<\/li>\n<\/ul>\n<h2>Un flux de travail pratique<\/h2>\n<ol>\n<li>V\u00e9rifiez les \u00e9quations, les unit\u00e9s, les signes et les conditions initiales.<\/li>\n<li>Ex\u00e9cutez une m\u00e9thode explicite adaptative en tant que diagnostic.<\/li>\n<li>Inspectez les \u00e9tapes accept\u00e9es, les \u00e9tapes rejet\u00e9es et la taille minimale des \u00e9tapes.<\/li>\n<li>Estimez ou analysez le spectre jacobien lorsque cela est pratique.<\/li>\n<li>V\u00e9rifiez si les composants rapides doivent \u00eatre r\u00e9solus physiquement.<\/li>\n<li>Essayez un solveur rigide en L aux m\u00eames tol\u00e9rances.<\/li>\n<li>Fournir des informations jacobiennes et de la parcimonie.<\/li>\n<li>Comparez le travail et la pr\u00e9cision, non seulement les \u00e9tapes accept\u00e9es.<\/li>\n<li>R\u00e9p\u00e9tez avec des tol\u00e9rances plus serr\u00e9es.<\/li>\n<li>Solveur de documents, tol\u00e9rances, alg\u00e8bre lin\u00e9aire et crit\u00e8res de d\u00e9faillance.<\/li>\n<\/ol>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" rel=\"nofollow\">M\u00e9thodes d'int\u00e9gration temporelle pour les solveurs PDE<\/a> \u2014 Comparez les approches explicites, implicites et hybrides.<\/li>\n<li><a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\">S\u00e9paration de l'op\u00e9rateur, fractionnement de Strang et sch\u00e9mas IMEX<\/a> - S\u00e9parez les processus physiques rigides et non raides.<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\">\u00e9tudes sur la qualit\u00e9 et la convergence du maillage<\/a> - D\u00e9terminer si le raffinement spatial augmente la rigidit\u00e9 et modifie la solution.<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">V\u00e9rification vs. Validation dans les simulations scientifiques<\/a> \u2014 Convergence du solveur de places \u00e0 l'int\u00e9rieur Flux de travail de cr\u00e9dibilit\u00e9.<\/li>\n<li><a href=\"https:\/\/matforge.org\/category\/simulation-modeling-projects\/\" rel=\"nofollow\">simulation &amp; Projets de mod\u00e9lisation<\/a> \u2014 Parcourez les ressources MatForge associ\u00e9es.<\/li>\n<\/ul>\n<h2>Lectures compl\u00e9mentaires<\/h2>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Stiff_equation\" rel=\"nofollow\" target=\"_blank\">\u00c9quation rigide : d\u00e9finitions, indicateurs et contexte historique<\/a><\/li>\n<li><a href=\"https:\/\/people.maths.ox.ac.uk\/trefethen\/publication\/PDF\/1993_56.pdf\" rel=\"nofollow\" target=\"_blank\">Higham et Trefethen : rigidit\u00e9 des Odes<\/a><\/li>\n<li><a href=\"https:\/\/www.math.iit.edu\/~fass\/478578_Chapter_4.pdf\" rel=\"nofollow\" target=\"_blank\">L'IIT note une stabilit\u00e9 absolue et une stabilit\u00e9 A<\/a><\/li>\n<li><a href=\"https:\/\/www.epfl.ch\/labs\/mathicse\/wp-content\/uploads\/2018\/10\/27.2011_AA.pdf\" rel=\"nofollow\" target=\"_blank\">Mat\u00e9riau EPFL sur les m\u00e9thodes explicites stabilis\u00e9es<\/a><\/li>\n<li><a href=\"https:\/\/docs.sciml.ai\/DiffEqDocs\/stable\/solvers\/ode_solve\" rel=\"nofollow\" target=\"_blank\">Recommandations de solveur Sciml Ode<\/a><\/li>\n<li><a href=\"https:\/\/de.mathworks.com\/company\/technical-articles\/stiff-differential-equations.html\" rel=\"nofollow\" target=\"_blank\">MathWorks : \u00e9quations diff\u00e9rentielles rigides<\/a><\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>La rigidit\u00e9 se produit lorsque la stabilit\u00e9 num\u00e9rique force une m\u00e9thode pour r\u00e9soudre les composants rapides de plus pr\u00e8s que la sortie souhait\u00e9e n'est requise. Les m\u00e9thodes explicites de Runge-Kutta ont des r\u00e9gions de stabilit\u00e9 limit\u00e9es, de sorte que les grands modes jacobiens n\u00e9gatifs peuvent imposer des \u00e9tapes extr\u00eamement petites.<\/p>\n<p>Les m\u00e9thodes implicites A-stables suppriment cette restriction de stabilit\u00e9 du demi-plan gauche. Les m\u00e9thodes L-stables vont plus loin en amortissant fortement les modes rapides non r\u00e9solus. Ces propri\u00e9t\u00e9s expliquent pourquoi les m\u00e9thodes Backward Euler, BDF, Rosenbrock, Sdirk, TR-BDF2 et Radau peuvent surpasser les solveurs explicites sur les syst\u00e8mes rigides.<\/p>\n<p>Aucun diagnostic ou solveur ne fonctionne pour chaque probl\u00e8me. Les valeurs propres, les rapports de rigidit\u00e9, la divergence \u00e0 l'\u00e9chelle et les restrictions d'\u00e9tape observ\u00e9es fournissent toutes des informations partielles. La structure du jacobien et du solveur lin\u00e9aire peut avoir plus d'importance que le nombre nominal d'\u00e9quations.<\/p>\n<p>Des m\u00e9thodes explicites stabilis\u00e9es sont utiles lorsque la rigidit\u00e9 est mod\u00e9r\u00e9e et domin\u00e9e par des valeurs propres d'axe n\u00e9gatif-r\u00e9el. Les m\u00e9thodes IMEX fonctionnent lorsque des op\u00e9rateurs rigides et non rigides peuvent \u00eatre s\u00e9par\u00e9s. Les m\u00e9thodes de commutation automatique aident lorsque le r\u00e9gime change lors de l'int\u00e9gration.<\/p>\n<p>Le choix final doit \u00eatre bas\u00e9 sur des tests de pr\u00e9cision du travail. Le meilleur solveur rigide est la m\u00e9thode qui atteint la pr\u00e9cision scientifique requise avec le co\u00fbt de calcul fiable le plus bas.<\/p>\n<\/article>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 13<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Lorsque des simulations explicites explosent, la rigidit\u00e9 est g\u00e9n\u00e9ralement le coupable. D\u00e9couvrez pourquoi les m\u00e9thodes explicites \u00e9chouent, comment diagnostiquer la rigidit\u00e9 et quels solveurs fonctionnent r\u00e9ellement.<\/p>\n","protected":false,"raw":"Lorsque des simulations explicites explosent, la rigidit\u00e9 est g\u00e9n\u00e9ralement le coupable. D\u00e9couvrez pourquoi les m\u00e9thodes explicites \u00e9chouent, comment diagnostiquer la rigidit\u00e9 et quels solveurs fonctionnent r\u00e9ellement."},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=493","iawp_total_views":2,"footnotes":""},"categories":[1],"tags":[36,33,37,35,32,38,39,34,40,30,31],"class_list":["post-1291","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","tag-a-stability","tag-bdf-methods","tag-explicit-euler","tag-l-stability","tag-numerical-stability","tag-prothero-robinson-problem","tag-rock-method","tag-rosenbrock-methods","tag-sdirk","tag-stiff-problems","tag-stiff-solvers","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Solveurs d&#039;Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Solveurs d&#039;Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:31:19+00:00\" \/>\n<meta name=\"author\" content=\"Elena Markovska\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elena Markovska\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/\"},\"author\":{\"name\":\"Elena Markovska\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"headline\":\"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent\",\"datePublished\":\"2026-08-21T14:31:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/\"},\"wordCount\":4142,\"commentCount\":0,\"keywords\":[\"A-stabilit\u00e9\",\"M\u00e9thodes BDF\",\"explicit Euler\",\"L-stability\",\"numerical stability\",\"PROthero-Robinson problem\",\"ROCK method\",\"Rosenbrock methods\",\"SDIRK\",\"stiff problems\",\"stiff solvers\"],\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/\",\"name\":\"Solveurs d'Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:31:19+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"description\":\"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/stiff-problems-and-stiff-solvers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\",\"name\":\"Elena Markovska\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"caption\":\"Elena Markovska\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/elena-markovska\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Solveurs d'Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent","description":"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/","og_locale":"fr_FR","og_type":"article","og_title":"Solveurs d'Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent","og_description":"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.","og_url":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:31:19+00:00","author":"Elena Markovska","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Elena Markovska","Dur\u00e9e de lecture estim\u00e9e":"22 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/"},"author":{"name":"Elena Markovska","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"headline":"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent","datePublished":"2026-08-21T14:31:19+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/"},"wordCount":4142,"commentCount":0,"keywords":["A-stabilit\u00e9","M\u00e9thodes BDF","explicit Euler","L-stability","numerical stability","PROthero-Robinson problem","ROCK method","Rosenbrock methods","SDIRK","stiff problems","stiff solvers"],"articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/","url":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/","name":"Solveurs d'Ode rigides\u00a0: pourquoi les m\u00e9thodes explicites \u00e9chouent","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:31:19+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"description":"D\u00e9couvrez pourquoi la rigidit\u00e9 limite les solveurs explicites et comment BDF, Rosenbrock, Sdirk, Radau et les m\u00e9thodes de commutation g\u00e8rent des dynamiques rapides et lentes.","breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/stiff-problems-and-stiff-solvers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Probl\u00e8mes s\u00e9v\u00e8res et solveurs rigides\u00a0: lorsque les m\u00e9thodes explicites \u00e9chouent"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da","name":"Elena Markovska","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","caption":"Elena Markovska"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/elena-markovska\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1291"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1291\/revisions"}],"predecessor-version":[{"id":1399,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1291\/revisions\/1399"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}