Python实现Newton-Raphson法时出现AttributeError的原因及解决方法
错误原因与修复方案
错误原因
你在newton_raphson函数里把x_values初始成了x(也就是传入的初始值4.0,属于float类型),但append()是Python列表的专属方法,float对象没有这个属性,所以触发了AttributeError。
解决办法
- 修正
x_values初始化:把它改成包含初始值的列表,这样后续就能正常用append()添加迭代过程中的x值:x_values = [x] - 修复图表显示:
plt.show要加括号plt.show(),否则图表不会弹出。 - 修正图例公式格式:LaTeX上标用
^而非**,且公式前后要加$,改成'f(x) = $x^2 - 10$'。
修复后的完整代码
import numpy as np import matplotlib.pyplot as plt def f(x): return x**2 - 10 def df(x): return 2*x def newton_raphson(x0, f, df, tol=1e-10, max_iter = 100): x = x0 iteration = 0 x_values = [x] # 初始化为列表 while np.abs(f(x)) > tol and iteration < max_iter: x = x - f(x) / df(x) x_values.append(x) iteration +=1 return x_values x_values = np.linspace(-5, 5, 100) plt.plot(x_values, f(x_values), label = 'f(x) = $x^2 - 10$') # 修正公式格式 roots = newton_raphson(4.0, f, df) plt.scatter(roots, [0]*len(roots), color='gray', label= '迭代过程点') plt.xlabel('x') plt.ylabel('f(x)') plt.title('牛顿-拉夫逊法求根') plt.axhline(0, color='black',linewidth=0.5) plt.axvline(0, color='black',linewidth=0.5) plt.grid(color = 'gray', linestyle = '--', linewidth = 0.5) plt.legend() plt.show() # 加上括号
内容的提问来源于stack exchange,提问作者user23143933
相关产品推荐
相关产品推荐

