Python中绘制复数一阶导数与迭代次数的三维图
Python实现Newton-Raphson迭代导数的3D可视化
核心思路
先实现Newton-Raphson迭代逻辑,在每一步计算一阶导数的实部和虚部,同时记录当前迭代次数,最后用matplotlib的3D模块把这些数据绘制成三维图。
依赖安装
先确保安装所需库:
pip install numpy matplotlib
完整代码示例
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定义目标复函数和一阶导数(可替换为你自己的函数) def f(z): return z**3 - 1 # 示例:求三次单位根 def f_prime(z): return 3 * z**2 # 对应一阶导数 # 实现Newton-Raphson迭代并收集数据 def newton_raphson(start_z, max_iter=50, tol=1e-6): z = start_z data = [] for n in range(max_iter): deriv = f_prime(z) # 避免除以零,直接终止 if abs(deriv) < 1e-10: break # 记录:导数实部(X)、虚部(Y)、迭代次数(Z) data.append((np.real(deriv), np.imag(deriv), n)) # 迭代更新 z_new = z - f(z)/deriv # 收敛判断,满足则终止 if abs(z_new - z) < tol: break z = z_new return np.array(data) # 初始化迭代起点(可替换为其他复数值) start_point = complex(2, 1) iter_data = newton_raphson(start_point) # 绘制3D图 fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 提取轴数据 X = iter_data[:, 0] Y = iter_data[:, 1] Z = iter_data[:, 2] # 用折线+散点展示迭代过程 ax.plot(X, Y, Z, marker='o', linestyle='-', markersize=6) # 设置轴标签和标题 ax.set_xlabel('导数实部 (X)') ax.set_ylabel('导数虚部 (Y)') ax.set_zlabel('迭代次数 (Z)') ax.set_title('Newton-Raphson迭代中导数的3D变化') # 调整视角,提升可读性 ax.view_init(elev=20, azim=45) plt.show()
关键细节说明
- 复数处理:Python原生支持复数,用
complex(a,b)创建实例,np.real()和np.imag()可快速提取实部、虚部 - 终止条件:设置了三重保障:迭代次数上限、迭代差值收敛阈值、避免导数为零的异常情况
- 绘图优化:同时绘制折线和散点,能清晰展示每一步迭代的导数变化路径;
view_init调整视角,让3D结构更直观
扩展方向
- 尝试多个初始起点,用不同颜色绘制在同一张图中,对比不同起点的迭代差异
- 批量处理多组起点数据,生成更全面的可视化结果
- 调整
max_iter和tol参数,适配不同函数的收敛需求
内容的提问来源于stack exchange,提问作者Ansh
相关产品推荐
相关产品推荐

