Ο κανόνας τραπεζίου είναι ένας τρόπος αριθμητικής ολοκλήρωσης. Στα αγγλικά θα τον συναντήσεις με το όνομα Simpson's rule:
en.wikipedia.org/wiki/Simpson's_rule
@vaskot
Σε τέτοιου είδους προβλήματα είναι πολύ βολικό να κάνεις test driven development, Να γράψεις δηλαδή tests που να ελέγχουν γνωστές περιπτώσεις. Στα tests προσπαθείς να καλύψεις και edge cases.
Αφού γράψεις τα test, μετά πας και υλοποιείς τη συνάρτηση που σε ενδιαφέρει. Αυτό που κερδίζεις είναι ότι θα γλυτώσεις χρόνο στο debugging και ότι θα έχεις μεγαλύτερη εμπιστοσύνη στο ότι ο κώδικας σου είναι σωστός.
Πχ, με κάτι σαν το ακόλουθο, κάθε φορά που τρέχεις τον κώδικά σου θα ελέγχεις και αν είναι σωστός.
from __future__ import division
# In this function you will write down your tests, i.e. you will assert that
# your code returns the correct result for the specified input
def test_simpsons_rule():
# case 1
f = lambda x: 2
assert simpsons_rule(f, 0, 1, 1) == 2
assert simpsons_rule(f, 0, 1, 10) == 2
# case 2
f = lambda x: x
assert simpsons_rule(f, 0, 1, 1) == 0.5
assert simpsons_rule(f, 0, 1, 10) == 0.5
f = lambda x: x**2
# ....
def simpsons_rule(f, a, b, n):
# write down your own implementation
pass
if __name__ == "__main__":
test_simpsons_rule()