diff --git a/5_integral.jl b/5_integral.jl index 83e3302592654dc5368b86d98b763b946a79f1d3..d89eb389d964850de8f5c0d58407dbcdbb2b74b9 100644 --- a/5_integral.jl +++ b/5_integral.jl @@ -164,43 +164,174 @@ On peut maintenant dérouler le calcul de l'intégration: # â•”â•â•¡ 5b54b89b-09cc-4dbe-872e-b241bae147eb md""" -**Point d'attention** Faites attention au sens de l'intégral ! La borne inférieur doit toujours être supérieure à la borne supérieure. Ici, ``1 - 1/x`` est supérieur à ``0`` car ``x`` est supérieur à ``1`` donc ``1 - 1/x`` est bien la borne supérieure. Si les bornes ne sont pas mises dans le bon sens, on obtient l'opposé de l'intégral qu'on cherche à calculer ! Pour être sûr de ne pas vous tromper, faites le dessin et en vérifiez que les flèches vont bien dans le sens de ``x`` (resp. ``y``) croissant. +### Point d'attention + +#### Bornes dans le mauvais sens + +Faites attention au sens de l'intégral ! La borne inférieur doit toujours être inférieure à la borne supérieure. Ici, ``1 - 1/x`` est supérieur à ``0`` car ``x`` est supérieur à ``1`` donc ``1 - 1/x`` est bien la borne supérieure. Si les bornes ne sont pas mises dans le bon sens, on obtient l'opposé de l'intégral qu'on cherche à calculer ! Pour être sûr de ne pas vous tromper, faites le dessin et en vérifiez que les flèches vont bien dans le sens de ``x`` (resp. ``y``) croissant. Par exemple, si on met ``1 - 1/x`` comme borne inférieure et ``0`` comme borne supérieure, ça revient à mettre les flèches comme dans le dessin ci-dessous. On voit que les flèches vont vers le bas, ce qui correspond à un sens décrossant pour ``x``, ce qui indique que les bornes sont dan sle mauvais sens ! +""" + +# â•”â•â•¡ 21fcbf6d-f48b-4c55-a5c2-c27e8126f691 +md""" +#### Mauvais côté de la courbe + +Il faut également faire attention à sélectionner les bonnes bornes. La variables ``y`` a initialement comme bornes ``0`` et ``1/2``. Si on prend ``1/2`` comme borne, +l'intégrale qu'on fait correspond au dessin ci-dessous. +""" + +# â•”â•â•¡ ceb1ef2c-2630-447c-a867-5e237e951d57 +md""" +On voit que les flèches ne sont pas du même côté de la courbe par rapport à l'intégrale initiale. Ces bornes ne calculent donc pas la bonne intégrale! +""" + +# â•”â•â•¡ 1e663c6f-e6bb-4bb6-bfec-d3b000c4587b +md""" +#### Fonction non-injective + +Lorsqu'on change l'ordre des intégrales, il faut inverser la formule pour avoir l'expression de ``y`` en fonction de ``x`` depuis l'expression de ``x`` en fonction de ``y``. Si la fonction n'est pas injective, elle n'a pas d'inverse unique, que faire ? + +Il faut alors décomposer l'intégrale en plusieurs sous-intégrales pour lesquelles la fonction est injective quand elle est restreinte à chaque sous-interval. +Prenons comme exemple l'intégrale: +```math +\int_{x=-2}^2 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x +``` +Le dessin correspondant est: +""" + +# â•”â•â•¡ 24ab9695-7c29-4b80-8042-7ddb0da3461c +md""" +La fonction ``y = x^2`` n'est pas inversible car il y a deux inverses, on a ``x = \pm\sqrt{y}``. Si on restricte la fonction pour ``x < 0``, on a alors l'inverse unique ``x = -\sqrt{y}``. On a donc +```math +\int_{x=-2}^0 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x += +\int_{y=0}^2 \int_{x=-\sqrt{y}}^0 f(x, y) \,\text{d}x\,\text{d}y +``` +""" + +# â•”â•â•¡ c7ade42d-3614-4005-8686-380821ee6866 +md""" +Similairement, si on restricte la fonction pour ``x \ge 0``, on a l'inverse unique ``x = \sqrt{y}``. On a donc +```math +\int_{x=0}^2 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x += +\int_{y=0}^2 \int_{x=0}^{\sqrt{y}} f(x, y) \,\text{d}x\,\text{d}y +``` +""" + +# â•”â•â•¡ a5721593-f068-4fe4-a01a-3272c746d7b7 +md""" +On peut alors combiner les deux pour donner l'intégrale de ``-2`` à ``2``. +Dans ce cas particulier, on peut en fait recombiner les 2 intégrales finales pour avoir une seule intégrale: +```math +\begin{align} +\int_{x=-2}^2 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x +& = +\int_{x=-2}^0 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x + +\int_{x=0}^2 \int_{y=x^2}^4 f(x, y) \,\text{d}y\,\text{d}x\\ +& = +\int_{y=0}^2 \int_{x=-\sqrt{y}}^0 f(x, y) \,\text{d}x\,\text{d}y ++ +\int_{y=0}^2 \int_{x=0}^{\sqrt{y}} f(x, y) \,\text{d}x\,\text{d}y\\ +& = +\int_{y=0}^2 \int_{x=-\sqrt{y}}^{\sqrt{y}} f(x, y) \,\text{d}x\,\text{d}y +\end{align} +``` +""" + +# â•”â•â•¡ 29c71793-c359-4363-875d-9e00fcff324a +md""" +Il se peut aussi qu'on ne puisse pas combiner les intégrales obtenues après avoir été séparées. Par exemple: +```math +\begin{align} +\int_{x=-2}^2 \int_{y=0}^{x^2} f(x, y) \,\text{d}y\,\text{d}x +& = +\int_{x=-2}^0 \int_{y=0}^{x^2} f(x, y) \,\text{d}y\,\text{d}x + +\int_{x=0}^2 \int_{y=0}^{x^2} f(x, y) \,\text{d}y\,\text{d}x\\ +& = +\int_{y=0}^2 \int_{x=-2}^{-\sqrt{y}} f(x, y) \,\text{d}x\,\text{d}y ++ +\int_{y=0}^2 \int_{x=\sqrt{y}}^2 f(x, y) \,\text{d}x\,\text{d}y +\end{align} +``` +Les dessins correspondants sont: """ # â•”â•â•¡ 234efaaa-0906-4e2a-9a06-aeec91fbe9ef md"## Utilitaires" -# â•”â•â•¡ 9555522d-ce69-4ba1-8ae4-e9d55ddb6dfe -red, green, blue, purple = Colors.JULIA_LOGO_COLORS +# â•”â•â•¡ 872bd97a-a265-4fc4-8785-f48be67f557d +import PlotlyBase, PlotlyKaleido + +# â•”â•â•¡ c6cfba83-d68c-4696-b0ee-e6256baa7549 +_apply(x::Function, y) = x.(y) -# â•”â•â•¡ c03f48f1-b957-4700-bbb2-2508e39f8f85 -let +# â•”â•â•¡ b0ea40ff-7933-4936-ae61-7c7a32ad84a4 +_apply(x::Real, _) = x + +# â•”â•â•¡ 382f30d4-80d0-4587-85e5-ecdda7d1d0cd +function dessin(xinf, xsup, yinf, ysup; length = 16, color = Colors.JULIA_LOGO_COLORS.blue) gr() - y = range(0, 0.5, length = 16) - x = 1 ./ (1 .- y) - p = plot(x, y, ratio = :equal, label = "", color = blue) - plot!([2, 2], [0, 0.5], label = "", color = blue) - for y in y - plot!([1 / (1 - y), 2], _ -> y, label = "", color = blue, arrow = (:closed, 1.0)) + p = plot(ratio = :equal) + if xinf isa Real && xsup isa Real + x = range(xinf, stop = xsup; length) + for y in [yinf, ysup] + if y isa Function + plot!(x, y.(x); label = "", color) + else + plot!([xinf, xsup], [y, y]; label = "", color) + end + end + for x in x + plot!([x, x], [_apply(yinf, x), _apply(ysup, x)]; label = "", color, arrow = (:closed, 1.0)) + end + elseif yinf isa Real && ysup isa Real + y = range(yinf, stop = ysup; length) + for x in [xinf, xsup] + if x isa Function + plot!(x.(y), y; label = "", color) + else + plot!([x, x], [yinf, ysup]; label = "", color) + end + end + for y in y + plot!([_apply(xinf, y), _apply(xsup, y)], [y, y]; label = "", color, arrow = (:closed, 1.0)) + end end - p + return p end +# â•”â•â•¡ c03f48f1-b957-4700-bbb2-2508e39f8f85 +dessin(y -> 1 / (1 - y), 2, 0, 0.5) + # â•”â•â•¡ 67118f0e-128f-4806-9446-36cc708837b2 -let - gr() - x = range(1, 2, length = 16) - y = 1 .- 1 ./ x - p = plot(x, y, ratio = :equal, label = "", color = blue) - plot!([1, 2], [0, 0], label = "", color = blue) - for x in x - plot!([x, x], [0, 1 - 1/x], label = "", color = blue, arrow = (:closed, 1.0)) - end - p -end +dessin(1, 2, 0, x -> 1 - 1/x) -# â•”â•â•¡ 872bd97a-a265-4fc4-8785-f48be67f557d -import PlotlyBase, PlotlyKaleido +# â•”â•â•¡ 029c8382-0f68-4c64-90aa-d8466fa21463 +dessin(1, 2, x -> 1 - 1/x, 0) + +# â•”â•â•¡ 9a9db9ac-a0fb-4235-8b52-95c1895bddea +dessin(1, 2, x -> 1 - 1/x, 0.5) + +# â•”â•â•¡ c9020f59-ea76-46b5-918a-98c5970c0f6c +dessin(-2, 2, x -> x^2, 4) + +# â•”â•â•¡ 2524c01a-b813-4b9d-b2c3-91fdd6634c41 +dessin(y -> -√y, 0, 0, 4) + +# â•”â•â•¡ 054a4c66-893c-47bf-a07d-ae2d4210e7d3 +dessin(0, y -> √y, 0, 4) + +# â•”â•â•¡ 56cda0a6-f43d-43ec-b864-6076aaa28a0c +dessin(y -> -√y, y -> √y, 0, 4) + +# â•”â•â•¡ 920374f2-dab8-46a4-b6f7-8fea7664b47f +dessin(-2, 2, 0, x -> x^2) + +# â•”â•â•¡ 9d923110-2b2a-4c83-a0ca-a91b5b47f6fd +dessin(-2, y -> -√y, 0, 4) + +# â•”â•â•¡ 6b3ae83f-342b-4724-8bc6-0d7b85aefc01 +dessin(y -> √y, 2, 0, 4) # â•”â•â•¡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ @@ -1385,9 +1516,27 @@ version = "1.4.1+1" # â• â•67118f0e-128f-4806-9446-36cc708837b2 # ╟─79533bc7-93d2-4e02-ba8e-7e58f50cab08 # ╟─5b54b89b-09cc-4dbe-872e-b241bae147eb +# â• â•029c8382-0f68-4c64-90aa-d8466fa21463 +# ╟─21fcbf6d-f48b-4c55-a5c2-c27e8126f691 +# â• â•9a9db9ac-a0fb-4235-8b52-95c1895bddea +# ╟─ceb1ef2c-2630-447c-a867-5e237e951d57 +# ╟─1e663c6f-e6bb-4bb6-bfec-d3b000c4587b +# â• â•c9020f59-ea76-46b5-918a-98c5970c0f6c +# ╟─24ab9695-7c29-4b80-8042-7ddb0da3461c +# â• â•2524c01a-b813-4b9d-b2c3-91fdd6634c41 +# ╟─c7ade42d-3614-4005-8686-380821ee6866 +# â• â•054a4c66-893c-47bf-a07d-ae2d4210e7d3 +# ╟─a5721593-f068-4fe4-a01a-3272c746d7b7 +# â• â•56cda0a6-f43d-43ec-b864-6076aaa28a0c +# ╟─29c71793-c359-4363-875d-9e00fcff324a +# â• â•920374f2-dab8-46a4-b6f7-8fea7664b47f +# â• â•9d923110-2b2a-4c83-a0ca-a91b5b47f6fd +# â• â•6b3ae83f-342b-4724-8bc6-0d7b85aefc01 # ╟─234efaaa-0906-4e2a-9a06-aeec91fbe9ef # â• â•2ebca4fb-28db-485d-a44e-b21f42c7d474 -# â• â•9555522d-ce69-4ba1-8ae4-e9d55ddb6dfe # â• â•872bd97a-a265-4fc4-8785-f48be67f557d +# â• â•c6cfba83-d68c-4696-b0ee-e6256baa7549 +# â• â•b0ea40ff-7933-4936-ae61-7c7a32ad84a4 +# â• â•382f30d4-80d0-4587-85e5-ecdda7d1d0cd # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002