如何用Python正确绘制sin(x)函数图像?自定义泰勒级数代码排查
自定义泰勒级数sin(x)绘图异常问题排查与修复
核心问题排查方向
- 未支持向量化运算:自定义函数若仅能处理单个数值,直接传入numpy数组会引发广播错误或计算逻辑混乱,导致曲线异常
- 泰勒级数项数不足:x∈[-1,1]时泰勒级数收敛快,但项数过少会导致精度不足,曲线偏离真实sin曲线
- 阶乘/项计算错误:未严格遵循$\sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n x^{2n+1}}{(2n+1)!}$公式,比如符号错误、指数写错、阶乘计算溢出或结果错误
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt def get_factorial(n): # 循环实现阶乘,避免递归栈溢出,兼容大数值计算 result = 1 for i in range(1, n + 1): result *= i return result def custom_sin(x, terms=10): # 初始化与输入数组同形状的结果数组,支持向量化运算 sin_result = np.zeros_like(x) for n in range(terms): sign = (-1) ** n power = 2 * n + 1 sin_result += sign * (x ** power) / get_factorial(power) return sin_result # 生成-1到1区间的100个采样点 x = np.linspace(-1, 1, 100) # 计算自定义sin值与numpy内置sin值 y_custom = custom_sin(x) y_np = np.sin(x) # 绘图对比 plt.figure(figsize=(8, 6)) plt.plot(x, y_custom, label='自定义泰勒级数sin(x)', linestyle='--', linewidth=2) plt.plot(x, y_np, label='numpy内置sin(x)', alpha=0.6) plt.legend() plt.xlabel('x') plt.ylabel('sin(x)') plt.title('自定义sin(x)与numpy内置sin(x)对比') plt.grid(True) plt.show()
关键修复说明
- 向量化兼容:
custom_sin函数初始化与输入x同形状的零数组,循环累加每一项时直接对数组进行运算,无需逐个处理元素,适配numpy数组输入 - 足够的收敛项数:设置
terms=10,对于x∈[-1,1],该项数已能保证计算精度与numpy内置sin函数几乎重合 - 可靠的阶乘实现:用循环替代递归计算阶乘,避免递归深度限制导致的错误,同时保证计算结果准确
- 严格遵循泰勒公式:每一项的符号、指数、阶乘严格对应公式定义,消除计算逻辑错误
内容的提问来源于stack exchange,提问作者moyoloco09
相关产品推荐
相关产品推荐

