from sympy import *
x = Symbol('x')
f = (2*x) + 1
fprime = f.diff()
f = lambdify(x, f)
fprime = lambdify(x, fprime)
newtons_expr = lambdify(x, x - (f(x) / fprime(x)) )
def newtons_method(guess):
approx = newtons_expr(guess)
if Abs(approx - guess) < 0.001:
print(approx) # <-- returns a float (-0.5)
print(type(approx)) # <-- returns "<class 'float'>"
return approx # <-- returns a None
else:
newtons_method(approx)
print(newtons_method(1))
我使用SymPy构建了这个函数,使用牛顿方法计算方程的一个解。但是,出于某种原因,它返回None
而不是float
,即使它在返回值approx
之前显式打印了一个浮点数。这有什么不对?我以前从未见过这个。
答案 0 :(得分:0)
谢谢@PaulRooney!
我的错误在于:
else:
newtons_method(approx)
当您调用递归函数时,您需要让它在每次调用时都返回;否则,它将返回None
。它应该是:
else:
return newtons_method(approx)
我发现这个视频解释了#34;调用堆栈&#34;保罗在我们的讨论中提到过。我看了它,它给了我一些关于我的功能在逻辑上做什么的见解: https://www.youtube.com/watch?v=k0bb7UYy0pY