diff --git a/tp/edo-general.ipynb b/tp/edo-general.ipynb index 1f8c20ded18e824b6c3433b4443d824716a101c0..5ea6967fe6b7079ae52f443ec8bb7b49e415020e 100644 --- a/tp/edo-general.ipynb +++ b/tp/edo-general.ipynb @@ -12,7 +12,7 @@ "# Intégration numérique\n", "\n", "- Date : 2023-2024\n", - "- Durée approximative : 1h" + "- Durée approximative : 1h15" ] }, { @@ -166,6 +166,74 @@ "plot(p1, p2, p3, p4, size=(900, 600))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sur l'explosion des solutions en temps fini\n", + "\n", + "Nous allons ici résoudre le problème à valeur initiale $\\dot{x}(t) = 1 + x^p(t)$ avec $p \\ge 1$ et $x(0)=0$. \n", + "\n", + "- Coder la fonction $f$ qui permet d'écrire l'équation différentielle sous la forme $\\dot{x}(t)=f(t,x(t))$.\n", + "- Déterminer à partir de quelle valeur de $p\\ge 1$ la solution explose en temps fini (à $0.1$ près)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + " Second membre de l'IVP\n", + " x : vecteur d'état\n", + " p : scalaire\n", + " t : variable de temps. Ici le temps n'intervient pas explicitement, le système est autonome.\n", + "\"\"\"\n", + "function f(x, p, t)\n", + " return 1+x^p\n", + "end\n", + "\n", + "#\n", + "x0 = 0.0\n", + "t0 = 0.0\n", + "tf = 3\n", + "tspan = (t0, tf) # instants initial et terminal\n", + "\n", + "#\n", + "xspan = 0:0.01:2\n", + "\n", + "#\n", + "pf = plot()\n", + "px = plot()\n", + "\n", + "#\n", + "p = 1\n", + "prob = ODEProblem(f, x0, tspan, p, reltol = 1.e-8, abstol = 1.e-8) # définition du problème en Julia\n", + "sol = solve(prob) # intégration numérique\n", + "pf = plot!(pf, xspan, x -> (f(x, p, t0)-1), label = \"p=$p\") # affichage du second membre\n", + "px = plot!(px, sol, label = \"p=$p\") # affichage de la solution\n", + "\n", + "#\n", + "p = 1 # A MODIFIER\n", + "prob = ODEProblem(f, x0, tspan, p, reltol = 1.e-8, abstol = 1.e-8) # définition du problème en Julia\n", + "sol = solve(prob) # intégration numérique\n", + "pf = plot!(pf, xspan, x -> (f(x, p, t0)-1), label = \"p=$p\") # affichage du second membre\n", + "px = plot!(px, sol, label = \"p=$p\") # affichage de la solution\n", + "\n", + "#\n", + "p = 2\n", + "prob = ODEProblem(f, x0, tspan, p, reltol = 1.e-8, abstol = 1.e-8) # définition du problème en Julia\n", + "sol = solve(prob) # intégration numérique\n", + "pf = plot!(pf, xspan, x -> (f(x, p, t0)-1), label = \"p=$p\") # affichage du second membre\n", + "px = plot!(px, sol, label = \"p=$p\") # affichage de la solution\n", + "\n", + "#\n", + "plot!(pf, xlims=(0, 2), ylims=(0, 4))\n", + "plot!(px, xlims=(t0, tf), ylims=( 0, 100))\n", + "plot(pf, px, size=(900, 400))" + ] + }, { "attachments": {}, "cell_type": "markdown",