Python Doing Automatic Differentiation

  • Thread starter m4r35n357
  • Start date
654
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:
654
148
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
 

Want to reply to this thread?

"Doing Automatic Differentiation" You must log in or register to reply here.

Related Threads for: Doing Automatic Differentiation

Replies
18
Views
502
Replies
1
Views
2K
Replies
16
Views
1K
  • Posted
Replies
3
Views
3K
Replies
1
Views
566

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top