{"id":1275,"date":"2026-08-21T14:31:31","date_gmt":"2026-08-21T14:31:31","guid":{"rendered":"https:\/\/matforge.org\/?p=1275","raw":"https:\/\/matforge.org\/?p=1275"},"modified":"2026-08-21T14:31:31","modified_gmt":"2026-08-21T14:31:31","slug":"student-project-ideas-computational-science-simulation","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/","title":{"rendered":"Id\u00e9es de projets d&rsquo;\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code","raw":"Id\u00e9es de projets d'\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code"},"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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><h2 id=\"key-takeaways\">Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Les id\u00e9es de projets organis\u00e9s couvrent les niveaux d\u00e9butants, interm\u00e9diaires et avanc\u00e9s, en mettant l&rsquo;accent sur la simulation et la science informatique.<\/li>\n<li>Les niveaux de difficult\u00e9 refl\u00e8tent les conditions pr\u00e9alables, la complexit\u00e9 des math\u00e9matiques et l&rsquo;investissement en temps attendu.<\/li>\n<li>Des mod\u00e8les de code sont inclus pour chaque projet afin que les \u00e9tudiants puissent commencer \u00e0 construire rapidement.<\/li>\n<li>Les r\u00e9sultats d&rsquo;apprentissage montrent ce que chaque projet enseigne.<\/li>\n<li>Une feuille de route des comp\u00e9tences aux projets aide les \u00e9l\u00e8ves \u00e0 choisir un projet en fonction de leurs connaissances actuelles.<\/li>\n<\/ul>\n<p>Les projets d&rsquo;\u00e9tudiants en sciences informatiques et en simulation sont ceux o\u00f9 la th\u00e9orie rencontre enfin le code. Vous pouvez apprendre des m\u00e9thodes de volume fini, des \u00e9quations aux d\u00e9riv\u00e9es partielles et des lois de conservation dans les conf\u00e9rences, mais les \u00e9quations sur un tableau blanc n&rsquo;enseignent pas \u00e0 quoi ressemble l&rsquo;\u00e9criture d&rsquo;un solveur \u00e0 partir de z\u00e9ro.<\/p>\n<p>Si vous voulez comprendre comment les m\u00e9thodes num\u00e9riques se traduisent par des simulations de travail, choisissez un projet et commencez \u00e0 construire.<\/p>\n<p>Ce guide organise des id\u00e9es de projets pratiques inspir\u00e9es de cours de physique informatique universitaires, de projets scientifiques open source et de r\u00e9f\u00e9rentiels entre pairs. Chaque projet utilise Python et construit vers quelque chose que les \u00e9tudiants peuvent inclure dans un portfolio.<\/p>\n<h2 id=\"difficulty-levels\">Niveaux de difficult\u00e9 du projet expliqu\u00e9s<\/h2>\n<p>Avant de choisir un projet, il est utile de comprendre ce que signifie chaque niveau en termes d&rsquo;effort.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Niveau<\/th>\n<th>Les pr\u00e9requis<\/th>\n<th>Heure pr\u00e9vue<\/th>\n<th>Que vas tu faire?<\/th>\n<\/tr>\n<tr>\n<td>D\u00e9butant<\/td>\n<td>Principes de base de Python, NumPy, Matplotlib<\/td>\n<td>2 \u00e0 4 semaines<\/td>\n<td>R\u00e9solvez des ODE ou des PDE simples avec des m\u00e9thodes explicites et visualisez les r\u00e9sultats<\/td>\n<\/tr>\n<tr>\n<td>Interm\u00e9diaire<\/td>\n<td>Analyse num\u00e9rique, alg\u00e8bre lin\u00e9aire, fond ODE\/PDE<\/td>\n<td>4 \u00e0 8 semaines<\/td>\n<td>Impl\u00e9mentez des solveurs, g\u00e9rez les conditions aux limites et comparez la pr\u00e9cision<\/td>\n<\/tr>\n<tr>\n<td>Avanc\u00e9e<\/td>\n<td>M\u00e9thodes num\u00e9riques avanc\u00e9es, calcul parall\u00e8le ou formation en physique sp\u00e9cialis\u00e9e<\/td>\n<td>8 \u00e0 16 semaines<\/td>\n<td>Cr\u00e9ez des simulations multi-physiques, optimisez les performances ou comparez avec les r\u00e9sultats de la litt\u00e9rature<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Le tableau n&rsquo;est pas un classement. C&rsquo;est un outil de correspondance. Choisissez un niveau qui correspond \u00e0 votre pr\u00e9paration actuelle, puis montez vers le haut une fois que vous \u00eates \u00e0 l&rsquo;aise.<\/p>\n<h2 id=\"skills-roadmap\">Feuille de route des comp\u00e9tences aux projets<\/h2>\n<p>La feuille de route ci-dessous montre quels concepts math\u00e9matiques et de programmation correspondent aux projets.<\/p>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Skill \/ Concept \u2502 Projects That Use It                                    \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Python basics   \u2502 Heat equation solver, SIR epidemic model, Lennard-Jones \u2502\n\u2502 NumPy arrays    \u2502 Wave propagation, diffusion on grid                     \u2502\n\u2502 ODE solvers     \u2502 SIR model, projectile with drag, Lotka-Volterra         \u2502\n\u2502 PDE basics      \u2502 Heat equation, wave equation, diffusion                 \u2502\n\u2502 Linear algebra  \u2502 Jacobi iteration, eigenvalue problems, Krylov methods   \u2502\n\u2502 Monte Carlo     \u2502 Ising model, radioactive decay, option pricing          \u2502\n\u2502 FFT \/ spectral  \u2502 Wave propagation, turbulence, spectral methods          \u2502\n\u2502 Parallelism     \u2502 MPI diffusion solver, GPU molecular dynamics            \u2502\n\u2502 Phase-field     \u2502 Solidification, fracture mechanics, grain boundary      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<h2 id=\"beginner-projects\">Projets d\u00e9butants<\/h2>\n<p>Ces projets introduisent des concepts de simulation de base sans \u00e9craser les math\u00e9matiques ou la configuration complexe. Ils sont con\u00e7us pour fonctionner sur un ordinateur portable sans mat\u00e9riel sp\u00e9cial.<\/p>\n<h3>1. Solveur d&rsquo;\u00e9quations de chaleur sur une grille<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br \/> Dur\u00e9e&nbsp;: 2 \u00e0 3&nbsp;semaines<\/p>\n<p>Ce que vous simulez : la chaleur se r\u00e9pandant \u00e0 travers une plaque m\u00e9tallique, une tige ou une pi\u00e8ce. L&rsquo;\u00e9quation de la chaleur 1D ou 2D est un premier projet classique en EDP num\u00e9riques car il est conceptuellement simple et enseigne les grands concepts utilis\u00e9s plus tard.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202T\/\u2202t = \u03b1 \u2207\u00b2T\n<\/code><\/pre>\n<p>Ici, <code>\u03b1<\/code> est la diffusivit\u00e9 thermique, <code>T<\/code> est la temp\u00e9rature et <code>\u2207\u00b2<\/code> est le laplacien spatial.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\n\ndef heat_solver(alpha, L, dt, steps):\n    \"\"\"Solve the 1D heat equation with explicit finite differences.\"\"\"\n    dx = L \/ 50\n    x = np.linspace(0, L, 51)\n    T = np.zeros_like(x)\n    T[20:31] = 1.0  # initial hot strip\n    \n    history = [T.copy()]\n    \n    for step in range(steps):\n        T_new = T.copy()\n        for i in range(1, len(T) - 1):\n            T_new[i] = T[i] + dt * alpha \/ dx**2 * (\n                T[i + 1] - 2 * T[i] + T[i - 1]\n            )\n        T = T_new\n        history.append(T.copy())\n    \n    return x, np.array(history)\n\nx, history = heat_solver(alpha=1.0, L=1.0, dt=0.0001, steps=1000)\n\nplt.imshow(history, aspect=\"auto\", extent=[0, 1, 1000, 0])\nplt.xlabel(\"Position\")\nplt.ylabel(\"Time step\")\nplt.colorbar(label=\"Temperature\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Comprendre la stabilit\u00e9 explicite et implicite.<\/li>\n<li>Impl\u00e9mentation des conditions limites.<\/li>\n<li>Visualisation des champs diffusifs.<\/li>\n<li>Raisonnement de base sur la stabilit\u00e9 de style LFC.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : L&rsquo;\u00e9quation de la chaleur est le \u00ab\u00a0monde bonjour\u00a0\u00bb de la simulation. Chaque projet ult\u00e9rieur impliquant la diffusion, les ondes ou la mod\u00e9lisation des champs de phase s&rsquo;appuie sur des mod\u00e8les num\u00e9riques similaires.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Passez \u00e0 un sch\u00e9ma enti\u00e8rement implicite ou \u00e0 un crank-Nicolson et comparez la stabilit\u00e9.<\/li>\n<li>Ajoutez un terme source tel qu&rsquo;un \u00e9l\u00e9ment chauffant.<\/li>\n<li>Exportez les r\u00e9sultats vers CSV pour analyse.<\/li>\n<\/ul>\n<h3>2. Mod\u00e8le de propagation \u00e9pid\u00e9mique de monsieur<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br \/> Dur\u00e9e&nbsp;: 2 \u00e0 3&nbsp;semaines<\/p>\n<p>Ce que vous simulerez : le mod\u00e8le compartiment\u00e9 classique de la propagation de la maladie : sensible, infectieuse et r\u00e9cup\u00e9r\u00e9e. Ce mod\u00e8le capture les courbes \u00e9pid\u00e9miques, l&rsquo;immunit\u00e9 collective et le nombre de reproduction de base sans grille spatiale.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>dS\/dt = -\u03b2SI\/N\ndI\/dt = \u03b2SI\/N - \u03b3I\ndR\/dt = \u03b3I\n<\/code><\/pre>\n<p>Ici, <code>\u03b2<\/code> est le taux de transmission, <code>\u03b3<\/code> est le taux de r\u00e9cup\u00e9ration et <code>N = S + I + R<\/code> est la population.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>SciPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.integrate import odeint\n\ndef sir_model(y, t, beta, gamma):\n    S, I, R = y\n    N = S + I + R\n    dS = -beta * S * I \/ N\n    dI = beta * S * I \/ N - gamma * I\n    dR = gamma * I\n    return [dS, dI, dR]\n\nbeta, gamma = 0.5, 0.1\ny0 = [990, 10, 0]\nt = np.linspace(0, 100, 100)\n\nsolution = odeint(sir_model, y0, t, args=(beta, gamma))\n\nplt.plot(t, solution)\nplt.legend([\"Susceptible\", \"Infectious\", \"Recovered\"])\nplt.xlabel(\"Time\")\nplt.ylabel(\"Population\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>R\u00e9solution des syst\u00e8mes d&rsquo;ODE.<\/li>\n<li>Comprendre <code>R\u2080 = \u03b2\/\u03b3<\/code>.<\/li>\n<li>Interpr\u00e9tation des pics \u00e9pid\u00e9miques et du comportement de taille finale.<\/li>\n<li>Tracer le comportement du plan phase-plan tel qu&rsquo;une population infectieuse par rapport \u00e0 une population sensible.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : il a une pertinence dans le monde r\u00e9el avec une complexit\u00e9 minimale. Le mod\u00e8le est assez simple \u00e0 comprendre mais suffisamment riche pour soutenir des exp\u00e9riences significatives.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez une structure d&rsquo;\u00e2ge avec plusieurs compartiments.<\/li>\n<li>Inclure la vaccination comme param\u00e8tre d\u00e9pendant du temps.<\/li>\n<li>Comparez les solveurs Euler, RK4 et Scipy Ode.<\/li>\n<\/ul>\n<h3>3. \u00c9quation d&rsquo;onde sur une cha\u00eene<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br \/> Dur\u00e9e&nbsp;: 3 \u00e0 4&nbsp;semaines<\/p>\n<p>Ce que vous simulez : une corde vibrante, une membrane de tambour ou une onde sonore. L&rsquo;\u00e9quation d&rsquo;onde introduit la propagation, la r\u00e9flexion et les ondes stationnaires.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202\u00b2u\/\u2202t\u00b2 = c\u00b2 \u2207\u00b2u\n<\/code><\/pre>\n<p>Les conditions aux limites peuvent \u00eatre fixes, gratuites ou mixtes.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\n\nc, L = 1.0, 1.0\ndx = L \/ 100\nx = np.linspace(0, L, 101)\ndt = 0.001\nsteps = 5000\n\nu = np.zeros((101, steps))\nu[:, 0] = np.sin(np.pi * x \/ L)\n\n# First step approximation\nu[:, 1] = u[:, 0]\n\nfor n in range(1, steps - 1):\n    for i in range(1, 100):\n        u[i, n + 1] = (\n            2 * u[i, n]\n            - u[i, n - 1]\n            + (c * dt \/ dx)**2 * (u[i + 1, n] - 2 * u[i, n] + u[i - 1, n])\n        )\n\nplt.plot(x, u[:, 1000])\nplt.xlabel(\"Position\")\nplt.ylabel(\"Displacement\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Pas de temps de diff\u00e9rence finie pour les PDE du second ordre.<\/li>\n<li>Analyse de l&rsquo;\u00e9tat et de la stabilit\u00e9 de la LFC.<\/li>\n<li>R\u00e9flexion des vagues et ondes stationnaires.<\/li>\n<li>Visualisation avec animation ou instantan\u00e9s temporels.<\/li>\n<\/ul>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Essayez diff\u00e9rentes conditions initiales telles qu&rsquo;un paquet d&rsquo;ondes gaussiennes.<\/li>\n<li>ajouter des limites r\u00e9fl\u00e9chissantes ou absorbantes.<\/li>\n<li>Comparez la solution num\u00e9rique avec une solution analytique.<\/li>\n<\/ul>\n<h2 id=\"intermediate-projects\">Projets interm\u00e9diaires<\/h2>\n<p>Ces projets n\u00e9cessitent une exp\u00e9rience plus solide en analyse num\u00e9rique, en alg\u00e8bre lin\u00e9aire ou en physique. Le code implique des solveurs it\u00e9ratifs, des m\u00e9thodes adaptatives ou des mod\u00e8les plus complexes.<\/p>\n<h3>4. It\u00e9ration de Jacobi et Krylov pour les syst\u00e8mes lin\u00e9aires<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br \/> Dur\u00e9e&nbsp;: 4 \u00e0 6&nbsp;semaines<\/p>\n<p>Ce que vous simulerez&nbsp;: des solutions it\u00e9ratives \u00e0 <code>Ax = b<\/code> en utilisant Jacobi, Gauss-Seidel et Conjugate Gradient. C&rsquo;est l&rsquo;\u00e9pine dorsale de nombreux solveurs PDE.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>Ax = b\n<\/code><\/pre>\n<p>Ici, <code>A<\/code> est g\u00e9n\u00e9ralement clairsem\u00e9, et pour de nombreux probl\u00e8mes de style diffusion, il est sym\u00e9trique positif-d\u00e9fini.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>SciPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport scipy.sparse as sp\nimport scipy.sparse.linalg as spla\n\ndef create_1d_laplacian_matrix(n, dx):\n    \"\"\"Create a 1D Laplacian matrix.\"\"\"\n    main = 2.0 * np.ones(n)\n    off = -1.0 * np.ones(n - 1)\n    return sp.diags([off, main, off], [-1, 0, 1], format=\"csr\") \/ dx**2\n\nn = 100\ndx = 0.01\nA = create_1d_laplacian_matrix(n, dx)\nb = np.ones(n)\n\n# Jacobi iteration\nx_jac = np.zeros(n)\nD = A.diagonal()\n\nfor iteration in range(100):\n    r = b - A @ x_jac\n    x_jac = x_jac + r \/ D\n\n# Compare with direct sparse solve\nx_direct = spla.spsolve(A, b)\nerror = np.linalg.norm(x_direct - x_jac)\n\nprint(f\"Jacobi error after 100 iterations: {error:.3e}\")\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Repr\u00e9sentation et op\u00e9rations de la matrice clairsem\u00e9e.<\/li>\n<li>Analyse de convergence du solveur it\u00e9ratif.<\/li>\n<li>Comparaison de Jacobi, Gauss-Seidel et gradient conjugu\u00e9.<\/li>\n<li>Concepts de base de pr\u00e9conditionnement.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : chaque solveur PDE utilise des syst\u00e8mes lin\u00e9aires clairsem\u00e9s en interne. La compr\u00e9hension des m\u00e9thodes it\u00e9ratives au niveau du code aide \u00e0 d\u00e9mystifier des outils tels que Fipy, Fenics et OpenFoam.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez un pr\u00e9conditionneur diagonal.<\/li>\n<li>Comparez les taux de convergence sur les grilles 2D et 3D.<\/li>\n<li>Mettre en \u0153uvre un cycle multigrille simple.<\/li>\n<\/ul>\n<h3>5. Dynamique mol\u00e9culaire avec le potentiel de Lennard-Jones<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br \/> Dur\u00e9e&nbsp;: 4 \u00e0 8&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: un gaz ou un liquide de particules interagissant \u00e0 travers le potentiel de Lennard-Jones. Ce projet d\u00e9montre le cycle complet du mod\u00e8le physique \u00e0 l&rsquo;int\u00e9gration num\u00e9rique, \u00e0 l&rsquo;analyse des donn\u00e9es et \u00e0 la visualisation.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>V(r) = 4\u03b5[(\u03c3\/r)\u00b9\u00b2 - (\u03c3\/r)\u2076]\nF = -\u2207V(r)\n<\/code><\/pre>\n<p>Les m\u00e9thodes d&rsquo;int\u00e9gration typiques incluent les sch\u00e9mas de Velocity Verlet ou LeapFrog.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code>, <code>h5py<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef lj_force(pos_i, pos_j, sigma=1.0, epsilon=1.0):\n    \"\"\"Compute Lennard-Jones force between two particles.\"\"\"\n    r_vec = pos_j - pos_i\n    r = np.linalg.norm(r_vec)\n    \n    if r == 0:\n        return np.zeros_like(r_vec)\n    \n    inv_r = sigma \/ r\n    force_mag = 24 * epsilon * (2 * inv_r**12 - inv_r**6) \/ r\n    return force_mag * (r_vec \/ r)\n\ndef compute_forces(positions):\n    n = len(positions)\n    forces = np.zeros_like(positions)\n    \n    for i in range(n):\n        for j in range(i + 1, n):\n            f = lj_force(positions[i], positions[j])\n            forces[i] += f\n            forces[j] -= f\n    \n    return forces\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Int\u00e9gration num\u00e9rique \u00e0 base de particules.<\/li>\n<li>Conditions aux limites p\u00e9riodiques.<\/li>\n<li>Suivi de conservation de l&rsquo;\u00e9nergie.<\/li>\n<li>Fonctions de distribution radiale.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Molecular Dynamics est une passerelle vers le calcul scientifique haute performance. Une fois que vous comprenez les particules de Lennard-Jones, vous pouvez passer \u00e0 des potentiels complexes, \u00e0 grossissement ou \u00e0 un GPU acc\u00e9l\u00e9r\u00e9.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Passez \u00e0 l&rsquo;acc\u00e9l\u00e9ration GPU avec <code>cupy<\/code> ou <code>numba<\/code>.<\/li>\n<li>\u00c9tudiez les transitions de phase en faisant varier la temp\u00e9rature.<\/li>\n<li>Calculez la conductivit\u00e9 thermique avec les relations Green-Kubo.<\/li>\n<\/ul>\n<h3>6. Mod\u00e8le Ising pour le magn\u00e9tisme 2D<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br \/> Dur\u00e9e&nbsp;: 4 \u00e0 6&nbsp;semaines<\/p>\n<p>Ce que vous simulerez : Le mod\u00e8le Ising est l&rsquo;un des mod\u00e8les les plus simples de magn\u00e9tisme et l&rsquo;un des probl\u00e8mes les plus \u00e9tudi\u00e9s en physique statistique. Il montre comment les r\u00e8gles locales peuvent produire des transitions de phase macroscopiques.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>H = -J \u03a3\u1d62\u2c7c s\u1d62s\u2c7c - h \u03a3\u1d62 s\u1d62\nP(\u0394E) = exp(-\u0394E\/kT)\n<\/code><\/pre>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code>, <code>SciPy<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef metropolis_step(grid, T):\n    \"\"\"Single Metropolis sweep on a 2D Ising grid.\"\"\"\n    L = grid.shape[0]\n    \n    for i in range(L):\n        for j in range(L):\n            site = grid[i, j]\n            neighbors = (\n                grid[(i - 1) % L, j]\n                + grid[(i + 1) % L, j]\n                + grid[i, (j - 1) % L]\n                + grid[i, (j + 1) % L]\n            )\n            dE = 2 * site * neighbors\n            \n            if dE &lt; 0 or np.random.rand() &lt; np.exp(-dE \/ T):\n                grid[i, j] = -site\n    \n    return grid\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>M\u00e9thodes de Monte Carlo et algorithme de Metropolis.<\/li>\n<li>Transitions de phase et ph\u00e9nom\u00e8nes critiques.<\/li>\n<li>Heuristique de minimisation \u00e9nerg\u00e9tique.<\/li>\n<li>Visualisation des mod\u00e8les \u00e9mergents.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Le mod\u00e8le Ising relie la physique statistique, les m\u00e9thodes de calcul et l&rsquo;apprentissage automatique. Il a \u00e9galement un comportement de r\u00e9f\u00e9rence connu, ce qui rend possible la validation.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Calculez la capacit\u00e9 thermique et la sensibilit\u00e9 \u00e0 proximit\u00e9 de la temp\u00e9rature critique.<\/li>\n<li>\u00c9tudiez diff\u00e9rentes g\u00e9om\u00e9tries de r\u00e9seau.<\/li>\n<li>Impl\u00e9mentez l&rsquo;algorithme de cluster Wolff ou Swendsen-Wang.<\/li>\n<\/ul>\n<h2 id=\"advanced-projects\">Projets avanc\u00e9s<\/h2>\n<p>Ces projets n\u00e9cessitent une exp\u00e9rience en mati\u00e8re de m\u00e9thodes num\u00e9riques plus solides, une exp\u00e9rience de calcul parall\u00e8le ou une connaissance de la physique sp\u00e9cialis\u00e9e. Ils conviennent aux travaux de niveau de th\u00e8se ou de synth\u00e8se.<\/p>\n<h3>7. Solveur de diffusion bas\u00e9 sur Fipy<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br \/> Dur\u00e9e&nbsp;: 8 \u00e0 12&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: un probl\u00e8me de diffusion r\u00e9aliste \u00e0 l&rsquo;aide de Fipy. Cela relie les concepts PDE et la discr\u00e9tisation des volumes finis \u00e0 des logiciels scientifiques de qualit\u00e9 de production.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202c\/\u2202t = \u2207\u00b7(D\u2207c) + S\n<\/code><\/pre>\n<p>Il s&rsquo;agit d&rsquo;une \u00e9quation de diffusion avec des termes sources et des conditions aux limites telles que Dirichlet, Neumann ou Robin.<\/p>\n<p>Pile Python&nbsp;: <code>FiPy<\/code>, <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">from fipy import Grid2D, CellVariable, DiffusionTerm\n\nmesh = Grid2D(nx=50, ny=50, dx=0.1, dy=0.1)\n\nc = CellVariable(mesh=mesh, name=\"concentration\", value=0.0)\nc.constrain(1.0, mesh.facesLeft)\n\neq = DiffusionTerm(coeff=1.0) == 0\n\n# Solve to steady state\neq.solve(var=c)\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Discr\u00e9tisation en volume fini avec Fipy.<\/li>\n<li>Gestion des conditions aux limites de Dirichlet, Neumann et Robin.<\/li>\n<li>\u00c9tudes de qualit\u00e9 et de convergence de maillage.<\/li>\n<li>Connecter des solutions analytiques aux r\u00e9sultats num\u00e9riques.<\/li>\n<\/ul>\n<p>Pourquoi ce projet&nbsp;: si vous souhaitez travailler dans la science informatique de mani\u00e8re professionnelle, il est pr\u00e9cieux de savoir comment utiliser et \u00e9tendre un code de volume fini comme Fipy. Ce projet combine la configuration du maillage, la formulation des termes, la configuration du solveur et le post-traitement.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez des termes de r\u00e9action pour les syst\u00e8mes de r\u00e9action-diffusion ou les sch\u00e9mas de Turing.<\/li>\n<li>Comparez les r\u00e9sultats de Fipy avec les solutions de r\u00e9f\u00e9rence analytiques.<\/li>\n<li>Parall\u00e8lement avec le support MPI de Fipy.<\/li>\n<\/ul>\n<h3>8. Monte Carlo pour le prix des options<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br \/> Dur\u00e9e&nbsp;: 6 \u00e0 10&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: les m\u00e9thodes de Monte&nbsp;Carlo dans la finance, y compris la tarification des options europ\u00e9ennes et am\u00e9ricaines en utilisant des trajectoires de cours simul\u00e9es. Cela relie la science informatique avec les math\u00e9matiques appliqu\u00e9es et la finance quantitative.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>dS = \u03bcS dt + \u03c3S dW\nV = e^(-rT) E[max(S-K, 0)]\n<\/code><\/pre>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>pandas<\/code>, <code>Matplotlib<\/code>, <code>scipy.stats<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef monte_carlo_option(S0, K, r, sigma, T, num_paths=10000):\n    \"\"\"Price a European call option using Monte Carlo.\"\"\"\n    z = np.random.randn(num_paths)\n    S_final = S0 * np.exp(\n        (r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * z\n    )\n    \n    payoffs = np.maximum(S_final - K, 0)\n    price = np.exp(-r * T) * np.mean(payoffs)\n    stderr = np.exp(-r * T) * np.std(payoffs) \/ np.sqrt(num_paths)\n    \n    return price, stderr\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Simulation stochastique et g\u00e9n\u00e9ration de trajectoires.<\/li>\n<li>Analyse de convergence avec la taille de l&rsquo;\u00e9chantillon.<\/li>\n<li>Les techniques de r\u00e9duction de la variance telles que les variables antith\u00e9tiques et les variables de contr\u00f4le.<\/li>\n<li>Tarification des options am\u00e9ricaines avec les m\u00e9thodes de Monte Carlo des moindres carr\u00e9s.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Les m\u00e9thodes de Monte Carlo fonctionnent dans des contextes de grande dimension, ce qui les rend utiles dans la finance, la science des mat\u00e9riaux, la th\u00e9orie des champs quantiques et la quantification de l&rsquo;incertitude.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Impl\u00e9mentez l&rsquo;algorithme Longstaff-Schwartz pour les options am\u00e9ricaines.<\/li>\n<li>\u00c9tudiez les Grecs tels que Delta, Gamma et Vega.<\/li>\n<li>Comparez les r\u00e9sultats avec la solution analytique de Black-Scholes.<\/li>\n<\/ul>\n<h3>9. Solidification et simulation de champ de phase<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br \/> Dur\u00e9e&nbsp;: 12 \u00e0 16&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler : La m\u00e9thode du champ de phase est largement utilis\u00e9e dans la science des mat\u00e9riaux informatiques pour l&rsquo;\u00e9volution de la microstructure, y compris la croissance des grains, la solidification dendritique et la formation de pr\u00e9cipit\u00e9s.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = -\u0393 [\u03c6(1-\u03c6)\u00b2 + F'(\u03c6) + \u03bb\u2207\u03c6\u00b7\u2207\u03c6]\n<\/code><\/pre>\n<p>Ici, <code>\u03c6<\/code> est le champ de phase, <code>\u0393<\/code> est la mobilit\u00e9, et <code>F(\u03c6)<\/code> est le potentiel de double puits.<\/p>\n<p>Pile Python&nbsp;: <code>FiPy<\/code>, <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">from fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\n\nmesh = Grid2D(nx=100, ny=100, dx=1.0, dy=1.0)\n\nphi = CellVariable(mesh=mesh, name=\"phase_field\", value=0.0)\n\n# Example starter equation structure:\n# TransientTerm == diffusion + source-like phase evolution term\neq = TransientTerm(var=phi) == DiffusionTerm(coeff=1.0, var=phi)\n\nfor step in range(100):\n    eq.solve(var=phi, dt=0.01)\n<\/code><\/pre>\n<p>R\u00e9sultats d&rsquo;apprentissage&nbsp;:<\/p>\n<ul>\n<li>Formulation en champ de phase et potentiel de double puits.<\/li>\n<li>Largeur de l&rsquo;interface et param\u00e8tres de mobilit\u00e9.<\/li>\n<li>couplage avec des \u00e9quations de diffusion.<\/li>\n<li>Comparaison avec des solutions de solidification analytique ou des rep\u00e8res de la litt\u00e9rature.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : La simulation en champ de phase est utilis\u00e9e dans la recherche sur les sciences des mat\u00e9riaux dans le monde. Il relie la microstructure, la thermodynamique et les m\u00e9thodes num\u00e9riques.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Associez le champ de phase \u00e0 la diffusion pour les mod\u00e8les de pi\u00e9geage de solut\u00e9s.<\/li>\n<li>\u00c9tudiez les mod\u00e8les de croissance dendritique dans diff\u00e9rentes conditions de sous-refroidissement.<\/li>\n<li>Comparez les r\u00e9sultats avec les micrographies exp\u00e9rimentales de la litt\u00e9rature.<\/li>\n<\/ul>\n<h2 id=\"how-to-choose\">Comment choisir votre projet<\/h2>\n<p>Tous les projets ne conviennent pas \u00e0 tous les \u00e9tudiants. Utilisez le cadre ci-dessous pour choisir un point de d\u00e9part r\u00e9aliste.<\/p>\n<h3>Faites correspondre votre arri\u00e8re-plan<\/h3>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>vous savez actuellement<\/th>\n<th>Projet de d\u00e9marrage recommand\u00e9<\/th>\n<\/tr>\n<tr>\n<td>Principes de base de Python, pas de fond num\u00e9rique<\/td>\n<td>\u00c9quation de chaleur<\/td>\n<\/tr>\n<tr>\n<td>Python Plus Analyse num\u00e9rique d&rsquo;introduction<\/td>\n<td>Mod\u00e8le de monsieur ou \u00e9quation d&rsquo;onde<\/td>\n<\/tr>\n<tr>\n<td>Course ODE\/PDE et alg\u00e8bre lin\u00e9aire<\/td>\n<td>It\u00e9ration de Jacobi ou dynamique mol\u00e9culaire<\/td>\n<\/tr>\n<tr>\n<td>M\u00e9canique statistique ou math\u00e9matiques avanc\u00e9es<\/td>\n<td>Mod\u00e8le d&rsquo;acc\u00e8s<\/td>\n<\/tr>\n<tr>\n<td>Objectifs de recherche ou de th\u00e8se<\/td>\n<td>Diffusion FIPY ou simulation en champ de phase<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Ce qui compte le plus<\/h3>\n<ol>\n<li>Pr\u00e9requis math\u00e9matiques. Ne passez pas \u00e0 la simulation en champ de phase si vous n&rsquo;avez pas encore r\u00e9solu un PDE num\u00e9riquement.<\/li>\n<li>Confort de programmation. Si vous \u00eates nouveau sur Python, commencez par l&rsquo;\u00e9quation de la chaleur et construisez \u00e0 partir de l\u00e0.<\/li>\n<li>horizon temporel. Un projet de semestre a besoin d&rsquo;une port\u00e9e claire. Choisissez quelque chose qui peut produire un r\u00e9sultat significatif en 4 \u00e0 8 semaines.<\/li>\n<li>objectifs de carri\u00e8re. La science des mat\u00e9riaux pointe vers le champ de phase ou la dynamique mol\u00e9culaire. Financer des points vers Monte-Carlo. Les logiciels de recherche pointent vers FIPY ou des solveurs it\u00e9ratifs.<\/li>\n<\/ol>\n<h3>erreurs courantes que font les \u00e9l\u00e8ves<\/h3>\n<ol>\n<li>Choisir un projet trop ambitieux. Un solveur de champ de phase 3D complet en quatre semaines n&rsquo;est pas r\u00e9aliste. Mettez-le jusqu&rsquo;\u00e0 2D avec des param\u00e8tres simples.<\/li>\n<li>Sauter la comparaison de solutions analytiques. Toujours comparer les r\u00e9sultats num\u00e9riques \u00e0 une solution connue lorsque cela est possible.<\/li>\n<li>Ignorer la condition LFC. De nombreuses simulations pour d\u00e9butants \u00e9chouent car le pas de temps est trop important.<\/li>\n<li>N&rsquo;utilisez pas le contr\u00f4le de version. Git n&rsquo;est pas facultatif pour un projet s\u00e9rieux. Engagez-vous r\u00e9guli\u00e8rement afin de vous remettre des erreurs.<\/li>\n<\/ol>\n<h2 id=\"what-to-skip\">Que faut-il sauter ?<\/h2>\n<p>Tous les projets informatiques ne sont pas \u00e9galement utiles pour la simulation d&rsquo;apprentissage. \u00c9vitez-les sauf si vous avez une raison sp\u00e9cifique.<\/p>\n<ul>\n<li>Simulations g\u00e9n\u00e9riques de \u00ab\u00a0Hello World\u00a0\u00bb. Si un projet n&rsquo;implique pas une PDE, une loi de conservation, un solveur num\u00e9rique ou un mod\u00e8le stochastique, il ne s&rsquo;agit peut-\u00eatre pas d&rsquo;un projet de science informatique.<\/li>\n<li>Projets qui n\u00e9cessitent du mat\u00e9riel sp\u00e9cial au d\u00e9part. Ne commencez pas avec la dynamique mol\u00e9culaire du GPU si vous n&rsquo;avez pas construit la dynamique mol\u00e9culaire du CPU en premier.<\/li>\n<li>Couplage multi-physique trop complexe. Commencez par des solveurs \u00e0 une seule physique. Le couplage multi-physique est un sujet de recherche, et non un premier projet \u00e9tudiant id\u00e9al.<\/li>\n<\/ul>\n<h2 id=\"references\">O\u00f9 trouver le code de r\u00e9f\u00e9rence<\/h2>\n<p>Plusieurs cours universitaires et projets open source fournissent des r\u00e9f\u00e9rences utiles :<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/CompPhysics\/ComputationalPhysics\">University of Oslo Computational Physics<\/a> \u2014 Mat\u00e9riel de cours avec descriptions et solutions de projets.<\/li>\n<li><a href=\"https:\/\/github.com\/aiidateam\/aiida-core\/wiki\/GSoC-2025-Projects\">Projets GSOC d&rsquo;aiida<\/a> \u2014 Id\u00e9es de projets d&rsquo;\u00e9tudiants en science des mat\u00e9riaux informatiques.<\/li>\n<li><a href=\"https:\/\/www.fipy.org\/\">documentation FIPY<\/a> \u2014 Tutoriels officiels et exemples de la biblioth\u00e8que de volumes finis.<\/li>\n<\/ul>\n<p>Utilisez ces ressources comme points de d\u00e9part, et non comme points de terminaison. L&rsquo;apprentissage r\u00e9el se produit lorsque vous \u00e9crivez et d\u00e9boguez vous-m\u00eame le code.<\/p>\n<h2 id=\"conclusion\">R\u00e9flexions finales<\/h2>\n<p>La diff\u00e9rence entre la lecture des m\u00e9thodes num\u00e9riques et la r\u00e9daction d&rsquo;une simulation est \u00e9norme. Vous pouvez lire de nombreux manuels de PDE et ne pas comprendre ce qui se passe lorsqu&rsquo;une \u00e9quation de diffusion est discr\u00e9tis\u00e9e avec un pas de temps trop volumineux.<\/p>\n<p>Choisissez un projet, commencez \u00e0 coder et it\u00e9rez. Quelques semaines de d\u00e9bogage peuvent enseigner plus de mois de conf\u00e9rences passives.<\/p>\n<p>Si vous avez besoin d&rsquo;aide pour r\u00e9soudre un probl\u00e8me de simulation sp\u00e9cifique, comme le choix du bon solveur, le d\u00e9bogage d&rsquo;une instabilit\u00e9 num\u00e9rique ou la mise \u00e0 l&rsquo;\u00e9chelle du code \u00e0 plusieurs processeurs, envisagez de demander \u00e0 quelqu&rsquo;un de l&rsquo;exp\u00e9rience. Un bon soutien peut vous aider \u00e0 \u00e9viter les pi\u00e8ges courants tout en faisant le travail vous-m\u00eame.<\/p>\n<h2 id=\"related-guides\">Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/when-to-use-fem-fvm-fdm\/\">Quand utiliser FEM, FVM ou FDM&nbsp;: une comparaison pratique pour les d\u00e9butants<\/a> &#8211; Comprendre les m\u00e9thodes de discr\u00e9tisation avant de commencer \u00e0 coder.<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\">\u00c9tudes de qualit\u00e9 et de convergence des mailles&nbsp;: un guide pratique<\/a> &#8211; vous assurer que votre grille ne ruine pas votre simulation.<\/li>\n<li><a href=\"https:\/\/matforge.org\/python-debugging-scientific-code-print-statements-profiling\/\">d\u00e9bogage de Python pour le code scientifique&nbsp;: des instructions d&rsquo;impression au profilage<\/a>&nbsp;: strat\u00e9gies de d\u00e9bogage pour le code num\u00e9rique.<\/li>\n<li><a href=\"https:\/\/matforge.org\/computational-materials-science-frameworks-moose-vs-prisms-pf-vs-openphase\/\">Cadres de science des mat\u00e9riaux informatiques&nbsp;: Moose vs&nbsp;Prisms-PF vs OpenPhase<\/a> \u2014 Si vous voulez aller au-del\u00e0 de Python.<\/li>\n<\/ul>\n","protected":false,"raw":"<h2 id=\"key-takeaways\">Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Les id\u00e9es de projets organis\u00e9s couvrent les niveaux d\u00e9butants, interm\u00e9diaires et avanc\u00e9s, en mettant l'accent sur la simulation et la science informatique.<\/li>\n<li>Les niveaux de difficult\u00e9 refl\u00e8tent les conditions pr\u00e9alables, la complexit\u00e9 des math\u00e9matiques et l'investissement en temps attendu.<\/li>\n<li>Des mod\u00e8les de code sont inclus pour chaque projet afin que les \u00e9tudiants puissent commencer \u00e0 construire rapidement.<\/li>\n<li>Les r\u00e9sultats d'apprentissage montrent ce que chaque projet enseigne.<\/li>\n<li>Une feuille de route des comp\u00e9tences aux projets aide les \u00e9l\u00e8ves \u00e0 choisir un projet en fonction de leurs connaissances actuelles.<\/li>\n<\/ul>\n<p>Les projets d'\u00e9tudiants en sciences informatiques et en simulation sont ceux o\u00f9 la th\u00e9orie rencontre enfin le code. Vous pouvez apprendre des m\u00e9thodes de volume fini, des \u00e9quations aux d\u00e9riv\u00e9es partielles et des lois de conservation dans les conf\u00e9rences, mais les \u00e9quations sur un tableau blanc n'enseignent pas \u00e0 quoi ressemble l'\u00e9criture d'un solveur \u00e0 partir de z\u00e9ro.<\/p>\n<p>Si vous voulez comprendre comment les m\u00e9thodes num\u00e9riques se traduisent par des simulations de travail, choisissez un projet et commencez \u00e0 construire.<\/p>\n<p>Ce guide organise des id\u00e9es de projets pratiques inspir\u00e9es de cours de physique informatique universitaires, de projets scientifiques open source et de r\u00e9f\u00e9rentiels entre pairs. Chaque projet utilise Python et construit vers quelque chose que les \u00e9tudiants peuvent inclure dans un portfolio.<\/p>\n<h2 id=\"difficulty-levels\">Niveaux de difficult\u00e9 du projet expliqu\u00e9s<\/h2>\n<p>Avant de choisir un projet, il est utile de comprendre ce que signifie chaque niveau en termes d'effort.<\/p>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Niveau<\/th>\n<th>Les pr\u00e9requis<\/th>\n<th>Heure pr\u00e9vue<\/th>\n<th>Que vas tu faire?<\/th>\n<\/tr>\n<tr>\n<td>D\u00e9butant<\/td>\n<td>Principes de base de Python, NumPy, Matplotlib<\/td>\n<td>2 \u00e0 4 semaines<\/td>\n<td>R\u00e9solvez des ODE ou des PDE simples avec des m\u00e9thodes explicites et visualisez les r\u00e9sultats<\/td>\n<\/tr>\n<tr>\n<td>Interm\u00e9diaire<\/td>\n<td>Analyse num\u00e9rique, alg\u00e8bre lin\u00e9aire, fond ODE\/PDE<\/td>\n<td>4 \u00e0 8 semaines<\/td>\n<td>Impl\u00e9mentez des solveurs, g\u00e9rez les conditions aux limites et comparez la pr\u00e9cision<\/td>\n<\/tr>\n<tr>\n<td>Avanc\u00e9e<\/td>\n<td>M\u00e9thodes num\u00e9riques avanc\u00e9es, calcul parall\u00e8le ou formation en physique sp\u00e9cialis\u00e9e<\/td>\n<td>8 \u00e0 16 semaines<\/td>\n<td>Cr\u00e9ez des simulations multi-physiques, optimisez les performances ou comparez avec les r\u00e9sultats de la litt\u00e9rature<\/td>\n<\/tr>\n<\/tbody><\/table>\n<p>Le tableau n'est pas un classement. C'est un outil de correspondance. Choisissez un niveau qui correspond \u00e0 votre pr\u00e9paration actuelle, puis montez vers le haut une fois que vous \u00eates \u00e0 l'aise.<\/p>\n<h2 id=\"skills-roadmap\">Feuille de route des comp\u00e9tences aux projets<\/h2>\n<p>La feuille de route ci-dessous montre quels concepts math\u00e9matiques et de programmation correspondent aux projets.<\/p>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Skill \/ Concept \u2502 Projects That Use It                                    \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Python basics   \u2502 Heat equation solver, SIR epidemic model, Lennard-Jones \u2502\n\u2502 NumPy arrays    \u2502 Wave propagation, diffusion on grid                     \u2502\n\u2502 ODE solvers     \u2502 SIR model, projectile with drag, Lotka-Volterra         \u2502\n\u2502 PDE basics      \u2502 Heat equation, wave equation, diffusion                 \u2502\n\u2502 Linear algebra  \u2502 Jacobi iteration, eigenvalue problems, Krylov methods   \u2502\n\u2502 Monte Carlo     \u2502 Ising model, radioactive decay, option pricing          \u2502\n\u2502 FFT \/ spectral  \u2502 Wave propagation, turbulence, spectral methods          \u2502\n\u2502 Parallelism     \u2502 MPI diffusion solver, GPU molecular dynamics            \u2502\n\u2502 Phase-field     \u2502 Solidification, fracture mechanics, grain boundary      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n<h2 id=\"beginner-projects\">Projets d\u00e9butants<\/h2>\n<p>Ces projets introduisent des concepts de simulation de base sans \u00e9craser les math\u00e9matiques ou la configuration complexe. Ils sont con\u00e7us pour fonctionner sur un ordinateur portable sans mat\u00e9riel sp\u00e9cial.<\/p>\n<h3>1. Solveur d'\u00e9quations de chaleur sur une grille<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br> Dur\u00e9e&nbsp;: 2 \u00e0 3&nbsp;semaines<\/p>\n<p>Ce que vous simulez : la chaleur se r\u00e9pandant \u00e0 travers une plaque m\u00e9tallique, une tige ou une pi\u00e8ce. L'\u00e9quation de la chaleur 1D ou 2D est un premier projet classique en EDP num\u00e9riques car il est conceptuellement simple et enseigne les grands concepts utilis\u00e9s plus tard.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202T\/\u2202t = \u03b1 \u2207\u00b2T\n<\/code><\/pre>\n<p>Ici, <code>\u03b1<\/code> est la diffusivit\u00e9 thermique, <code>T<\/code> est la temp\u00e9rature et <code>\u2207\u00b2<\/code> est le laplacien spatial.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\n\ndef heat_solver(alpha, L, dt, steps):\n    \"\"\"Solve the 1D heat equation with explicit finite differences.\"\"\"\n    dx = L \/ 50\n    x = np.linspace(0, L, 51)\n    T = np.zeros_like(x)\n    T[20:31] = 1.0  # initial hot strip\n    \n    history = [T.copy()]\n    \n    for step in range(steps):\n        T_new = T.copy()\n        for i in range(1, len(T) - 1):\n            T_new[i] = T[i] + dt * alpha \/ dx**2 * (\n                T[i + 1] - 2 * T[i] + T[i - 1]\n            )\n        T = T_new\n        history.append(T.copy())\n    \n    return x, np.array(history)\n\nx, history = heat_solver(alpha=1.0, L=1.0, dt=0.0001, steps=1000)\n\nplt.imshow(history, aspect=\"auto\", extent=[0, 1, 1000, 0])\nplt.xlabel(\"Position\")\nplt.ylabel(\"Time step\")\nplt.colorbar(label=\"Temperature\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Comprendre la stabilit\u00e9 explicite et implicite.<\/li>\n<li>Impl\u00e9mentation des conditions limites.<\/li>\n<li>Visualisation des champs diffusifs.<\/li>\n<li>Raisonnement de base sur la stabilit\u00e9 de style LFC.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : L'\u00e9quation de la chaleur est le \"monde bonjour\" de la simulation. Chaque projet ult\u00e9rieur impliquant la diffusion, les ondes ou la mod\u00e9lisation des champs de phase s'appuie sur des mod\u00e8les num\u00e9riques similaires.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Passez \u00e0 un sch\u00e9ma enti\u00e8rement implicite ou \u00e0 un crank-Nicolson et comparez la stabilit\u00e9.<\/li>\n<li>Ajoutez un terme source tel qu'un \u00e9l\u00e9ment chauffant.<\/li>\n<li>Exportez les r\u00e9sultats vers CSV pour analyse.<\/li>\n<\/ul>\n<h3>2. Mod\u00e8le de propagation \u00e9pid\u00e9mique de monsieur<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br> Dur\u00e9e&nbsp;: 2 \u00e0 3&nbsp;semaines<\/p>\n<p>Ce que vous simulerez : le mod\u00e8le compartiment\u00e9 classique de la propagation de la maladie : sensible, infectieuse et r\u00e9cup\u00e9r\u00e9e. Ce mod\u00e8le capture les courbes \u00e9pid\u00e9miques, l'immunit\u00e9 collective et le nombre de reproduction de base sans grille spatiale.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>dS\/dt = -\u03b2SI\/N\ndI\/dt = \u03b2SI\/N - \u03b3I\ndR\/dt = \u03b3I\n<\/code><\/pre>\n<p>Ici, <code>\u03b2<\/code> est le taux de transmission, <code>\u03b3<\/code> est le taux de r\u00e9cup\u00e9ration et <code>N = S + I + R<\/code> est la population.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>SciPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.integrate import odeint\n\ndef sir_model(y, t, beta, gamma):\n    S, I, R = y\n    N = S + I + R\n    dS = -beta * S * I \/ N\n    dI = beta * S * I \/ N - gamma * I\n    dR = gamma * I\n    return [dS, dI, dR]\n\nbeta, gamma = 0.5, 0.1\ny0 = [990, 10, 0]\nt = np.linspace(0, 100, 100)\n\nsolution = odeint(sir_model, y0, t, args=(beta, gamma))\n\nplt.plot(t, solution)\nplt.legend([\"Susceptible\", \"Infectious\", \"Recovered\"])\nplt.xlabel(\"Time\")\nplt.ylabel(\"Population\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>R\u00e9solution des syst\u00e8mes d'ODE.<\/li>\n<li>Comprendre <code>R\u2080 = \u03b2\/\u03b3<\/code>.<\/li>\n<li>Interpr\u00e9tation des pics \u00e9pid\u00e9miques et du comportement de taille finale.<\/li>\n<li>Tracer le comportement du plan phase-plan tel qu'une population infectieuse par rapport \u00e0 une population sensible.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : il a une pertinence dans le monde r\u00e9el avec une complexit\u00e9 minimale. Le mod\u00e8le est assez simple \u00e0 comprendre mais suffisamment riche pour soutenir des exp\u00e9riences significatives.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez une structure d'\u00e2ge avec plusieurs compartiments.<\/li>\n<li>Inclure la vaccination comme param\u00e8tre d\u00e9pendant du temps.<\/li>\n<li>Comparez les solveurs Euler, RK4 et Scipy Ode.<\/li>\n<\/ul>\n<h3>3. \u00c9quation d'onde sur une cha\u00eene<\/h3>\n<p>Difficult\u00e9&nbsp;: D\u00e9butant<br> Dur\u00e9e&nbsp;: 3 \u00e0 4&nbsp;semaines<\/p>\n<p>Ce que vous simulez : une corde vibrante, une membrane de tambour ou une onde sonore. L'\u00e9quation d'onde introduit la propagation, la r\u00e9flexion et les ondes stationnaires.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202\u00b2u\/\u2202t\u00b2 = c\u00b2 \u2207\u00b2u\n<\/code><\/pre>\n<p>Les conditions aux limites peuvent \u00eatre fixes, gratuites ou mixtes.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport matplotlib.pyplot as plt\n\nc, L = 1.0, 1.0\ndx = L \/ 100\nx = np.linspace(0, L, 101)\ndt = 0.001\nsteps = 5000\n\nu = np.zeros((101, steps))\nu[:, 0] = np.sin(np.pi * x \/ L)\n\n# First step approximation\nu[:, 1] = u[:, 0]\n\nfor n in range(1, steps - 1):\n    for i in range(1, 100):\n        u[i, n + 1] = (\n            2 * u[i, n]\n            - u[i, n - 1]\n            + (c * dt \/ dx)**2 * (u[i + 1, n] - 2 * u[i, n] + u[i - 1, n])\n        )\n\nplt.plot(x, u[:, 1000])\nplt.xlabel(\"Position\")\nplt.ylabel(\"Displacement\")\nplt.show()\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Pas de temps de diff\u00e9rence finie pour les PDE du second ordre.<\/li>\n<li>Analyse de l'\u00e9tat et de la stabilit\u00e9 de la LFC.<\/li>\n<li>R\u00e9flexion des vagues et ondes stationnaires.<\/li>\n<li>Visualisation avec animation ou instantan\u00e9s temporels.<\/li>\n<\/ul>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Essayez diff\u00e9rentes conditions initiales telles qu'un paquet d'ondes gaussiennes.<\/li>\n<li>ajouter des limites r\u00e9fl\u00e9chissantes ou absorbantes.<\/li>\n<li>Comparez la solution num\u00e9rique avec une solution analytique.<\/li>\n<\/ul>\n<h2 id=\"intermediate-projects\">Projets interm\u00e9diaires<\/h2>\n<p>Ces projets n\u00e9cessitent une exp\u00e9rience plus solide en analyse num\u00e9rique, en alg\u00e8bre lin\u00e9aire ou en physique. Le code implique des solveurs it\u00e9ratifs, des m\u00e9thodes adaptatives ou des mod\u00e8les plus complexes.<\/p>\n<h3>4. It\u00e9ration de Jacobi et Krylov pour les syst\u00e8mes lin\u00e9aires<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br> Dur\u00e9e&nbsp;: 4 \u00e0 6&nbsp;semaines<\/p>\n<p>Ce que vous simulerez&nbsp;: des solutions it\u00e9ratives \u00e0 <code>Ax = b<\/code> en utilisant Jacobi, Gauss-Seidel et Conjugate Gradient. C'est l'\u00e9pine dorsale de nombreux solveurs PDE.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>Ax = b\n<\/code><\/pre>\n<p>Ici, <code>A<\/code> est g\u00e9n\u00e9ralement clairsem\u00e9, et pour de nombreux probl\u00e8mes de style diffusion, il est sym\u00e9trique positif-d\u00e9fini.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>SciPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\nimport scipy.sparse as sp\nimport scipy.sparse.linalg as spla\n\ndef create_1d_laplacian_matrix(n, dx):\n    \"\"\"Create a 1D Laplacian matrix.\"\"\"\n    main = 2.0 * np.ones(n)\n    off = -1.0 * np.ones(n - 1)\n    return sp.diags([off, main, off], [-1, 0, 1], format=\"csr\") \/ dx**2\n\nn = 100\ndx = 0.01\nA = create_1d_laplacian_matrix(n, dx)\nb = np.ones(n)\n\n# Jacobi iteration\nx_jac = np.zeros(n)\nD = A.diagonal()\n\nfor iteration in range(100):\n    r = b - A @ x_jac\n    x_jac = x_jac + r \/ D\n\n# Compare with direct sparse solve\nx_direct = spla.spsolve(A, b)\nerror = np.linalg.norm(x_direct - x_jac)\n\nprint(f\"Jacobi error after 100 iterations: {error:.3e}\")\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Repr\u00e9sentation et op\u00e9rations de la matrice clairsem\u00e9e.<\/li>\n<li>Analyse de convergence du solveur it\u00e9ratif.<\/li>\n<li>Comparaison de Jacobi, Gauss-Seidel et gradient conjugu\u00e9.<\/li>\n<li>Concepts de base de pr\u00e9conditionnement.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : chaque solveur PDE utilise des syst\u00e8mes lin\u00e9aires clairsem\u00e9s en interne. La compr\u00e9hension des m\u00e9thodes it\u00e9ratives au niveau du code aide \u00e0 d\u00e9mystifier des outils tels que Fipy, Fenics et OpenFoam.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez un pr\u00e9conditionneur diagonal.<\/li>\n<li>Comparez les taux de convergence sur les grilles 2D et 3D.<\/li>\n<li>Mettre en \u0153uvre un cycle multigrille simple.<\/li>\n<\/ul>\n<h3>5. Dynamique mol\u00e9culaire avec le potentiel de Lennard-Jones<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br> Dur\u00e9e&nbsp;: 4 \u00e0 8&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: un gaz ou un liquide de particules interagissant \u00e0 travers le potentiel de Lennard-Jones. Ce projet d\u00e9montre le cycle complet du mod\u00e8le physique \u00e0 l'int\u00e9gration num\u00e9rique, \u00e0 l'analyse des donn\u00e9es et \u00e0 la visualisation.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>V(r) = 4\u03b5[(\u03c3\/r)\u00b9\u00b2 - (\u03c3\/r)\u2076]\nF = -\u2207V(r)\n<\/code><\/pre>\n<p>Les m\u00e9thodes d'int\u00e9gration typiques incluent les sch\u00e9mas de Velocity Verlet ou LeapFrog.<\/p>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code>, <code>h5py<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef lj_force(pos_i, pos_j, sigma=1.0, epsilon=1.0):\n    \"\"\"Compute Lennard-Jones force between two particles.\"\"\"\n    r_vec = pos_j - pos_i\n    r = np.linalg.norm(r_vec)\n    \n    if r == 0:\n        return np.zeros_like(r_vec)\n    \n    inv_r = sigma \/ r\n    force_mag = 24 * epsilon * (2 * inv_r**12 - inv_r**6) \/ r\n    return force_mag * (r_vec \/ r)\n\ndef compute_forces(positions):\n    n = len(positions)\n    forces = np.zeros_like(positions)\n    \n    for i in range(n):\n        for j in range(i + 1, n):\n            f = lj_force(positions[i], positions[j])\n            forces[i] += f\n            forces[j] -= f\n    \n    return forces\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Int\u00e9gration num\u00e9rique \u00e0 base de particules.<\/li>\n<li>Conditions aux limites p\u00e9riodiques.<\/li>\n<li>Suivi de conservation de l'\u00e9nergie.<\/li>\n<li>Fonctions de distribution radiale.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Molecular Dynamics est une passerelle vers le calcul scientifique haute performance. Une fois que vous comprenez les particules de Lennard-Jones, vous pouvez passer \u00e0 des potentiels complexes, \u00e0 grossissement ou \u00e0 un GPU acc\u00e9l\u00e9r\u00e9.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Passez \u00e0 l'acc\u00e9l\u00e9ration GPU avec <code>cupy<\/code> ou <code>numba<\/code>.<\/li>\n<li>\u00c9tudiez les transitions de phase en faisant varier la temp\u00e9rature.<\/li>\n<li>Calculez la conductivit\u00e9 thermique avec les relations Green-Kubo.<\/li>\n<\/ul>\n<h3>6. Mod\u00e8le Ising pour le magn\u00e9tisme 2D<\/h3>\n<p>Difficult\u00e9&nbsp;: Interm\u00e9diaire<br> Dur\u00e9e&nbsp;: 4 \u00e0 6&nbsp;semaines<\/p>\n<p>Ce que vous simulerez : Le mod\u00e8le Ising est l'un des mod\u00e8les les plus simples de magn\u00e9tisme et l'un des probl\u00e8mes les plus \u00e9tudi\u00e9s en physique statistique. Il montre comment les r\u00e8gles locales peuvent produire des transitions de phase macroscopiques.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>H = -J \u03a3\u1d62\u2c7c s\u1d62s\u2c7c - h \u03a3\u1d62 s\u1d62\nP(\u0394E) = exp(-\u0394E\/kT)\n<\/code><\/pre>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>Matplotlib<\/code>, <code>SciPy<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef metropolis_step(grid, T):\n    \"\"\"Single Metropolis sweep on a 2D Ising grid.\"\"\"\n    L = grid.shape[0]\n    \n    for i in range(L):\n        for j in range(L):\n            site = grid[i, j]\n            neighbors = (\n                grid[(i - 1) % L, j]\n                + grid[(i + 1) % L, j]\n                + grid[i, (j - 1) % L]\n                + grid[i, (j + 1) % L]\n            )\n            dE = 2 * site * neighbors\n            \n            if dE &lt; 0 or np.random.rand() &lt; np.exp(-dE \/ T):\n                grid[i, j] = -site\n    \n    return grid\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>M\u00e9thodes de Monte Carlo et algorithme de Metropolis.<\/li>\n<li>Transitions de phase et ph\u00e9nom\u00e8nes critiques.<\/li>\n<li>Heuristique de minimisation \u00e9nerg\u00e9tique.<\/li>\n<li>Visualisation des mod\u00e8les \u00e9mergents.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Le mod\u00e8le Ising relie la physique statistique, les m\u00e9thodes de calcul et l'apprentissage automatique. Il a \u00e9galement un comportement de r\u00e9f\u00e9rence connu, ce qui rend possible la validation.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Calculez la capacit\u00e9 thermique et la sensibilit\u00e9 \u00e0 proximit\u00e9 de la temp\u00e9rature critique.<\/li>\n<li>\u00c9tudiez diff\u00e9rentes g\u00e9om\u00e9tries de r\u00e9seau.<\/li>\n<li>Impl\u00e9mentez l'algorithme de cluster Wolff ou Swendsen-Wang.<\/li>\n<\/ul>\n<h2 id=\"advanced-projects\">Projets avanc\u00e9s<\/h2>\n<p>Ces projets n\u00e9cessitent une exp\u00e9rience en mati\u00e8re de m\u00e9thodes num\u00e9riques plus solides, une exp\u00e9rience de calcul parall\u00e8le ou une connaissance de la physique sp\u00e9cialis\u00e9e. Ils conviennent aux travaux de niveau de th\u00e8se ou de synth\u00e8se.<\/p>\n<h3>7. Solveur de diffusion bas\u00e9 sur Fipy<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br> Dur\u00e9e&nbsp;: 8 \u00e0 12&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: un probl\u00e8me de diffusion r\u00e9aliste \u00e0 l'aide de Fipy. Cela relie les concepts PDE et la discr\u00e9tisation des volumes finis \u00e0 des logiciels scientifiques de qualit\u00e9 de production.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202c\/\u2202t = \u2207\u00b7(D\u2207c) + S\n<\/code><\/pre>\n<p>Il s'agit d'une \u00e9quation de diffusion avec des termes sources et des conditions aux limites telles que Dirichlet, Neumann ou Robin.<\/p>\n<p>Pile Python&nbsp;: <code>FiPy<\/code>, <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">from fipy import Grid2D, CellVariable, DiffusionTerm\n\nmesh = Grid2D(nx=50, ny=50, dx=0.1, dy=0.1)\n\nc = CellVariable(mesh=mesh, name=\"concentration\", value=0.0)\nc.constrain(1.0, mesh.facesLeft)\n\neq = DiffusionTerm(coeff=1.0) == 0\n\n# Solve to steady state\neq.solve(var=c)\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Discr\u00e9tisation en volume fini avec Fipy.<\/li>\n<li>Gestion des conditions aux limites de Dirichlet, Neumann et Robin.<\/li>\n<li>\u00c9tudes de qualit\u00e9 et de convergence de maillage.<\/li>\n<li>Connecter des solutions analytiques aux r\u00e9sultats num\u00e9riques.<\/li>\n<\/ul>\n<p>Pourquoi ce projet&nbsp;: si vous souhaitez travailler dans la science informatique de mani\u00e8re professionnelle, il est pr\u00e9cieux de savoir comment utiliser et \u00e9tendre un code de volume fini comme Fipy. Ce projet combine la configuration du maillage, la formulation des termes, la configuration du solveur et le post-traitement.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Ajoutez des termes de r\u00e9action pour les syst\u00e8mes de r\u00e9action-diffusion ou les sch\u00e9mas de Turing.<\/li>\n<li>Comparez les r\u00e9sultats de Fipy avec les solutions de r\u00e9f\u00e9rence analytiques.<\/li>\n<li>Parall\u00e8lement avec le support MPI de Fipy.<\/li>\n<\/ul>\n<h3>8. Monte Carlo pour le prix des options<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br> Dur\u00e9e&nbsp;: 6 \u00e0 10&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler&nbsp;: les m\u00e9thodes de Monte&nbsp;Carlo dans la finance, y compris la tarification des options europ\u00e9ennes et am\u00e9ricaines en utilisant des trajectoires de cours simul\u00e9es. Cela relie la science informatique avec les math\u00e9matiques appliqu\u00e9es et la finance quantitative.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>dS = \u03bcS dt + \u03c3S dW\nV = e^(-rT) E[max(S-K, 0)]\n<\/code><\/pre>\n<p>Pile Python&nbsp;: <code>NumPy<\/code>, <code>pandas<\/code>, <code>Matplotlib<\/code>, <code>scipy.stats<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\ndef monte_carlo_option(S0, K, r, sigma, T, num_paths=10000):\n    \"\"\"Price a European call option using Monte Carlo.\"\"\"\n    z = np.random.randn(num_paths)\n    S_final = S0 * np.exp(\n        (r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * z\n    )\n    \n    payoffs = np.maximum(S_final - K, 0)\n    price = np.exp(-r * T) * np.mean(payoffs)\n    stderr = np.exp(-r * T) * np.std(payoffs) \/ np.sqrt(num_paths)\n    \n    return price, stderr\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Simulation stochastique et g\u00e9n\u00e9ration de trajectoires.<\/li>\n<li>Analyse de convergence avec la taille de l'\u00e9chantillon.<\/li>\n<li>Les techniques de r\u00e9duction de la variance telles que les variables antith\u00e9tiques et les variables de contr\u00f4le.<\/li>\n<li>Tarification des options am\u00e9ricaines avec les m\u00e9thodes de Monte Carlo des moindres carr\u00e9s.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : Les m\u00e9thodes de Monte Carlo fonctionnent dans des contextes de grande dimension, ce qui les rend utiles dans la finance, la science des mat\u00e9riaux, la th\u00e9orie des champs quantiques et la quantification de l'incertitude.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Impl\u00e9mentez l'algorithme Longstaff-Schwartz pour les options am\u00e9ricaines.<\/li>\n<li>\u00c9tudiez les Grecs tels que Delta, Gamma et Vega.<\/li>\n<li>Comparez les r\u00e9sultats avec la solution analytique de Black-Scholes.<\/li>\n<\/ul>\n<h3>9. Solidification et simulation de champ de phase<\/h3>\n<p>Difficult\u00e9&nbsp;: Avanc\u00e9<br> Dur\u00e9e&nbsp;: 12 \u00e0 16&nbsp;semaines<\/p>\n<p>Ce que vous allez simuler : La m\u00e9thode du champ de phase est largement utilis\u00e9e dans la science des mat\u00e9riaux informatiques pour l'\u00e9volution de la microstructure, y compris la croissance des grains, la solidification dendritique et la formation de pr\u00e9cipit\u00e9s.<\/p>\n<p>Mod\u00e8le math\u00e9matique&nbsp;:<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = -\u0393 [\u03c6(1-\u03c6)\u00b2 + F'(\u03c6) + \u03bb\u2207\u03c6\u00b7\u2207\u03c6]\n<\/code><\/pre>\n<p>Ici, <code>\u03c6<\/code> est le champ de phase, <code>\u0393<\/code> est la mobilit\u00e9, et <code>F(\u03c6)<\/code> est le potentiel de double puits.<\/p>\n<p>Pile Python&nbsp;: <code>FiPy<\/code>, <code>NumPy<\/code>, <code>Matplotlib<\/code><\/p>\n<p>Mod\u00e8le de code&nbsp;:<\/p>\n<pre><code class=\"language-python\">from fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\n\nmesh = Grid2D(nx=100, ny=100, dx=1.0, dy=1.0)\n\nphi = CellVariable(mesh=mesh, name=\"phase_field\", value=0.0)\n\n# Example starter equation structure:\n# TransientTerm == diffusion + source-like phase evolution term\neq = TransientTerm(var=phi) == DiffusionTerm(coeff=1.0, var=phi)\n\nfor step in range(100):\n    eq.solve(var=phi, dt=0.01)\n<\/code><\/pre>\n<p>R\u00e9sultats d'apprentissage&nbsp;:<\/p>\n<ul>\n<li>Formulation en champ de phase et potentiel de double puits.<\/li>\n<li>Largeur de l'interface et param\u00e8tres de mobilit\u00e9.<\/li>\n<li>couplage avec des \u00e9quations de diffusion.<\/li>\n<li>Comparaison avec des solutions de solidification analytique ou des rep\u00e8res de la litt\u00e9rature.<\/li>\n<\/ul>\n<p>Pourquoi ce projet : La simulation en champ de phase est utilis\u00e9e dans la recherche sur les sciences des mat\u00e9riaux dans le monde. Il relie la microstructure, la thermodynamique et les m\u00e9thodes num\u00e9riques.<\/p>\n<p>Extensions sugg\u00e9r\u00e9es&nbsp;:<\/p>\n<ul>\n<li>Associez le champ de phase \u00e0 la diffusion pour les mod\u00e8les de pi\u00e9geage de solut\u00e9s.<\/li>\n<li>\u00c9tudiez les mod\u00e8les de croissance dendritique dans diff\u00e9rentes conditions de sous-refroidissement.<\/li>\n<li>Comparez les r\u00e9sultats avec les micrographies exp\u00e9rimentales de la litt\u00e9rature.<\/li>\n<\/ul>\n<h2 id=\"how-to-choose\">Comment choisir votre projet<\/h2>\n<p>Tous les projets ne conviennent pas \u00e0 tous les \u00e9tudiants. Utilisez le cadre ci-dessous pour choisir un point de d\u00e9part r\u00e9aliste.<\/p>\n<h3>Faites correspondre votre arri\u00e8re-plan<\/h3>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>vous savez actuellement<\/th>\n<th>Projet de d\u00e9marrage recommand\u00e9<\/th>\n<\/tr>\n<tr>\n<td>Principes de base de Python, pas de fond num\u00e9rique<\/td>\n<td>\u00c9quation de chaleur<\/td>\n<\/tr>\n<tr>\n<td>Python Plus Analyse num\u00e9rique d'introduction<\/td>\n<td>Mod\u00e8le de monsieur ou \u00e9quation d'onde<\/td>\n<\/tr>\n<tr>\n<td>Course ODE\/PDE et alg\u00e8bre lin\u00e9aire<\/td>\n<td>It\u00e9ration de Jacobi ou dynamique mol\u00e9culaire<\/td>\n<\/tr>\n<tr>\n<td>M\u00e9canique statistique ou math\u00e9matiques avanc\u00e9es<\/td>\n<td>Mod\u00e8le d'acc\u00e8s<\/td>\n<\/tr>\n<tr>\n<td>Objectifs de recherche ou de th\u00e8se<\/td>\n<td>Diffusion FIPY ou simulation en champ de phase<\/td>\n<\/tr>\n<\/tbody><\/table>\n<h3>Ce qui compte le plus<\/h3>\n<ol>\n<li>Pr\u00e9requis math\u00e9matiques. Ne passez pas \u00e0 la simulation en champ de phase si vous n'avez pas encore r\u00e9solu un PDE num\u00e9riquement.<\/li>\n<li>Confort de programmation. Si vous \u00eates nouveau sur Python, commencez par l'\u00e9quation de la chaleur et construisez \u00e0 partir de l\u00e0.<\/li>\n<li>horizon temporel. Un projet de semestre a besoin d'une port\u00e9e claire. Choisissez quelque chose qui peut produire un r\u00e9sultat significatif en 4 \u00e0 8 semaines.<\/li>\n<li>objectifs de carri\u00e8re. La science des mat\u00e9riaux pointe vers le champ de phase ou la dynamique mol\u00e9culaire. Financer des points vers Monte-Carlo. Les logiciels de recherche pointent vers FIPY ou des solveurs it\u00e9ratifs.<\/li>\n<\/ol>\n<h3>erreurs courantes que font les \u00e9l\u00e8ves<\/h3>\n<ol>\n<li>Choisir un projet trop ambitieux. Un solveur de champ de phase 3D complet en quatre semaines n'est pas r\u00e9aliste. Mettez-le jusqu'\u00e0 2D avec des param\u00e8tres simples.<\/li>\n<li>Sauter la comparaison de solutions analytiques. Toujours comparer les r\u00e9sultats num\u00e9riques \u00e0 une solution connue lorsque cela est possible.<\/li>\n<li>Ignorer la condition LFC. De nombreuses simulations pour d\u00e9butants \u00e9chouent car le pas de temps est trop important.<\/li>\n<li>N'utilisez pas le contr\u00f4le de version. Git n'est pas facultatif pour un projet s\u00e9rieux. Engagez-vous r\u00e9guli\u00e8rement afin de vous remettre des erreurs.<\/li>\n<\/ol>\n<h2 id=\"what-to-skip\">Que faut-il sauter ?<\/h2>\n<p>Tous les projets informatiques ne sont pas \u00e9galement utiles pour la simulation d'apprentissage. \u00c9vitez-les sauf si vous avez une raison sp\u00e9cifique.<\/p>\n<ul>\n<li>Simulations g\u00e9n\u00e9riques de \"Hello World\". Si un projet n'implique pas une PDE, une loi de conservation, un solveur num\u00e9rique ou un mod\u00e8le stochastique, il ne s'agit peut-\u00eatre pas d'un projet de science informatique.<\/li>\n<li>Projets qui n\u00e9cessitent du mat\u00e9riel sp\u00e9cial au d\u00e9part. Ne commencez pas avec la dynamique mol\u00e9culaire du GPU si vous n'avez pas construit la dynamique mol\u00e9culaire du CPU en premier.<\/li>\n<li>Couplage multi-physique trop complexe. Commencez par des solveurs \u00e0 une seule physique. Le couplage multi-physique est un sujet de recherche, et non un premier projet \u00e9tudiant id\u00e9al.<\/li>\n<\/ul>\n<h2 id=\"references\">O\u00f9 trouver le code de r\u00e9f\u00e9rence<\/h2>\n<p>Plusieurs cours universitaires et projets open source fournissent des r\u00e9f\u00e9rences utiles :<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/CompPhysics\/ComputationalPhysics\">University of Oslo Computational Physics<\/a> \u2014 Mat\u00e9riel de cours avec descriptions et solutions de projets.<\/li>\n<li><a href=\"https:\/\/github.com\/aiidateam\/aiida-core\/wiki\/GSoC-2025-Projects\">Projets GSOC d'aiida<\/a> \u2014 Id\u00e9es de projets d'\u00e9tudiants en science des mat\u00e9riaux informatiques.<\/li>\n<li><a href=\"https:\/\/www.fipy.org\/\">documentation FIPY<\/a> \u2014 Tutoriels officiels et exemples de la biblioth\u00e8que de volumes finis.<\/li>\n<\/ul>\n<p>Utilisez ces ressources comme points de d\u00e9part, et non comme points de terminaison. L'apprentissage r\u00e9el se produit lorsque vous \u00e9crivez et d\u00e9boguez vous-m\u00eame le code.<\/p>\n<h2 id=\"conclusion\">R\u00e9flexions finales<\/h2>\n<p>La diff\u00e9rence entre la lecture des m\u00e9thodes num\u00e9riques et la r\u00e9daction d'une simulation est \u00e9norme. Vous pouvez lire de nombreux manuels de PDE et ne pas comprendre ce qui se passe lorsqu'une \u00e9quation de diffusion est discr\u00e9tis\u00e9e avec un pas de temps trop volumineux.<\/p>\n<p>Choisissez un projet, commencez \u00e0 coder et it\u00e9rez. Quelques semaines de d\u00e9bogage peuvent enseigner plus de mois de conf\u00e9rences passives.<\/p>\n<p>Si vous avez besoin d'aide pour r\u00e9soudre un probl\u00e8me de simulation sp\u00e9cifique, comme le choix du bon solveur, le d\u00e9bogage d'une instabilit\u00e9 num\u00e9rique ou la mise \u00e0 l'\u00e9chelle du code \u00e0 plusieurs processeurs, envisagez de demander \u00e0 quelqu'un de l'exp\u00e9rience. Un bon soutien peut vous aider \u00e0 \u00e9viter les pi\u00e8ges courants tout en faisant le travail vous-m\u00eame.<\/p>\n<h2 id=\"related-guides\">Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/when-to-use-fem-fvm-fdm\/\">Quand utiliser FEM, FVM ou FDM&nbsp;: une comparaison pratique pour les d\u00e9butants<\/a> - Comprendre les m\u00e9thodes de discr\u00e9tisation avant de commencer \u00e0 coder.<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\">\u00c9tudes de qualit\u00e9 et de convergence des mailles&nbsp;: un guide pratique<\/a> - vous assurer que votre grille ne ruine pas votre simulation.<\/li>\n<li><a href=\"https:\/\/matforge.org\/python-debugging-scientific-code-print-statements-profiling\/\">d\u00e9bogage de Python pour le code scientifique&nbsp;: des instructions d'impression au profilage<\/a>&nbsp;: strat\u00e9gies de d\u00e9bogage pour le code num\u00e9rique.<\/li>\n<li><a href=\"https:\/\/matforge.org\/computational-materials-science-frameworks-moose-vs-prisms-pf-vs-openphase\/\">Cadres de science des mat\u00e9riaux informatiques&nbsp;: Moose vs&nbsp;Prisms-PF vs OpenPhase<\/a> \u2014 Si vous voulez aller au-del\u00e0 de Python.<\/li>\n<\/ul>\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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Points \u00e0 retenir cl\u00e9s Les id\u00e9es de projets organis\u00e9s couvrent les niveaux d\u00e9butants, interm\u00e9diaires et avanc\u00e9s, en mettant l&rsquo;accent sur la simulation et la science informatique. Les niveaux de difficult\u00e9 refl\u00e8tent les conditions pr\u00e9alables, la complexit\u00e9 des math\u00e9matiques et l&rsquo;investissement en temps attendu. Des mod\u00e8les de code sont inclus pour chaque projet afin que les [&hellip;]<\/p>\n","protected":false,"raw":""},"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=355","iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1275","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants<\/title>\n<meta name=\"description\" content=\"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d&#039;apprentissage et une feuille de route.\" \/>\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\/student-project-ideas-computational-science-simulation\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants\" \/>\n<meta property=\"og:description\" content=\"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d&#039;apprentissage et une feuille de route.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:31:31+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=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/\"},\"author\":{\"name\":\"Elena Markovska\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"headline\":\"Id\u00e9es de projets d&rsquo;\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code\",\"datePublished\":\"2026-08-21T14:31:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/\"},\"wordCount\":3107,\"commentCount\":0,\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/\",\"name\":\"Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:31:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"description\":\"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d'apprentissage et une feuille de route.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/student-project-ideas-computational-science-simulation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Id\u00e9es de projets d&#8217;\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code\"}]},{\"@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":"Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants","description":"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d'apprentissage et une feuille de route.","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\/student-project-ideas-computational-science-simulation\/","og_locale":"fr_FR","og_type":"article","og_title":"Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants","og_description":"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d'apprentissage et une feuille de route.","og_url":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:31:31+00:00","author":"Elena Markovska","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Elena Markovska","Dur\u00e9e de lecture estim\u00e9e":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/"},"author":{"name":"Elena Markovska","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"headline":"Id\u00e9es de projets d&rsquo;\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code","datePublished":"2026-08-21T14:31:31+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/"},"wordCount":3107,"commentCount":0,"articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/","url":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/","name":"Id\u00e9es de projets de sciences informatiques pour les \u00e9tudiants","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:31:31+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"description":"Explorez les id\u00e9es de projets de sciences et de simulations informatiques pour les \u00e9tudiants, avec des niveaux de difficult\u00e9, des mod\u00e8les de code Python, des r\u00e9sultats d'apprentissage et une feuille de route.","breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/student-project-ideas-computational-science-simulation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Id\u00e9es de projets d&#8217;\u00e9tudiants pour la science informatique et la simulation\u00a0: liste organis\u00e9e avec des mod\u00e8les de code"}]},{"@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\/1275","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=1275"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1275\/revisions"}],"predecessor-version":[{"id":1415,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1275\/revisions\/1415"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}