错误在于lambdify 函数。由于某种原因,它说语法错误。这就是确切地说:
文件“D:\Anaconda\lib\site-packages\sympy\utilities\lambdify.py”,第 434 行,在 lambdify func = eval(lstr, namespace) 中。
程序在用户输入容差后立即崩溃。这是一个牛顿法程序(或者至少是我的尝试)。任何有关如何改进此代码的建议也将不胜感激。
我输入f
的dfdx
内容如下:
x**3 + 3*x + 5
和
3*x**2 + 3
分别。至于v0
and eps
,我分别输入1
and 0.000001
。无论我输入什么,程序都会以上述错误终止(假设它使用 x 作为变量,否则它会显示未定义,仅此而已)。
import sympy
import sys
v0 = int(input("Please enter the v0 value: "))
eps = float(input("Please enter the tolerance: "))
f = lambda x : eval('input("Enter the function: ")')
dfdx = lambda x : eval('input("Enter the derivative: ")')
x=sympy.symbols('x')
func = sympy.lambdify(f,x)
deriv = sympy.lambdify(f,x)
def Newton(func, deriv, v0, eps):
f_value = func(v0)
iteration_counter = 0
while abs(f_value) > eps and iteration_counter < 100:
try:
v0 = v0 - float(f_value)/deriv(v0)
except ZeroDivisionError:
print ("Error! - derivative zero for x = ", v0)
sys.exit(1) # Abort with error
f_value = func(v0)
iteration_counter += 1
# Here, either a solution is found, or too many iterations
if abs(f_value) > eps:
iteration_counter = -1
return v0, iteration_counter
Newton(func,deriv,v0,eps)