Calcul approché de longueur d’une portion de courbe en Python

Sur cette page, nous allons voir une méthode pour déterminer une valeur approchée de la longueur d’une courbe représentative d’une fonction sur un intervalle donné en Python.

Longueur d'une courbe en Python

Approche mathématique

Une courbe peut être vue comme une succession de segments minuscules. Prenons cette courbe:

Longueur d'une courbe en Python

Divisons l’intervalle [-0,5 ; 1] en 3 par exemple:

Longueur d'une courbe en Python

On a ici tracé 3 segments; certes, ils ne “collent” pas à la courbe, mais on peut imaginer que si l’on divise l’intervalle [-0,5 ; 1] en plus de 3, les segments vont être très petits et donc vont coller à la courbe. La longueur totale de ces segments va donc être très proche de la longueur de la courbe.

Longueur d’une portion de courbe en Python

Nous allons avant tout définir une fonction Python qui représente la fonction mathématique \(f(x)=x^3-x^2-0,2x+1\) dont la courbe représentative est donnée précédemment.

def f(x):
    return x**3 - x**2 - 0.2*x +1

Ensuite, nous créons une fonction Python longueur(a,b,n) qui admet 3 arguments : a et b sont les bornes de l’intervalle, et n le nombre de subdivisions souhaitées (le nombre de segments à considérer).

def longueur(a,b,n):
    pas = (b - a) / n
    x = a
    longueur = 0
    while x <= b-pas:
        longueur += ( pas**2 + ( f(x+pas) - f(x) )**2 )**0.5
        x += pas
        
    return longueur

On commence par définir le pas, c’est-à-dire la longueur des subdivisions de l’intervalle [a ; b] : c’est la longueur de l’intervalle que l’on a divisé par n (→ ligne 5).

Ensuite, on part de x = a (→ ligne 6) et on initialise la longueur à 0 (→ ligne 7). Nous allons parcourir l’intervalle par petits sauts : x, puis x + pas, puis x + 2pas, etc.

Longueur d'une courbe en Python

Pour un x donné, on calcule la longueur du segment entre x et x + pas à l’aide de la formule:$$AB = \sqrt{(x_B-x_A)^2 + (y_B-y_A)^2}$$qui donne dans notre cas:$$\sqrt{(x+pas-x)^2+(f(x+pas)-f(x))^2}=\sqrt{pas^2+(f(x+pas)-f(x))^2}.$$C’est ainsi que l’on obtient la ligne 9 : on ajoute à la longueur le nombre calculé.

Ce calcul est fait jusqu’à ce que x soit égal à bpas. Ensuite, la boucle while s’arrête et la fonction Python retourne la dernière valeur de longueur calculée, qui correspond donc à la somme des longueurs des segments.

En exécutant ce programme, on a par exemple:

>>> longueur(-0.5,1,100)
1.674759304224313

>>> longueur(-0.5,1,1000)
1.693754517038786

>>> longueur(-0.5,1,10000)
1.6937551333505372

N’oubliez pas que si vous avez des difficultés en mathématiques, je peux vous aider par webcam !

[Retour aux ressources Python]