First time here? Check out the FAQ!

Ask Your Question
1

scipy.optimize.newton gives TypeError: ufunc 'isfinite' not supported

asked 3 years ago

ttdsmt gravatar image

updated 3 years ago

Here is the code

import scipy.optimize
f(x) = x^2 - 4*sin(x)
fp(x) = diff(f(x),x)
scipy.optimize.newton(f,1.5,fp)

and get type error

TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

How to solve this error?

Some other information:

Run in Sagemath 9.4 on Cocalc.com

This code from the book "Numerical Analysis Using Sage by George A. Anastassiou, Razvan A. Mezei" which use "Sage Version 6.3, Release Date: 2014-08-10". Here, I edited the origin code (removing comment, and print command), the original code is:

#import the following library
import scipy.optimize
#the function f(x) from our problem
f(x) = x^2-4*sin(x)
#compute the derivative of f
fp(x)=diff(f(x),x)
#call the Newton’s method and output the result
print "solution = " , scipy.optimize.newton(f, 1.5, fp)

An extra question, is this code work on the old version of Sage in the above book, i.e. "Sage Version 6.3, Release Date: 2014-08-10"?

Preview: (hide)

Comments

Welcome to Ask Sage! Thank you for your question.

slelievre gravatar imageslelievre ( 3 years ago )

You can also define Python function to the same effect :

sage: def f(x): return x^2-4*sin(x)
sage: def fp(x): return 2*x-4*cos(x)
sage: import scipy.optimize
sage: scipy.optimize.newton(f,1.5,fp)
1.93375376282702

see Sagecell...

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 3 years ago )

1 Answer

Sort by » oldest newest most voted
3

answered 3 years ago

tmonteil gravatar image

scipy.optimize.newton is numerical and requires f and fp to be callable, so a simple way to solve the issue is to transform f and fp into numerical callable functions with the fast_callable function :

sage: scipy.optimize.newton(fast_callable(f),1.5,fast_callable(fp))
1.93375376282702
Preview: (hide)
link

Comments

You can also define f and fp as Python functions : see Sagecell...

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 3 years ago )

The problem with that code is that you can not deduce fp from f since a Python function has no such thing as "a derivative".

tmonteil gravatar imagetmonteil ( 3 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 3 years ago

Seen: 1,160 times

Last updated: Dec 18 '21