Longueur d'une portion de courbe

On considère dans cet exercice une fonction \(f\) continue (c'est à dire que l'on peut tracer sans lever le crayon). On appelle \(C_f\) sa représentation graphique dans un repère orthonormé.

On cherche à calculer une valeur approchée de la longueur d'une portion de \(C_f\).

Le principe est de remplacer la portion de la courbe par une succession de segments reliant des points de \(C_f\) régulièrement espacés et de calculer la somme des longueurs de ces segments.

Dans l'exemple qui suit, on peut mesurer la longueur de différents segments tracés. Pour un petit nombre de segments, la mesure obtenue sera très imprécise mais, plus on augmentera ce nombre, plus la longueur calculée se rapprochera de la longueur de la portion de courbe.

Longueur de portion de courbe

Longueur de portion de courbe

Longueur de portion de courbe

Longueur de portion de courbe

Longueur de portion de courbe

De façon formelle, on désire donc déterminer la longueur de \(C_f\) pour \(x\) appartenant à l'intervalle \([a;b]\) Pour cela nous allons créer \(n\) subdivisions de longueur \(h = \dfrac{b-a}{n}\).

Nous considérerons les points de \(C_f\) d'abscisses respectives :

\[ \begin{align*} x_0 &=a\\ \\ x_1 &=a + h\\ \\ x_2 &=a + 2h\\ \\ ...\\ \\ x_n &=a + nh\\ &= b \end{align*} \]

De façon générale, on a, pour \(0 \leqslant i \leqslant n\) :

\[x_{i}=a + i\times h\]

La longueur d'un segment dont les extrémités ont pour abscisse \(x_i\) et \(x_{i+1}\) peut se calculer à l'aide du théorème de Pythagore en faisant :

\[ \begin{align*} L_i &=\sqrt{(x_{i+1}-x_i)^2+(f(x_i+h)-f(x_i))^2}\\ &=\sqrt{h^2+(f(x_i+h)-f(x_i))^2} \end{align*} \]
assert ?

Le mot clé assert est utilisé en Python afin de vérifier que des propositions sont vraies.

Ainsi, l'instruction assert 3 + 5*7 == 38 permet de vérifier que l'expression 3 + 5*7 est bien évaluée à 38.

Si c'est le cas, le programme continue de se dérouler normalement. Dans le cas contraire, le programme est interrompu et une erreur est signalée.

Comparaison de nombres flottants

Lorsqu'on écrit a = x ou x est un nombre réel, la valeur de a enregistrée en machine est une valeur approchée de x (quelques fois la valeur exacte). Cette valeur approchée a la forme d'un nombre flottant (le type float en Python). En conséquence, alors que des calculs et des comparaisons peuvent être effectués de manière exacte sur des réels, ils ne le sont que de manière approchée sur leur représentation en machine. On peut donc obtenir par exemple, avec a = x et b = y, l'expression a == b évaluée à True alors que x et y sont différents.

C'est pourquoi les tests ne vérifient pas l'égalité des résultats et des valeurs attendues mais leur proximité.

Ainsi, on peut vérifier que \(\sqrt{2} \approx 1,414214\) en faisantassert abs(1.414214 - sqrt(2)) < 1e-6. Ce test vérifie que les deux valeurs sont proches à \(10^{-6}\) près.

Racine carrée d'un nombre

La fonction permettant de calculer la racine carrée d'un nombre positif fait partie du module math. Elle est importée au début de cette version de l'exercice : from math import sqrt.

\(\sqrt{5}\) s'obtient avec sqrt(5)

La valeur renvoyée est bien souvent une valeur approchée du résultat. Regardons par exemple \({\sqrt{3}}^2\)

🐍 Console Python
>>> sqrt(3)**2
2.9999999999999996

La fonction sqrt renvoie un nombre flottant (type float) :

🐍 Console Python
>>> sqrt(16)
4.0

Longueur d'une portion de courbe de la fonction carré

On considère la fonction carré \(x\mapsto x^2\) définie avec Python par :

def f(x):
    return x**2

On appelle \(C_f\) sa représentation graphique dans un repère orthonormé.

Écrire la fonction longueur qui prend en paramètres les nombres a, b, n correspondant respectivement au début et à la fin de l'intervalle, ainsi qu'au nombre de segments considérés.

Cette fonction renvoie une valeur approchée de la longueur de \(C_f\) sur l'intervalle \([a;b]\) en utilisant \(n\) segments.

Exemples
>>> longueur(-1, 1, 1)  # [a, b] = [-1, 1] et 1 segment
2.0
>>> longueur(-1, 1, 10)  # [a, b] = [-1, 1] et 10 segments
2.951919570266655
>>> longueur(0, 2, 30)  # [a, b] = [0, 2] et 30 segments
4.646424448462787

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013:,ag)1ikn9/S=vmsuhb84y7ex6+2*o-dt c0(wr5_P3qplf050G0y0H0d0h0U0q0I0J0U0d0q0q0n010H0h0T010406050q0r0p0p0d0N0w040m0E0U0r0:0E0j050l0`0|0~100^0T04191g051j0l1j1l1g0^0G0h0o0(0*0,0.0s0h0e0s0U1z0s0H0?050Z0t0U0y1u0+0-011y1A1C1A0H1I1K1G0H0t0E0G101H0N1h0H0s0(130q0T0d0j0.0C011M1w010V0#0y0j0d0p0y1G1.1:1^1O1{1K1~200?0a0I0Q0N0E0T0E0q0h160j0I0X1,0N0N0y0J2l19230j1h0l1*2y0H1(1%1)0G250.1C0j1}2i1G1r1t0)1N2I0h2K0j1!1s1G0T2r1h2w2y2$0_1/2m2Q1_2V0N0}0U0?0I0g2v2*0@2)242,1O2.2:2=0C2^1:2`2w2H012 0d2;040I0R332x0^362}0.393b0I0v3f352*373l2=0O3p3h3r3j380E2/3a2=0A3w2{2+1v2~3B303c0x3G3i3J3k3L3D3c0u3P3y3R3A3C3m0k3X2|3Z3t040g0K3(3I2R3!3M0g2@1a2_3x3)3;3+0g323_343{3:2-3T3b0g3e413g3H3s460?0g3o4a2y2Z0y2y2O2B0G2F370J1!211h4n1k2!3H2%2_054s0X2#3Y3;0i0j0?0V2f0p3p4c3z0M2=4O3Q3}4J040}1*4T4G1_4R3c4!3|1_4I0?0h0p2h0N0H3p0I4P3*0?0q0S4;3w0643370i0?0X0V4)441O4%4@4i4^3}0V4K56370=040L5g3z4W0z5l3Z5i0f0b3w0I5v4@4U4+0?2r0H0r0N184i5x4#2~0?5o5b5y1O0E0?0D0D5p3;0p0h0?402$4 503z5204545T4$4S5M5I3k5e040U170e0r0y5D5*1O5i5k5-4*5J040d5{0.5i0c4?5c2-0?0t640166685N3k0?5F2(6h6e0?5s5u5w69610s6g5.015P040n6v60650?5~6l6w4W6c5G6s0.6y0F6B576i626d5r6P376y0l6V5m6j6q5v6L384`0E0|0y6Z3Z6y6A6K6m5V0?3.4i065w5H6C015%0V3B6.3}4-731_0E4%2T762~0t5A1:0e6-5 6Q6n5j6d4W6k4B6m5r5t6`6|6|6(5n0P0h7b6M0?6;2$6}7j4W636=6w6y0B7A6)047z7J6~6y5S7R7G0?6u7t7u6%6m4W0q6+207N6:7N7%7)7h7E6(7L7-4`4|4=7i5h6E7m7X6d7T7U6G6~6@045Y2_7F6W0?7M7V7|7l7{6!04558g5q7}8k74040z7y7+8b7@047Y837j6U8d3z6N8u8j8x8e6F7p6H5K8r8n1_5r0f8s045R7N8587346(8z5Z7v6m5%5B5D7o34898h7(6,3G0l4D4l1i4y0l4w2z4p192C2B1Z1#2B0d1J8=8^1s2`8^0Y0!0$04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013:,ag)1ikn9/S=vmsuhb84y7ex6+2*o-dt c0(wr5_P3qplf050G0y0H0d0h0U0q0I0J0U0d0q0q0n010H0h0T010406050q0r0p0p0d0N0w040m0E0U0r0:0E0j050l0`0|0~100^0T04191g051j0l1j1l1g0^0G0h0o0(0*0,0.0s0h0e0s0U1z0s0H0?050Z0t0U0y1u0+0-011y1A1C1A0H1I1K1G0H0t0E0G101H0N1h0H0s0(130q0T0d0j0.0C011M1w010V0#0y0j0d0p0y1G1.1:1^1O1{1K1~200?0a0I0Q0N0E0T0E0q0h160j0I0X1,0N0N0y0J2l19230j1h0l1*2y0H1(1%1)0G250.1C0j1}2i1G1r1t0)1N2I0h2K0j1!1s1G0T2r1h2w2y2$0_1/2m2Q1_2V0N0}0U0?0I0g2v2*0@2)242,1O2.2:2=0C2^1:2`2w2H012 0d2;040I0R332x0^362}0.393b0I0v3f352*373l2=0O3p3h3r3j380E2/3a2=0A3w2{2+1v2~3B303c0x3G3i3J3k3L3D3c0u3P3y3R3A3C3m0k3X2|3Z3t040g0K3(3I2R3!3M0g2@1a2_3x3)3;3+0g323_343{3:2-3T3b0g3e413g3H3s460?0g3o4a2y2Z0y2y2O2B0G2F370J1!211h4n1k2!3H2%2_054s0X2#3Y3;0i0j0?0V2f0p3p4c3z0M2=4O3Q3}4J040}1*4T4G1_4R3c4!3|1_4I0?0h0p2h0N0H3p0I4P3*0?0q0S4;3w0643370i0?0X0V4)441O4%4@4i4^3}0V4K56370=040L5g3z4W0z5l3Z5i0f0b3w0I5v4@4U4+0?2r0H0r0N184i5x4#2~0?5o5b5y1O0E0?0D0D5p3;0p0h0?402$4 503z5204545T4$4S5M5I3k5e040U170e0r0y5D5*1O5i5k5-4*5J040d5{0.5i0c4?5c2-0?0t640166685N3k0?5F2(6h6e0?5s5u5w69610s6g5.015P040n6v60650?5~6l6w4W6c5G6s0.6y0F6B576i626d5r6P376y0l6V5m6j6q5v6L384`0E0|0y6Z3Z6y6A6K6m5V0?3.4i065w5H6C015%0V3B6.3}4-731_0E4%2T762~0t5A1:0e6-5 6Q6n5j6d4W6k4B6m5r5t6`6|6|6(5n0P0h7b6M0?6;2$6}7j4W636=6w6y0B7A6)047z7J6~6y5S7R7G0?6u7t7u6%6m4W0q6+207N6:7N7%7)7h7E6(7L7-4`4|4=7i5h6E7m7X6d7T7U6G6~6@045Y2_7F6W0?7M7V7|7l7{6!04558g5q7}8k74040z7y7+8b7@047Y837j6U8d3z6N8u8j8x8e6F7p6H5K8r8n1_5r0f8s045R7N8587346(8z5Z7v6m5%5B5D7o34898h7(6,3G0l4D4l1i4y0l4w2z4p192C2B1Z1#2B0d1J8=8^1s2`8^0Y0!0$04.
Approximation de \(\pi\)

La méthode précédente permet de déterminer une valeur approchée de \(\pi\).

Considérons en effet la fonction \(f\) définie sur \([-1; 1]\) par \(f(x)= \sqrt{1-x^2}\). Sa représentation graphique est un demi-cercle de rayon \(1\) centré en l'origine du repère.

Le périmètre ce demi-cercle vaut donc :

\[ \begin{align*} P &= \dfrac12 \times 2 \times \pi \times 1\\ &= \pi \end{align*} \]

Il est donc possible d'obtenir une valeur approchée de \(\pi\) en appliquant la méthode précédente à la fonction \(f\) entre \(-1\) et \(1\).

Approximation de \(pi\)

Approximation de \(pi\)

Approximation de \(pi\)

Approximation de \(pi\)

Compléter ci-dessous la fonction approximation_pi qui prend en paramètre un entier n et renvoie une valeur approchée de la longueur de la fonction \(f\) entre \(a=-1\) et \(b=1\) et utilisant \(n\) segments.

Puissances de \(2\)

Afin d'éviter des erreurs d'arrondis, les valeurs de n proposées seront toujours des puissances de 2.

Exemples
>>> approximation_pi(2)
2.8284271247461903
>>> approximation_pi(4)
3.035276180410083
>>> approximation_pi(1024)
3.1415672753316537

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013:,ag)1ikn/S=vmsuhb4y7ex62*o-dt c(wr5_P3qplf050D0w0E0d0h0Q0p0F0G0Q0d0p0p0m010E0h0P010406050p0q0o0o0d0J0u040l0B0Q0q0,0B0j050k0?0^0`0|0;0P04151c051f0k1f1h1c0;0D0h0n0!0$0(0*0r0h0e0r0Q1v0r0E0/050V0s0Q0w1q0%0)011u1w1y1w0E1E1G1C0E0s0B0D0|1D0J1d0E0r0!0 0p0P0d0j0*0z011I1s010R0X0w0j0d0o0w1C1*1,1;1K1@1G1`1|0/0a0F0M0J0B0P0B0p0h120j0F0T1(0J0J0w0G2h151 0j1d0k1$2u0E1!1Z1#0D210*1y0j1_2e1C1n1p0#1J2E0h2G0j1W1o1C0P2n1d2s2u2Y0=1+2i2M1=2R0J0_0Q0/0g2r2$0:2#202(1K2*2,0/0z2:1,2=2s2D012`0d2-040N2~2t0;312^0*34360t39302$323f0/0K3i3b3k3d330B2+350/0y3p2?2%1r2_3u2{040v3i1e2W152K2x0D2B320G1W1}1d3M1g3K2!162;053R0T2X3r3C0*0i0j0/0R2b0o3I3c3*010I0/0F3=3)2N333-040_1$3|2@3@3_043{3Z2 3A323,0/0h0o2d0J0E3i3{3?3~400p0O4j3p3q453~0i0/0T0R443B3~47492!4n2)0R3.4B320.040H4L3s400x4Q3@4N0f0b3p0F4!4m3}1=4x042n0E0q0J144a2t4$4v2)0/4q4s4:3(4?1K4N4P4{4c3s0o0h2.4l523@0B0/0C574H2_0/4T515e0*5a040A0A4U3~542|5p1=4W4t584w4y0w4A5i4%1K4E5t2_4J040d0P2V0B0x4g0d2h0L0P0h5G0*4 5V330/4/4G5D5W0/4X4Z4#5x4(0/4+4-5#2;4=4C4@040Q130e0q0w4-5Y5X5C4}5k5b5Y5r042/635^4~0/0c5d5%01686a5$64014N6f4{5@3l5!615)3z0k3$0w2u2V6z3L1o3N2x2z2v1V1X2x0d1F6C0k3M0;6P0U0W0Y04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013:,ag)1ikn/S=vmsuhb4y7ex62*o-dt c(wr5_P3qplf050D0w0E0d0h0Q0p0F0G0Q0d0p0p0m010E0h0P010406050p0q0o0o0d0J0u040l0B0Q0q0,0B0j050k0?0^0`0|0;0P04151c051f0k1f1h1c0;0D0h0n0!0$0(0*0r0h0e0r0Q1v0r0E0/050V0s0Q0w1q0%0)011u1w1y1w0E1E1G1C0E0s0B0D0|1D0J1d0E0r0!0 0p0P0d0j0*0z011I1s010R0X0w0j0d0o0w1C1*1,1;1K1@1G1`1|0/0a0F0M0J0B0P0B0p0h120j0F0T1(0J0J0w0G2h151 0j1d0k1$2u0E1!1Z1#0D210*1y0j1_2e1C1n1p0#1J2E0h2G0j1W1o1C0P2n1d2s2u2Y0=1+2i2M1=2R0J0_0Q0/0g2r2$0:2#202(1K2*2,0/0z2:1,2=2s2D012`0d2-040N2~2t0;312^0*34360t39302$323f0/0K3i3b3k3d330B2+350/0y3p2?2%1r2_3u2{040v3i1e2W152K2x0D2B320G1W1}1d3M1g3K2!162;053R0T2X3r3C0*0i0j0/0R2b0o3I3c3*010I0/0F3=3)2N333-040_1$3|2@3@3_043{3Z2 3A323,0/0h0o2d0J0E3i3{3?3~400p0O4j3p3q453~0i0/0T0R443B3~47492!4n2)0R3.4B320.040H4L3s400x4Q3@4N0f0b3p0F4!4m3}1=4x042n0E0q0J144a2t4$4v2)0/4q4s4:3(4?1K4N4P4{4c3s0o0h2.4l523@0B0/0C574H2_0/4T515e0*5a040A0A4U3~542|5p1=4W4t584w4y0w4A5i4%1K4E5t2_4J040d0P2V0B0x4g0d2h0L0P0h5G0*4 5V330/4/4G5D5W0/4X4Z4#5x4(0/4+4-5#2;4=4C4@040Q130e0q0w4-5Y5X5C4}5k5b5Y5r042/635^4~0/0c5d5%01686a5$64014N6f4{5@3l5!615)3z0k3$0w2u2V6z3L1o3N2x2z2v1V1X2x0d1F6C0k3M0;6P0U0W0Y04.