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

求助:基于递归函数实现泰勒级数近似正弦的代码编写

解决泰勒级数正弦近似的递归实现问题

首先,先明确正弦函数的泰勒级数展开(以弧度为单位):

sin(x) = x - x³/3! + x⁵/5! - x⁷/7! + ... + (-1)^(n-1) * x^(2n-1)/(2n-1)!
其中每一项的符号交替变化,幂次和阶乘的底数都是奇数,项数n决定了近似的精度。

接下来我们一步步实现代码:

1. 递归阶乘函数

阶乘的递归逻辑很直观:0!和1!都是1,大于1的数n的阶乘等于n乘以(n-1)的阶乘:

def factorial(n):
    # 基线条件:0! 和 1! 都等于1
    if n == 0 or n == 1:
        return 1
    # 递归步骤:n! = n * (n-1)!
    else:
        return n * factorial(n - 1)

2. 递归正弦泰勒级数函数

我们的递归思路是:前k项的近似值 = 前k-1项的近似值 + 第k项的值。基线条件是当只取1项时,直接返回x(对应泰勒级数的第一项x^1/1!):

def sin_taylor(x, num_terms):
    # 基线条件:仅1项时,返回x(即x^1/1!)
    if num_terms == 1:
        return x
    else:
        # 计算第num_terms项的参数:符号、幂次、阶乘分母
        k = num_terms
        sign = (-1) ** (k - 1)  # 第1项正,第2项负,以此类推
        exponent = 2 * k - 1     # 每一项的幂次是奇数:1,3,5...
        current_term = sign * (x ** exponent) / factorial(exponent)
        # 递归累加:前num_terms-1项的结果 + 当前项
        return sin_taylor(x, num_terms - 1) + current_term

3. 完整的main函数

这里需要注意:用户输入的角度通常是度数,但泰勒级数是基于弧度计算的,所以要先转换。同时可以和Python内置的math.sin对比,看看近似效果:

import math

def main():
    # 获取用户输入的角度(度数)并转换为弧度
    angle_deg = float(input("请输入要计算正弦值的角度(度数):"))
    angle_rad = math.radians(angle_deg)
    
    # 获取泰勒级数的项数
    term_count = int(input("请输入泰勒级数的项数(项数越多精度越高):"))
    
    # 计算近似值和精确值
    approx_value = sin_taylor(angle_rad, term_count)
    exact_value = math.sin(angle_rad)
    
    # 输出结果
    print(f"\n泰勒级数近似值({term_count}项):{approx_value:.6f}")
    print(f"math.sin精确值:{exact_value:.6f}")
    print(f"绝对误差:{abs(approx_value - exact_value):.10f}")

# 执行main函数
if __name__ == "__main__":
    main()

测试示例

比如输入角度30度(π/6弧度),项数3:

  • 泰勒级数计算:30°转为弧度≈0.5235988
  • 前3项:0.5235988 - (0.5235988)^3/6 + (0.5235988)^5/120 ≈ 0.5,和精确值一致,误差几乎为0。

如果项数取1,结果就是0.5235988,误差会大一些,这也符合预期——项数越多,近似值越接近真实值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:25:46