""" Discrete math approach to Calculus This is what I imagine as a segue from discrete math to calc, using Python. We're using a tiny delta_x = h to compute values discretely, and then comparing those computed series with functions "at the limit" such as calculus would give us. It's the same segue we typically encounter using Sigma notation to introduce Riemann Sum notation in Algebra 2 today. All the assumptions are deliberately simplified: continuous functions in one variable.
(c) MIT License, K. Urner, 4D Solutions, 2014 """ from math import log h = delta_x = 1e-2 # tiny delta class Integral: def __init__(self, func): self.func = func def __call__(self, a, b): if not a<=b: raise ValueError area = 0.0 x = a while x <= b: area += self.func(x) * delta_x x += delta_x return area class Derivative: def __init__(self, func): self.func = func def __call__(self, x): f = self.func return (f(x+h) - f(x-h)) / (2*h) def parabola(x): """Parabola""" return x * x # parabola def int_parabola(x): """Parabola""" return (x ** 3)/3 # integral of parabola def deriv_parabola(x): """Derivative of Parabolic function""" return 2*x # parabola def reciprocal(x): """Reciprocal""" return 1/x def int_reciprocal(x): """Integral of Reciprocal""" return log(x) # integral is Ln(x) def deriv_reciprocal(x): """Derivative of Reciprocal""" return -x**-2 def report(f, domain, limint, limderiv, C=0): integral_f = Integral(f) derivative_f = Derivative(f) print("=" * 30) print(f.__doc__, [(x,f(x)) for x in domain]) print() print("Approx Integral : ", ["({}, {:>5.2f})".format(x, integral_f(a=domain[0], b=x) + C) for x in domain]) print("Limit Integral : ", ["({}, {:>5.2f})".format(x, limint(x)) for x in domain]) print() print("Approx Derivative: ", ["({}, {:>5.2f})".format(x, derivative_f(x)) for x in domain]) print("Limit Derivative : ", ["({}, {:>5.2f})".format(x, limderiv(x)) for x in domain]) report(parabola, range(-10, 11), limint = int_parabola, limderiv = deriv_parabola, C = -334) # C = constant offset report(reciprocal, range(1, 11), limint = int_reciprocal, limderiv = deriv_reciprocal)
_______________________________________________ Edu-sig mailing list Edu-sig@python.org https://mail.python.org/mailman/listinfo/edu-sig