{"id":1171,"date":"2026-08-21T14:25:43","date_gmt":"2026-08-21T14:25:43","guid":{"rendered":"https:\/\/matforge.org\/?p=1171","raw":"https:\/\/matforge.org\/?p=1171"},"modified":"2026-08-21T14:25:43","modified_gmt":"2026-08-21T14:25:43","slug":"solving-diffusion-equations-with-fipy","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/","title":{"rendered":"R\u00e9solution des \u00e9quations de diffusion avec Fipy","raw":"R\u00e9solution des \u00e9quations de diffusion avec Fipy"},"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\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>La diffusion est l&rsquo;une des \u00e9quations diff\u00e9rentielles partielles les plus intuitives que vous pouvez simuler&nbsp;: un pic net se r\u00e9pand, un pas raide se lisse dans une transition douce et les gradients disparaissent progressivement. Si vous apprenez FIPY, Diffusion est \u00e9galement l&rsquo;un des meilleurs points de d\u00e9part car il s&rsquo;int\u00e8gre parfaitement au flux de travail de Fipy&nbsp;: <em>Mesh \u2192 Variable \u2192 \u00c9quation \u2192 Boucle temporelle \u2192 Visualisation<\/em>.<\/p>\n<p>Dans ce guide, vous allez r\u00e9soudre l&rsquo;\u00e9quation de diffusion dans Fipy \u00e0 partir de z\u00e9ro, ex\u00e9cuter une simulation 1D compl\u00e8te que vous pouvez modifier en toute s\u00e9curit\u00e9, apprendre \u00e0 interpr\u00e9ter la sortie, puis voir comment la m\u00eame configuration s&rsquo;\u00e9tend \u00e0 la 2D. L&rsquo;objectif est la confiance pratique&nbsp;: vous devriez \u00eatre en mesure de modifier la r\u00e9solution, le pas de temps, la vitesse de diffusion et les conditions aux limites sans casser le mod\u00e8le.<\/p>\n<h2>Ce que signifie la diffusion (sans les calculs lourds)<\/h2>\n<p>La diffusion d\u00e9crit comment quelque chose se propage en raison des diff\u00e9rences de concentration (ou de temp\u00e9rature). La chaleur se r\u00e9pand \u00e0 travers une tige. Une goutte de colorant se r\u00e9pand dans l&rsquo;eau. Math\u00e9matiquement, nous \u00e9crivons souvent la diffusion sous cette forme :<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = \u2207\u00b7(D \u2207\u03c6)<\/code><\/pre>\n<p>Ici <code>\u03c6<\/code> est le champ qui vous int\u00e9resse (temp\u00e9rature, concentration, etc.). Le coefficient <code>D<\/code> contr\u00f4le la rapidit\u00e9 avec laquelle la diffusion se produit. Plus grand <code>D<\/code> signifie que le profil se lisse plus rapidement.<\/p>\n<p>Les conditions aux limites sont importantes car les PDE ont besoin de r\u00e8gles sur les bords du domaine. Pour un premier cycle de diffusion, les fronti\u00e8res \u00ab sans flux \u00bb sont courantes : rien ne sort du domaine. Cela rend l&rsquo;\u00e9volution facile \u00e0 interpr\u00e9ter car le syst\u00e8me n&rsquo;est pas forc\u00e9 par les fronti\u00e8res.<\/p>\n<h2>Comment Fipy repr\u00e9sente la diffusion<\/h2>\n<p>FIPY r\u00e9sout les PDE \u00e0 l&rsquo;aide de la m\u00e9thode du volume fini (FVM). Vous pouvez consid\u00e9rer votre domaine comme \u00e9tant divis\u00e9 en petites cellules. Le champ inconnu vit sur ces cellules (g\u00e9n\u00e9ralement aux centres cellulaires). La diffusion est mise en \u0153uvre sous forme de flux entre les cellules voisines&nbsp;: les valeurs \u00e9lev\u00e9es poussent le flux vers de faibles valeurs jusqu&rsquo;\u00e0 ce que le profil se lisse.<\/p>\n<p>Les blocs de construction FIPY pratiques sont :<\/p>\n<ul>\n<li><code>Mesh<\/code> \u2014 La g\u00e9om\u00e9trie et la r\u00e9solution (grille 1D ou 2D)<\/li>\n<li><code>CellVariable<\/code> \u2014 Le champ <code>\u03c6<\/code> que vous r\u00e9solvez pour<\/li>\n<li><code>TransientTerm()<\/code> \u2014 La d\u00e9riv\u00e9e temporelle \u2202\u03c6\/\u2202t<\/li>\n<li><code>DiffusionTerm(coeff=D)<\/code> \u2014 L&rsquo;op\u00e9rateur de diffusion<\/li>\n<li>Une boucle temporelle \u2014 R\u00e9solvez \u00e0 plusieurs reprises avec <code>dt<\/code> et visualisez les instantan\u00e9s<\/li>\n<\/ul>\n<h2>Avant de commencer : liste de contr\u00f4le minimale de l&rsquo;environnement<\/h2>\n<p>Vous avez besoin de Python Plus Fipy et d&rsquo;une biblioth\u00e8que de tra\u00e7age. Si vous utilisez des ordinateurs portables, le m\u00eame code fonctionne ; Ex\u00e9cutez simplement les cellules dans l&rsquo;ordre.<\/p>\n<ul>\n<li>Python install\u00e9 (une version moderne est recommand\u00e9e)<\/li>\n<li>Un environnement virtuel (recommand\u00e9)<\/li>\n<li>Fipy install\u00e9 (et ses d\u00e9pendances num\u00e9riques)<\/li>\n<li>matplotlib install\u00e9 pour le tra\u00e7age<\/li>\n<\/ul>\n<h2>Premier exemple de travail : diffusion 1D<\/h2>\n<p>Nous mod\u00e9liserons la diffusion sur un domaine 1D de 0 \u00e0 1 \u00e0 l&rsquo;aide d&rsquo;une grille uniforme. La condition initiale sera une \u00e9tape&nbsp;:<br \/> <code>\u03c6 = 1<\/code> sur la moiti\u00e9 gauche et <code>\u03c6 = 0<\/code> sur la moiti\u00e9 droite. La diffusion apaisera cette discontinuit\u00e9 dans le temps.<\/p>\n<p>Le code ci-dessous est un script complet que vous pouvez ex\u00e9cuter tel quel.<\/p>\n<pre><code># Solving Diffusion Equations with FiPy: 1D Example\n# Save as: diffusion_1d_fipy.py\n\nfrom fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\n# --- 1) Mesh setup ---\nnx = 200\ndx = 1.0 \/ nx\nmesh = Grid1D(nx=nx, dx=dx)\n\n# --- 2) Variable (field) ---\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\n# Initial condition: step (left half = 1, right half = 0)\nx = mesh.cellCenters[0]\nphi.setValue(1.0, where=(x &lt; 0.5))\n\n# --- 3) Diffusion equation ---\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\n# --- 4) Time stepping ---\ndt = 1e-4\nsteps = 2000\n\nsnapshots = []\ntimes = []\ncapture_at = {0, 50, 200, 800, 2000}\n\nfor step in range(steps + 1):\n    if step in capture_at:\n        snapshots.append(phi.value.copy())\n        times.append(step * dt)\n\n    eq.solve(var=phi, dt=dt)\n\n# --- 5) Plot ---\nplt.figure()\nfor y, t in zip(snapshots, times):\n    plt.plot(x.value, y, label=f\"t = {t:.4f}\")\n\nplt.xlabel(\"x\")\nplt.ylabel(\"phi\")\nplt.title(\"1D Diffusion in FiPy\")\nplt.legend()\nplt.show()<\/code><\/pre>\n<h2>Ce que fait chaque bloc (afin que vous puissiez le modifier en toute s\u00e9curit\u00e9)<\/h2>\n<h3>Mesh&nbsp;: votre domaine et votre r\u00e9solution<\/h3>\n<p><code>Grid1D(nx=nx, dx=dx)<\/code> Cr\u00e9e une ligne divis\u00e9e en <code>nx<\/code> cellules. Plus petit <code>dx<\/code> (plus grand <code>nx<\/code>) donne plus de d\u00e9tails mais co\u00fbte plus cher. La longueur de votre domaine est \u00e0 peu pr\u00e8s <code>nx * dx<\/code>.<\/p>\n<h3>CellVariable&nbsp;: le champ pour lequel vous r\u00e9solvez<\/h3>\n<p><code>phi<\/code> est stock\u00e9 dans les centres de cellules. Vous commencez avec une condition initiale en utilisant <code>setValue()<\/code>. Avec Diffusion, cette forme initiale est ce que vous regardez se d\u00e9tendre au fil du temps.<\/p>\n<h3>L&rsquo;\u00e9quation : le changement de temps est \u00e9gal \u00e0 la diffusion<\/h3>\n<p>Cette ligne d\u00e9finit la PDE de diffusion dans la syntaxe de terme de FIPY&nbsp;:<\/p>\n<pre><code>TransientTerm() == DiffusionTerm(coeff=D)<\/code><\/pre>\n<p><code>D<\/code> contr\u00f4le la rapidit\u00e9 avec laquelle l&rsquo;\u00e9tape se lisse. Si vous augmentez <code>D<\/code>, vous devriez voir la zone de transition s&rsquo;\u00e9largir plus rapidement.<\/p>\n<h3>La boucle temporelle&nbsp;: avancer<\/h3>\n<p>Chaque appel \u00e0 <code>eq.solve(var=phi, dt=dt)<\/code> fait avancer la solution d&rsquo;un pas de temps. Nous capturons quelques instantan\u00e9s afin que vous puissiez voir l&rsquo;\u00e9volution sans tracer chaque \u00e9tape.<\/p>\n<h2>Comment savoir si votre diffusion est correcte<\/h2>\n<p>Avec une condition initiale d&rsquo;\u00e9tape, la diffusion devrait cr\u00e9er une r\u00e9gion de transition douce qui s&rsquo;\u00e9largit progressivement. Le saut aigu doit s&rsquo;adoucir et la courbe devrait devenir moins raide au fil du temps.<\/p>\n<ul>\n<li>Si le profil ne change pas&nbsp;: votre boucle peut ne pas fonctionner comme pr\u00e9vu, ou <code>dt<\/code> et <code>steps<\/code> produisent trop peu de temps total.<\/li>\n<li>Si le profil devient bruyant ou \u00ab explose \u00bb : r\u00e9duisez <code>dt<\/code>, augmentez la r\u00e9solution ou simplifiez les limites.<\/li>\n<li>Si tout semble d\u00e9cal\u00e9 ou coup\u00e9 : v\u00e9rifiez votre condition initiale et confirmez que l&rsquo;axe des x correspond \u00e0 votre domaine.<\/li>\n<\/ul>\n<h2>Choisir DT et DX : Conseils pratiques sur la stabilit\u00e9 et la pr\u00e9cision<\/h2>\n<p>M\u00eame si le code s&rsquo;ex\u00e9cute, les choix de param\u00e8tres affectent la qualit\u00e9 et l&rsquo;ex\u00e9cution. Trois ajustements couvrent la plupart des probl\u00e8mes de \u00ab premier mod\u00e8le \u00bb :<\/p>\n<ul>\n<li>R\u00e9duisez <code>dt<\/code> si l&rsquo;\u00e9volution semble trop nerveuse, bruyante ou incoh\u00e9rente entre les courses. Un test rapide consiste \u00e0 r\u00e9duire de moiti\u00e9 <code>dt<\/code> et \u00e0 doubler <code>steps<\/code> afin que le temps simul\u00e9 total reste similaire.<\/li>\n<li>Augmenter <code>nx<\/code> si la courbe semble irr\u00e9guli\u00e8re ou si la zone de transition est mal r\u00e9solue. Plus de cellules signifie g\u00e9n\u00e9ralement des profils plus lisses et de meilleurs gradients, \u00e0 un co\u00fbt de calcul plus \u00e9lev\u00e9.<\/li>\n<li>Traitez plus grand <code>D<\/code> comme un \u00ab&nbsp;syst\u00e8me plus rapide&nbsp;\u00bb. Si la diffusion est forte, vous avez g\u00e9n\u00e9ralement besoin d&rsquo;un <code>dt <\/code>(ou du moins pour v\u00e9rifier que les r\u00e9sultats ne changent pas lorsque vous affinez le temps).<\/li>\n<\/ul>\n<p>Une habitude simple qui emp\u00eache la confusion&nbsp;: chaque fois que vous modifiez <code>dt<\/code> ou <code>nx<\/code>, r\u00e9ex\u00e9cutez et comparez deux&nbsp;ex\u00e9cutions (grossi\u00e8re ou raffin\u00e9e). Si les courbes sont fondamentalement les m\u00eames, vous \u00eates dans un bon r\u00e9gime d&rsquo;apprentissage et d&rsquo;it\u00e9ration.<\/p>\n<h2>Six exp\u00e9riences rapides qui vous enseignent la diffusion rapidement<\/h2>\n<ol>\n<li>Modifier la vitesse de diffusion&nbsp;: essayez <code>D = 0.1<\/code> et <code>D = 5.0<\/code> et comparez la rapidit\u00e9 avec laquelle l&rsquo;\u00e9tape se d\u00e9tend.<\/li>\n<li>Augmenter la r\u00e9solution&nbsp;: modifiez <code>nx<\/code> de 200 \u00e0 400&nbsp;et voir \u00e0 quoi ressemble la r\u00e9gion de transition.<\/li>\n<li>Essayez une bosse au lieu d&rsquo;une \u00e9tape&nbsp;: d\u00e9finissez <code>phi = 1<\/code> uniquement dans une r\u00e9gion \u00e9troite et regardez-la se propager de mani\u00e8re sym\u00e9trique.<\/li>\n<li>Capturez plus d&rsquo;instantan\u00e9s&nbsp;: ajoutez plus d&rsquo;indices \u00e0 <code>capture_at<\/code> pour voir l&rsquo;\u00e9volution de mani\u00e8re plus d\u00e9taill\u00e9e.<\/li>\n<li>Ex\u00e9cutez plus longtemps&nbsp;: augmentez <code>steps<\/code> et confirmez que le profil devient plus uniforme au fil du temps.<\/li>\n<li>Enregistrer la sortie&nbsp;: ajouter <code>plt.savefig(\"diffusion_1d.png\", dpi=200)<\/code> avant <code>plt.show()<\/code>.<\/li>\n<\/ol>\n<h2>Mise \u00e0 niveau vers la diffusion 2D (changement minimal, gros gain)<\/h2>\n<p>Une fois que 1D se sent \u00e0 l&rsquo;aise, le passage \u00e0 la 2D consiste principalement \u00e0 modifier le maillage et la visualisation. La structure de l&rsquo;\u00e9quation reste la m\u00eame. En 2D, vous commencerez g\u00e9n\u00e9ralement par un \u00ab\u00a0spot\u00a0\u00bb (valeur \u00e9lev\u00e9e dans une petite r\u00e9gion) et vous le regarderez s&rsquo;\u00e9taler dans une goutte lisse.<\/p>\n<pre><code># 2D Diffusion sketch (core ideas)\nfrom fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\nnx = ny = 100\ndx = dy = 1.0 \/ nx\nmesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)\n\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\nx, y = mesh.cellCenters\nphi.setValue(1.0, where=((x - 0.5)**2 + (y - 0.5)**2 &lt; 0.05**2))\n\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\ndt = 1e-4\nfor _ in range(500):\n    eq.solve(var=phi, dt=dt)\n\n# Visualize as an image\nplt.figure()\nplt.imshow(phi.value.reshape((ny, nx)), origin=\"lower\")\nplt.colorbar(label=\"phi\")\nplt.title(\"2D Diffusion in FiPy\")\nplt.show()<\/code><\/pre>\n<p>Deux notes pratiques pour la 2D&nbsp;: premi\u00e8rement, il peut \u00eatre nettement plus lent que 1D car le nombre de cellules augmente comme <code>nx * ny<\/code>. Deuxi\u00e8mement, les trac\u00e9s d&rsquo;images d\u00e9pendent du remodelage&nbsp;; Gardez votre <code>(ny, nx)<\/code> coh\u00e9rent.<\/p>\n<h2>D\u00e9pannage&nbsp;: probl\u00e8mes courants pour la premi\u00e8re fois<\/h2>\n<h3>Importer des erreurs ou des packages manquants<\/h3>\n<ul>\n<li>Confirmez que FIPY est install\u00e9 dans le m\u00eame environnement o\u00f9 vous ex\u00e9cutez le script.<\/li>\n<li>Dans les ordinateurs portables, v\u00e9rifiez que le noyau pointe vers le bon interpr\u00e9teur.<\/li>\n<li>V\u00e9rifiez que MATPlotlib importe proprement.<\/li>\n<\/ul>\n<h3>La courbe ne change pas<\/h3>\n<ul>\n<li>Augmenter le temps total simul\u00e9&nbsp;: augmenter <code>steps<\/code> ou <code>dt<\/code> l\u00e9g\u00e8rement (attentivement).<\/li>\n<li>Assurez-vous que les instantan\u00e9s incluent des \u00e9tapes ult\u00e9rieures, pas seulement le d\u00e9but.<\/li>\n<li>Confirmez que vous appelez r\u00e9ellement <code>eq.solve()<\/code> dans la boucle.<\/li>\n<\/ul>\n<h3>La solution semble instable ou bruyante<\/h3>\n<ul>\n<li>R\u00e9duire <code>dt<\/code> (par exemple, de <code>1e-4<\/code> \u00e0 <code>5e-5<\/code>).<\/li>\n<li>Augmentez la r\u00e9solution (<code>nx<\/code>) pour mieux r\u00e9soudre les gradients.<\/li>\n<li>Testez un <code>D<\/code> plus petit pour r\u00e9duire la vitesse d&rsquo;\u00e9volution lors de l&rsquo;apprentissage.<\/li>\n<\/ul>\n<h3>C&rsquo;est trop lent<\/h3>\n<ul>\n<li>Commencez avec moins de cellules, puis augmentez progressivement une fois que le flux de travail est clair.<\/li>\n<li>Capturez moins d&rsquo;instantan\u00e9s et tracez moins fr\u00e9quemment.<\/li>\n<li>En 2D, r\u00e9duisez <code>nx<\/code> et <code>ny<\/code> tout en exp\u00e9rimentant la configuration.<\/li>\n<\/ul>\n<h2>Conclusion&nbsp;: le mod\u00e8le de diffusion que vous r\u00e9utiliserez partout<\/h2>\n<p>La r\u00e9solution de la diffusion dans Fipy enseigne une structure r\u00e9p\u00e9table que vous utiliserez pour de nombreux mod\u00e8les PDE. Une fois que vous \u00eates \u00e0 l&rsquo;aise avec la fa\u00e7on dont <code>Grid1D\/Grid2D<\/code>, <code>CellVariable<\/code>, <code>TransientTerm<\/code> et <code>DiffusionTerm<\/code> se connectent, vous pouvez \u00e9tendre le m\u00eame flux de travail \u00e0 Convection&nbsp;\u2013&nbsp;Diffusion, r\u00e9action-diffusion, sources et puits, param\u00e8tre balayages et v\u00e9rifications de validation.<\/p>\n<p>Si vous voulez la boucle d&rsquo;apprentissage la plus rapide, effectuez une modification \u00e0 la fois\u2014<code>D<\/code>, <code>nx<\/code>, <code>dt<\/code>, ou la condition initiale \u2014 r\u00e9ex\u00e9cute, et explique ce qui a chang\u00e9 et pourquoi. Cette habitude est ce qui transforme la diffusion d&rsquo;une d\u00e9mo en un outil auquel vous pouvez avoir confiance.<\/p>\n","protected":false,"raw":"<p>La diffusion est l'une des \u00e9quations diff\u00e9rentielles partielles les plus intuitives que vous pouvez simuler&nbsp;: un pic net se r\u00e9pand, un pas raide se lisse dans une transition douce et les gradients disparaissent progressivement. Si vous apprenez FIPY, Diffusion est \u00e9galement l'un des meilleurs points de d\u00e9part car il s'int\u00e8gre parfaitement au flux de travail de Fipy&nbsp;: <em>Mesh \u2192 Variable \u2192 \u00c9quation \u2192 Boucle temporelle \u2192 Visualisation<\/em>.<\/p>\n<p>Dans ce guide, vous allez r\u00e9soudre l'\u00e9quation de diffusion dans Fipy \u00e0 partir de z\u00e9ro, ex\u00e9cuter une simulation 1D compl\u00e8te que vous pouvez modifier en toute s\u00e9curit\u00e9, apprendre \u00e0 interpr\u00e9ter la sortie, puis voir comment la m\u00eame configuration s'\u00e9tend \u00e0 la 2D. L'objectif est la confiance pratique&nbsp;: vous devriez \u00eatre en mesure de modifier la r\u00e9solution, le pas de temps, la vitesse de diffusion et les conditions aux limites sans casser le mod\u00e8le.<\/p>\n<h2>Ce que signifie la diffusion (sans les calculs lourds)<\/h2>\n<p>La diffusion d\u00e9crit comment quelque chose se propage en raison des diff\u00e9rences de concentration (ou de temp\u00e9rature). La chaleur se r\u00e9pand \u00e0 travers une tige. Une goutte de colorant se r\u00e9pand dans l'eau. Math\u00e9matiquement, nous \u00e9crivons souvent la diffusion sous cette forme :<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = \u2207\u00b7(D \u2207\u03c6)<\/code><\/pre>\n<p>Ici <code>\u03c6<\/code> est le champ qui vous int\u00e9resse (temp\u00e9rature, concentration, etc.). Le coefficient <code>D<\/code> contr\u00f4le la rapidit\u00e9 avec laquelle la diffusion se produit. Plus grand <code>D<\/code> signifie que le profil se lisse plus rapidement.<\/p>\n<p>Les conditions aux limites sont importantes car les PDE ont besoin de r\u00e8gles sur les bords du domaine. Pour un premier cycle de diffusion, les fronti\u00e8res \u00ab sans flux \u00bb sont courantes : rien ne sort du domaine. Cela rend l'\u00e9volution facile \u00e0 interpr\u00e9ter car le syst\u00e8me n'est pas forc\u00e9 par les fronti\u00e8res.<\/p>\n<h2>Comment Fipy repr\u00e9sente la diffusion<\/h2>\n<p>FIPY r\u00e9sout les PDE \u00e0 l'aide de la m\u00e9thode du volume fini (FVM). Vous pouvez consid\u00e9rer votre domaine comme \u00e9tant divis\u00e9 en petites cellules. Le champ inconnu vit sur ces cellules (g\u00e9n\u00e9ralement aux centres cellulaires). La diffusion est mise en \u0153uvre sous forme de flux entre les cellules voisines&nbsp;: les valeurs \u00e9lev\u00e9es poussent le flux vers de faibles valeurs jusqu'\u00e0 ce que le profil se lisse.<\/p>\n<p>Les blocs de construction FIPY pratiques sont :<\/p>\n<ul>\n<li><code>Mesh<\/code> \u2014 La g\u00e9om\u00e9trie et la r\u00e9solution (grille 1D ou 2D)<\/li>\n<li><code>CellVariable<\/code> \u2014 Le champ <code>\u03c6<\/code> que vous r\u00e9solvez pour<\/li>\n<li><code>TransientTerm()<\/code> \u2014 La d\u00e9riv\u00e9e temporelle \u2202\u03c6\/\u2202t<\/li>\n<li><code>DiffusionTerm(coeff=D)<\/code> \u2014 L'op\u00e9rateur de diffusion<\/li>\n<li>Une boucle temporelle \u2014 R\u00e9solvez \u00e0 plusieurs reprises avec <code>dt<\/code> et visualisez les instantan\u00e9s<\/li>\n<\/ul>\n<h2>Avant de commencer : liste de contr\u00f4le minimale de l'environnement<\/h2>\n<p>Vous avez besoin de Python Plus Fipy et d'une biblioth\u00e8que de tra\u00e7age. Si vous utilisez des ordinateurs portables, le m\u00eame code fonctionne ; Ex\u00e9cutez simplement les cellules dans l'ordre.<\/p>\n<ul>\n<li>Python install\u00e9 (une version moderne est recommand\u00e9e)<\/li>\n<li>Un environnement virtuel (recommand\u00e9)<\/li>\n<li>Fipy install\u00e9 (et ses d\u00e9pendances num\u00e9riques)<\/li>\n<li>matplotlib install\u00e9 pour le tra\u00e7age<\/li>\n<\/ul>\n<h2>Premier exemple de travail : diffusion 1D<\/h2>\n<p>Nous mod\u00e9liserons la diffusion sur un domaine 1D de 0 \u00e0 1 \u00e0 l'aide d'une grille uniforme. La condition initiale sera une \u00e9tape&nbsp;:<br> <code>\u03c6 = 1<\/code> sur la moiti\u00e9 gauche et <code>\u03c6 = 0<\/code> sur la moiti\u00e9 droite. La diffusion apaisera cette discontinuit\u00e9 dans le temps.<\/p>\n<p>Le code ci-dessous est un script complet que vous pouvez ex\u00e9cuter tel quel.<\/p>\n<pre><code># Solving Diffusion Equations with FiPy: 1D Example\n# Save as: diffusion_1d_fipy.py\n\nfrom fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\n# --- 1) Mesh setup ---\nnx = 200\ndx = 1.0 \/ nx\nmesh = Grid1D(nx=nx, dx=dx)\n\n# --- 2) Variable (field) ---\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\n# Initial condition: step (left half = 1, right half = 0)\nx = mesh.cellCenters[0]\nphi.setValue(1.0, where=(x &lt; 0.5))\n\n# --- 3) Diffusion equation ---\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\n# --- 4) Time stepping ---\ndt = 1e-4\nsteps = 2000\n\nsnapshots = []\ntimes = []\ncapture_at = {0, 50, 200, 800, 2000}\n\nfor step in range(steps + 1):\n    if step in capture_at:\n        snapshots.append(phi.value.copy())\n        times.append(step * dt)\n\n    eq.solve(var=phi, dt=dt)\n\n# --- 5) Plot ---\nplt.figure()\nfor y, t in zip(snapshots, times):\n    plt.plot(x.value, y, label=f\"t = {t:.4f}\")\n\nplt.xlabel(\"x\")\nplt.ylabel(\"phi\")\nplt.title(\"1D Diffusion in FiPy\")\nplt.legend()\nplt.show()<\/code><\/pre>\n<h2>Ce que fait chaque bloc (afin que vous puissiez le modifier en toute s\u00e9curit\u00e9)<\/h2>\n<h3>Mesh&nbsp;: votre domaine et votre r\u00e9solution<\/h3>\n<p><code>Grid1D(nx=nx, dx=dx)<\/code> Cr\u00e9e une ligne divis\u00e9e en <code>nx<\/code> cellules. Plus petit <code>dx<\/code> (plus grand <code>nx<\/code>) donne plus de d\u00e9tails mais co\u00fbte plus cher. La longueur de votre domaine est \u00e0 peu pr\u00e8s <code>nx * dx<\/code>.<\/p>\n<h3>CellVariable&nbsp;: le champ pour lequel vous r\u00e9solvez<\/h3>\n<p><code>phi<\/code> est stock\u00e9 dans les centres de cellules. Vous commencez avec une condition initiale en utilisant <code>setValue()<\/code>. Avec Diffusion, cette forme initiale est ce que vous regardez se d\u00e9tendre au fil du temps.<\/p>\n<h3>L'\u00e9quation : le changement de temps est \u00e9gal \u00e0 la diffusion<\/h3>\n<p>Cette ligne d\u00e9finit la PDE de diffusion dans la syntaxe de terme de FIPY&nbsp;:<\/p>\n<pre><code>TransientTerm() == DiffusionTerm(coeff=D)<\/code><\/pre>\n<p><code>D<\/code> contr\u00f4le la rapidit\u00e9 avec laquelle l'\u00e9tape se lisse. Si vous augmentez <code>D<\/code>, vous devriez voir la zone de transition s'\u00e9largir plus rapidement.<\/p>\n<h3>La boucle temporelle&nbsp;: avancer<\/h3>\n<p>Chaque appel \u00e0 <code>eq.solve(var=phi, dt=dt)<\/code> fait avancer la solution d'un pas de temps. Nous capturons quelques instantan\u00e9s afin que vous puissiez voir l'\u00e9volution sans tracer chaque \u00e9tape.<\/p>\n<h2>Comment savoir si votre diffusion est correcte<\/h2>\n<p>Avec une condition initiale d'\u00e9tape, la diffusion devrait cr\u00e9er une r\u00e9gion de transition douce qui s'\u00e9largit progressivement. Le saut aigu doit s'adoucir et la courbe devrait devenir moins raide au fil du temps.<\/p>\n<ul>\n<li>Si le profil ne change pas&nbsp;: votre boucle peut ne pas fonctionner comme pr\u00e9vu, ou <code>dt<\/code> et <code>steps<\/code> produisent trop peu de temps total.<\/li>\n<li>Si le profil devient bruyant ou \u00ab explose \u00bb : r\u00e9duisez <code>dt<\/code>, augmentez la r\u00e9solution ou simplifiez les limites.<\/li>\n<li>Si tout semble d\u00e9cal\u00e9 ou coup\u00e9 : v\u00e9rifiez votre condition initiale et confirmez que l'axe des x correspond \u00e0 votre domaine.<\/li>\n<\/ul>\n<h2>Choisir DT et DX : Conseils pratiques sur la stabilit\u00e9 et la pr\u00e9cision<\/h2>\n<p>M\u00eame si le code s'ex\u00e9cute, les choix de param\u00e8tres affectent la qualit\u00e9 et l'ex\u00e9cution. Trois ajustements couvrent la plupart des probl\u00e8mes de \u00ab premier mod\u00e8le \u00bb :<\/p>\n<ul>\n<li>R\u00e9duisez <code>dt<\/code> si l'\u00e9volution semble trop nerveuse, bruyante ou incoh\u00e9rente entre les courses. Un test rapide consiste \u00e0 r\u00e9duire de moiti\u00e9 <code>dt<\/code> et \u00e0 doubler <code>steps<\/code> afin que le temps simul\u00e9 total reste similaire.<\/li>\n<li>Augmenter <code>nx<\/code> si la courbe semble irr\u00e9guli\u00e8re ou si la zone de transition est mal r\u00e9solue. Plus de cellules signifie g\u00e9n\u00e9ralement des profils plus lisses et de meilleurs gradients, \u00e0 un co\u00fbt de calcul plus \u00e9lev\u00e9.<\/li>\n<li>Traitez plus grand <code>D<\/code> comme un \u00ab&nbsp;syst\u00e8me plus rapide&nbsp;\u00bb. Si la diffusion est forte, vous avez g\u00e9n\u00e9ralement besoin d'un <code>dt <\/code>(ou du moins pour v\u00e9rifier que les r\u00e9sultats ne changent pas lorsque vous affinez le temps).<\/li>\n<\/ul>\n<p>Une habitude simple qui emp\u00eache la confusion&nbsp;: chaque fois que vous modifiez <code>dt<\/code> ou <code>nx<\/code>, r\u00e9ex\u00e9cutez et comparez deux&nbsp;ex\u00e9cutions (grossi\u00e8re ou raffin\u00e9e). Si les courbes sont fondamentalement les m\u00eames, vous \u00eates dans un bon r\u00e9gime d'apprentissage et d'it\u00e9ration.<\/p>\n<h2>Six exp\u00e9riences rapides qui vous enseignent la diffusion rapidement<\/h2>\n<ol>\n<li>Modifier la vitesse de diffusion&nbsp;: essayez <code>D = 0.1<\/code> et <code>D = 5.0<\/code> et comparez la rapidit\u00e9 avec laquelle l'\u00e9tape se d\u00e9tend.<\/li>\n<li>Augmenter la r\u00e9solution&nbsp;: modifiez <code>nx<\/code> de 200 \u00e0 400&nbsp;et voir \u00e0 quoi ressemble la r\u00e9gion de transition.<\/li>\n<li>Essayez une bosse au lieu d'une \u00e9tape&nbsp;: d\u00e9finissez <code>phi = 1<\/code> uniquement dans une r\u00e9gion \u00e9troite et regardez-la se propager de mani\u00e8re sym\u00e9trique.<\/li>\n<li>Capturez plus d'instantan\u00e9s&nbsp;: ajoutez plus d'indices \u00e0 <code>capture_at<\/code> pour voir l'\u00e9volution de mani\u00e8re plus d\u00e9taill\u00e9e.<\/li>\n<li>Ex\u00e9cutez plus longtemps&nbsp;: augmentez <code>steps<\/code> et confirmez que le profil devient plus uniforme au fil du temps.<\/li>\n<li>Enregistrer la sortie&nbsp;: ajouter <code>plt.savefig(\"diffusion_1d.png\", dpi=200)<\/code> avant <code>plt.show()<\/code>.<\/li>\n<\/ol>\n<h2>Mise \u00e0 niveau vers la diffusion 2D (changement minimal, gros gain)<\/h2>\n<p>Une fois que 1D se sent \u00e0 l'aise, le passage \u00e0 la 2D consiste principalement \u00e0 modifier le maillage et la visualisation. La structure de l'\u00e9quation reste la m\u00eame. En 2D, vous commencerez g\u00e9n\u00e9ralement par un \"spot\" (valeur \u00e9lev\u00e9e dans une petite r\u00e9gion) et vous le regarderez s'\u00e9taler dans une goutte lisse.<\/p>\n<pre><code># 2D Diffusion sketch (core ideas)\nfrom fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\nnx = ny = 100\ndx = dy = 1.0 \/ nx\nmesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)\n\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\nx, y = mesh.cellCenters\nphi.setValue(1.0, where=((x - 0.5)**2 + (y - 0.5)**2 &lt; 0.05**2))\n\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\ndt = 1e-4\nfor _ in range(500):\n    eq.solve(var=phi, dt=dt)\n\n# Visualize as an image\nplt.figure()\nplt.imshow(phi.value.reshape((ny, nx)), origin=\"lower\")\nplt.colorbar(label=\"phi\")\nplt.title(\"2D Diffusion in FiPy\")\nplt.show()<\/code><\/pre>\n<p>Deux notes pratiques pour la 2D&nbsp;: premi\u00e8rement, il peut \u00eatre nettement plus lent que 1D car le nombre de cellules augmente comme <code>nx * ny<\/code>. Deuxi\u00e8mement, les trac\u00e9s d'images d\u00e9pendent du remodelage&nbsp;; Gardez votre <code>(ny, nx)<\/code> coh\u00e9rent.<\/p>\n<h2>D\u00e9pannage&nbsp;: probl\u00e8mes courants pour la premi\u00e8re fois<\/h2>\n<h3>Importer des erreurs ou des packages manquants<\/h3>\n<ul>\n<li>Confirmez que FIPY est install\u00e9 dans le m\u00eame environnement o\u00f9 vous ex\u00e9cutez le script.<\/li>\n<li>Dans les ordinateurs portables, v\u00e9rifiez que le noyau pointe vers le bon interpr\u00e9teur.<\/li>\n<li>V\u00e9rifiez que MATPlotlib importe proprement.<\/li>\n<\/ul>\n<h3>La courbe ne change pas<\/h3>\n<ul>\n<li>Augmenter le temps total simul\u00e9&nbsp;: augmenter <code>steps<\/code> ou <code>dt<\/code> l\u00e9g\u00e8rement (attentivement).<\/li>\n<li>Assurez-vous que les instantan\u00e9s incluent des \u00e9tapes ult\u00e9rieures, pas seulement le d\u00e9but.<\/li>\n<li>Confirmez que vous appelez r\u00e9ellement <code>eq.solve()<\/code> dans la boucle.<\/li>\n<\/ul>\n<h3>La solution semble instable ou bruyante<\/h3>\n<ul>\n<li>R\u00e9duire <code>dt<\/code> (par exemple, de <code>1e-4<\/code> \u00e0 <code>5e-5<\/code>).<\/li>\n<li>Augmentez la r\u00e9solution (<code>nx<\/code>) pour mieux r\u00e9soudre les gradients.<\/li>\n<li>Testez un <code>D<\/code> plus petit pour r\u00e9duire la vitesse d'\u00e9volution lors de l'apprentissage.<\/li>\n<\/ul>\n<h3>C'est trop lent<\/h3>\n<ul>\n<li>Commencez avec moins de cellules, puis augmentez progressivement une fois que le flux de travail est clair.<\/li>\n<li>Capturez moins d'instantan\u00e9s et tracez moins fr\u00e9quemment.<\/li>\n<li>En 2D, r\u00e9duisez <code>nx<\/code> et <code>ny<\/code> tout en exp\u00e9rimentant la configuration.<\/li>\n<\/ul>\n<h2>Conclusion&nbsp;: le mod\u00e8le de diffusion que vous r\u00e9utiliserez partout<\/h2>\n<p>La r\u00e9solution de la diffusion dans Fipy enseigne une structure r\u00e9p\u00e9table que vous utiliserez pour de nombreux mod\u00e8les PDE. Une fois que vous \u00eates \u00e0 l'aise avec la fa\u00e7on dont <code>Grid1D\/Grid2D<\/code>, <code>CellVariable<\/code>, <code>TransientTerm<\/code> et <code>DiffusionTerm<\/code> se connectent, vous pouvez \u00e9tendre le m\u00eame flux de travail \u00e0 Convection&nbsp;\u2013&nbsp;Diffusion, r\u00e9action-diffusion, sources et puits, param\u00e8tre balayages et v\u00e9rifications de validation.<\/p>\n<p>Si vous voulez la boucle d'apprentissage la plus rapide, effectuez une modification \u00e0 la fois\u2014<code>D<\/code>, <code>nx<\/code>, <code>dt<\/code>, ou la condition initiale \u2014 r\u00e9ex\u00e9cute, et explique ce qui a chang\u00e9 et pourquoi. Cette habitude est ce qui transforme la diffusion d'une d\u00e9mo en un outil auquel vous pouvez avoir confiance.<\/p>\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\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>La diffusion est l&rsquo;une des \u00e9quations diff\u00e9rentielles partielles les plus intuitives que vous pouvez simuler&nbsp;: un pic net se r\u00e9pand, un pas raide se lisse dans une transition douce et les gradients disparaissent progressivement. Si vous apprenez FIPY, Diffusion est \u00e9galement l&rsquo;un des meilleurs points de d\u00e9part car il s&rsquo;int\u00e8gre parfaitement au flux de travail [&hellip;]<\/p>\n","protected":false,"raw":""},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/new.matforge.org\/?p=59","iawp_total_views":1,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1171","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape<\/title>\n<meta name=\"description\" content=\"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.\" \/>\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\/solving-diffusion-equations-with-fipy\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape\" \/>\n<meta property=\"og:description\" content=\"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:25:43+00:00\" \/>\n<meta name=\"author\" content=\"Tomas Delgado\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"R\u00e9solution des \u00e9quations de diffusion avec Fipy\",\"datePublished\":\"2026-08-21T14:25:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/\"},\"wordCount\":1589,\"commentCount\":0,\"articleSection\":[\"FIPY : documentation, exemples &amp; D\u00e9veloppement\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/\",\"name\":\"R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:25:43+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/solving-diffusion-equations-with-fipy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"R\u00e9solution des \u00e9quations de diffusion avec Fipy\"}]},{\"@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\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"caption\":\"Tomas Delgado\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/tomas-delgado\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape","description":"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.","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\/solving-diffusion-equations-with-fipy\/","og_locale":"fr_FR","og_type":"article","og_title":"R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape","og_description":"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.","og_url":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:25:43+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Tomas Delgado","Dur\u00e9e de lecture estim\u00e9e":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"R\u00e9solution des \u00e9quations de diffusion avec Fipy","datePublished":"2026-08-21T14:25:43+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/"},"wordCount":1589,"commentCount":0,"articleSection":["FIPY : documentation, exemples &amp; D\u00e9veloppement"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/","url":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/","name":"R\u00e9soudre les \u00e9quations de diffusion avec Fipy : un guide pratique \u00e9tape par \u00e9tape","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:25:43+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Apprenez \u00e0 r\u00e9soudre des \u00e9quations de diffusion dans Fipy avec un exemple clair 1D, des conditions aux limites, des conseils de pas de temps, des contr\u00f4les de stabilit\u00e9 et un chemin facile vers des simulations 2D.","breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/solving-diffusion-equations-with-fipy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"R\u00e9solution des \u00e9quations de diffusion avec Fipy"}]},{"@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\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","caption":"Tomas Delgado"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/tomas-delgado\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1171","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1171"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1171\/revisions"}],"predecessor-version":[{"id":1332,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1171\/revisions\/1332"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}