Méthode des rectangles Python

Bonjour,

J'ai un programme Python, je voulais savoir si il fonctionne. Au cas où à un oral j'aimerais le présenter...
Mais comment définir une fonction mathématique sur python ?
J'aimerais tester pour $f(x)=x^2$.
a=2
b=10
def rectangle(f,a,b,n) :
      s=0
      pas=(b-a)/n
      for k in range(n) :
            s=s+f(a)
      return (s*pas)

Réponses

  • Bonjour,
    Tu viens de définir une fonction assez complexe et tu ne saurais pas définir la fonction carré ? (tu)
    def f(x):
        return ...
    
  • Tu peux utiliser ta fonction rectangle de deux manières (au moins) :
    def f(x):
      return bla
    
    rectangle(f,1,2,10)
    

    Ou alors :
    rectangle(lambda x:bla,1,2,10)
    
    À toi de remplacer bla par ce que tu veux.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • def f(x):
        return <censuré>
    
    ou bien tu peux passer une lambda expression:
    print(rectangle(lambda x: <censuré>, 0, 10, 100))
    
    Pas besoin des parenthèses dans 'return (s*pas)' (return n'est pas une fonction).

    Edit : mince, on dirait que j'ai divulgâché... hop, un petit coup de ciseaux. :-D
  • Merci mais mon programme affiche un erreur :99824
  • Tu as oublié un s à rectangles (ou mis un s en trop au nom de ta fonction, tout dépend comment tu vois les choses).
    De plus, il va falloir afficher le résultat obtenu avec un print.

    https://py3.codeskulptor.org/#user305_MIjANqltSFYgiyI.py
  • Merci j'avais oublié un :
  • Quand j'augmente $n$ la valeur augmente ? Est-ce normal ?

    $n$ permet de contrôler la précision non ? L'erreur est en $1/n$ je crois vu qu'on majore l'erreur par du $M_1 (b-a)^2 / 2n$ ?
  • L'erreur baisse (et tend vers 0) mais la somme n'a pas de raison de baisser. Ce n'est d'ailleurs pas le cas si c'est une fonction croissante positive et que tu sommes les rectangles inférieurs
  • Est-ce normal ? Est-ce lié à la fonction carré ? Est-ce que ça le fait pour n'importe quelle fonction ?
    À toi de tester, voire de prouver des choses.
  • Oui je vois.

    Pour la méthode des trapèzes, j'ai le programme suivant :
    def trapezes(f,a,b,n) :
           s=(f(b)-f(a))*(b-a) /(2*n)
           return rectangles(f,a,b,n)+s
    

    Mais je n'ai pas compris le placement du $s$ à la fin. Je ne comprends pas la structure du deuxième programme.
    C'est une somme d'aires de trapèzes, pourquoi le programme est différent du premier ?
  • Regarde comment sont dessinés les trapèzes. Compare l’aire calculée par la méthode des rectangles et regarde la tête du morceau supplémentaire de la méthode avec les trapèzes.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Ah c'est une fonction récursive en fait, je viens d'étudier un peu d'algorithmique.

    Je ne comprends pas l'erreur99834
    1.png 24.1K
  • Dans la ligne en rouge, la fonction appelée est « trapezes » avec les mêmes paramètres : ça boucle indéfiniment.

    En notant $f$ à la place de « trapezes » et $x$ à la place de $(a,b,n)$, ton programme dit la chose suivante.
    pour calculer f(x) :
        calculer une variable s
        calculer f(x) et ajouter s
    
    Que fait l'ordinateur ? Il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !). Pour ça, il calcule $s$, puis essaie de calculer $f(x)$ (avec le même $x$ !), etc.

    Tu vois le problème ?
  • OShine : La fonction trapezes n'est pas la même dans tes deux derniers messages.
    Dans l'avant-dernier message, elle appelle la fonction rectangle ou rectangle(s) alors qu'elle s'appelle elle-même dans le dernier.
    Tu ne fais décidément pas attention à ce que tu écris !
    Il faudrait peut-être réfléchir et lire attentivement avant de venir poster des messages sur le forum.
  • Oui mais j'ai essayé de changer les variables, de rajouter une boucle for, rien ne marche.

    Désolé je vous donne le programme exact de mon livre.
  • Pas du tout, cela fonctionne très bien.
    Mais ta fonction s'appelle elle-même alors qu'elle est censée appeler la fonction rectangle(s).
  • Ah je viens de comprendre l'erreur et la remarque de Math Coss je n'étais pas réveillé :-o

    Ça marche en effet maintenant, merci !
  • Maintenant, il faut peut-être essayer de comprendre pourquoi ta fonction trapezes est définie de cette façon.
Connectez-vous ou Inscrivez-vous pour répondre.