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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:35:15