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

如何用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()

关键修复说明

  1. 向量化兼容:custom_sin函数初始化与输入x同形状的零数组,循环累加每一项时直接对数组进行运算,无需逐个处理元素,适配numpy数组输入
  2. 足够的收敛项数:设置terms=10,对于x∈[-1,1],该项数已能保证计算精度与numpy内置sin函数几乎重合
  3. 可靠的阶乘实现:用循环替代递归计算阶乘,避免递归深度限制导致的错误,同时保证计算结果准确
  4. 严格遵循泰勒公式:每一项的符号、指数、阶乘严格对应公式定义,消除计算逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:26:17