You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Newton-Raphson法时出现AttributeError的原因及解决方法

错误原因与修复方案

错误原因

你在newton_raphson函数里把x_values初始成了x(也就是传入的初始值4.0,属于float类型),但append()是Python列表的专属方法,float对象没有这个属性,所以触发了AttributeError。

解决办法

  1. 修正x_values初始化:把它改成包含初始值的列表,这样后续就能正常用append()添加迭代过程中的x值:
    x_values = [x]
    
  2. 修复图表显示:plt.show要加括号plt.show(),否则图表不会弹出。
  3. 修正图例公式格式: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:40:58