Doing Automatic Differentiation

Click For Summary
SUMMARY

This discussion focuses on implementing Automatic Differentiation using the ODE Playground repository. It demonstrates two numerical methods, Newton's method and bisection, to solve for ##\sqrt{2}## with user-defined functions provided via lambda expressions. The code utilizes Python 3.7.1 and IPython 7.2.0, showcasing the ease of use without requiring step sizes or other numerical artifacts. The session also introduces dual numbers for differentiation, highlighting their practical application in the context of the discussion.

PREREQUISITES
  • Familiarity with Python 3.7.1 programming
  • Understanding of lambda functions in Python
  • Knowledge of numerical methods, specifically Newton's method and bisection
  • Basic concepts of Automatic Differentiation and dual numbers
NEXT STEPS
  • Explore the implementation of Automatic Differentiation in Python using the 'ad' module
  • Learn about the mathematical foundations of Newton's method and bisection
  • Investigate the use of dual numbers in calculus and their applications in optimization
  • Experiment with different user-defined functions in the ODE Playground to deepen understanding
USEFUL FOR

Mathematicians, data scientists, and software developers interested in numerical methods and optimization techniques, particularly those working with Automatic Differentiation in Python.

m4r35n357
Messages
657
Reaction score
148
This is a brief interactive session using my ODE Playground, which is my repository of Automatic Differentiation code. It illustrates two solutions of ##\sqrt {2}## with the user-specified function provided via a lambda, using Newton's method and then bisection. Note that the user needs to provide no step sizes or other requirements or artifacts of numerical differencing, just the function itself!

Python:
$ ipython3
Python 3.7.1 (default, Oct 22 2018, 11:21:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from ad import *                                                      
ad module loaded

In [2]: from playground import *                                              
playground module loaded

In [3]: Newton(lambda x: (x**2), x0=1.0, target=2.0)                          
Out[3]: ResultType(count=7, sense='', mode='ROOT', x=1.414213562373095, f=2.0000000000000004, dx=-1.5700924586837747e-16)

In [4]: bisect(lambda x: (x**2), xa=1.4, xb=1.5, target=2.0)                  
Out[4]: ResultType(count=38, sense='', mode='ROOT', x=1.4142135623733338, f=2.0000000000006755, dx=7.276401703393276e-13)
Enjoy!
 
Last edited:
  • Like
Likes   Reactions: jedishrfu and Dale
Technology news on Phys.org
OK here's some dual numbers:

Code:
$ ipython3
Python 3.7.1 (default, Oct 22 2018, 11:21:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from ad import *                                                      
ad module loaded

In [2]: a = Dual.get(3.0)                                                      

In [3]: b = Dual.get(5.0)                                                      

In [4]: c = Dual.get(7.0, variable=True)                                      

In [5]: print(a)                                                              
3.0 0.0

In [6]: print(b)                                                              
5.0 0.0

In [7]: print(c)                                                              
7.0 1.0

In [8]: print(c**2 - a * c)                                                    
28.0 11.0
 

Similar threads

  • · Replies 18 ·
Replies
18
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K