# Is fast_callable breaking my code?

I'm currently trying to make an interact for newton fractals that accepts most functions. This is my code for newton's method:

import numpy as np

def newton(z0,f,fp,MAX_IT):
cnt = 0
TOL = 1e-10
z = z0
condition = fp(z) != 0
a = z[condition]
for i in range(MAX_IT):
dz = f(a)/fp(a)
return a
cnt += 1
a -= dz
return False


Input:

g(a) = sin(a)
f = fast_callable(g, vars=(a))
fp = fast_callable(diff(g), vars(a))
x = np.linspace(-7,7,100)
y = np.linspace(-7,7,100)
xx,yy = np.meshgrid(x,y)
newton(xx+yy*1j,f,fp,150)


Output:

array([-6.28318531+0.j, -6.28318531+0.j, -6.28318531+0.j, ...,
6.28318531+0.j,  6.28318531+0.j,  6.28318531+0.j])


I'm supposed to get 0 or 2*pi in addition to the above. When I use numpy functions I don't have this issue. Is fast_callable breaking something?

edit retag close merge delete

For

f=sin
fp=cos


one can obtain the same result

( 2023-06-08 12:43:44 +0200 )edit

Sort by ยป oldest newest most voted

Your code finds one solution then stops.

To get the other solutions, you shound recursively search solutions in the intervaldefined by the bounds of the original interval and your first solution.

The trick is, of course, to detect when to stop for good... Left to the reader as a ((very) interesting) exercise. Hint : what your function should do when asked to find the roots of $\sin\frac{1}{x}$ between $-\pi$ and $\pi$ ?

BTW, the use of numpy is irrelevant. you might as well use the code fior Newton's method already existing in Sage, using numpy-defined variables and functions.

HTH,

more