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

如何在SymPy或Matplotlib中绘制函数图像与牛顿迭代点?

解决方案

一、Matplotlib实现(解决字符串转函数错误)

你遇到的错误核心是:字符串里的三角函数默认调用了Python内置的math.sin/math.cos,这类函数不支持数组运算;另外要彻底把^替换成**(^是Python位运算符,不是幂运算)。以下是可行步骤:

1. 导入依赖库

import numpy as np
import matplotlib.pyplot as plt

2. 正确转换函数字符串

把字符串里的三角函数替换为numpy版本,再转为可调用函数:

# 确保函数字符串用**做幂运算
func_str = "x**2*sin(x)*cos(x)"
# 替换为numpy支持的三角函数
func_str_np = func_str.replace("sin", "np.sin").replace("cos", "np.cos")
# 转为能处理数组的函数
f = lambda x: eval(func_str_np)

3. 绘制函数与迭代点

# 生成函数图像的x轴数据
x = np.linspace(0, 2, 1000)
y = f(x)

# 牛顿法迭代点列表
guess = [1.63334806538257, 1.57496329804422, 1.57081816486420, 1.57079632740207, 1.57079632679490, 1.57079632679490]
# 计算迭代点对应的y值
guess_y = f(np.array(guess))

# 绘图
plt.figure(figsize=(10, 6))
plt.plot(x, y, label=r'$f(x) = x^2\sin(x)\cos(x)$', color='blue')
# 给每个迭代点加标记,区分顺序
for i, (gx, gy) in enumerate(zip(guess, guess_y)):
    plt.scatter(gx, gy, s=60, label=f'迭代点{i+1}', alpha=0.8)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('牛顿法迭代点与函数图像')
plt.legend()
plt.grid(True)
plt.show()

二、SymPy实现(直接在SymPy图中添加迭代点)

SymPy的绘图可以结合自身plot函数和Matplotlib的散点功能,步骤如下:

1. 导入库并定义符号函数

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt

# 定义符号变量
x = sp.symbols('x')
# 定义目标函数
f_sym = x**2 * sp.sin(x) * sp.cos(x)

2. 转换为数值函数

# 把SymPy符号函数转为能计算数值的函数
f_numeric = sp.lambdify(x, f_sym, 'numpy')

3. 绘制函数并叠加迭代点

# 先绘制函数图像,不直接显示
p = sp.plot(f_sym, (x, 0, 2), show=False, label=r'$f(x) = x^2\sin(x)\cos(x)$')

# 计算迭代点的y值
guess = [1.63334806538257, 1.57496329804422, 1.57081816486420, 1.57079632740207, 1.57079632679490, 1.57079632679490]
guess_y = f_numeric(np.array(guess))

# 获取SymPy绘图背后的Matplotlib轴对象,添加散点
ax = p._backend.ax
for i, (gx, gy) in enumerate(zip(guess, guess_y)):
    ax.scatter(gx, gy, s=60, label=f'迭代点{i+1}', alpha=0.8)

# 完善图表样式
ax.set_xlabel('x')
ax.set_ylabel('f(x)')
ax.set_title('牛顿法迭代点与函数图像')
ax.legend()
ax.grid(True)

# 显示最终图像
p.show()

内容的提问来源于stack exchange,提问作者dannypancakes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:15:47