猫史档案馆


请问这出现了什么问题?

用户:陈鹏九陈鹏九查看:1 回复:3 评论:1 创建时间:2024-07-24T19:50:07


泰勒展开的计算结果和用正弦计算的结果差了那么多,请问这是怎么回事?center_image


回复

上一页1 页 / 共 1下一页
thewindows7thewindows7

代码给我,我帮你。

点赞0


评论


陈鹏九陈鹏九

import math

def jiecheng(num):
    #阶乘
    result = 1
    for j in range(1, (num + 1)):
        result = (result * j)
    return result

def calculator_sine(θ):
    global num_sum #全局变量
    num_sum = 0
    #泰勒展开
    for i in range(1, lim):
        num_sum += (((-1) ** (i - 1) * θ ** (i * 2 - 1)) / jiecheng(i * 2 - 1))
    return num_sum


c = int(input('x='))
lim = int(input('limit='))
print('泰勒展开得:',calculator_sine(c))
print('原值:',math.sin(c))

点赞1


评论


thewindows7thewindows7

  1. 泰勒展开的项数处理
    泰勒展开函数 calculator_sine 中,循环是从 1 开始到 lim。但是,泰勒展开的正弦函数在 �=0x=0 处的形式通常包括 x 的 00 次项(即 sin⁡(0)=0sin(0)=0),但您的循环跳过了这一项。不过,由于 �0x0 的系数是 11 且 �=0x=0 时对结果无影响,所以这不是主要问题。但是,确保从正确的项开始计算是很重要的。

  2. 泰勒展开的精度
    泰勒展开的精度取决于 x 的大小和展开的项数 lim。对于较大的 x,需要更多的项才能获得较高的精度。此外,正弦函数的泰勒展开是交替序列,其误差项与最后一项同号且绝对值不超过它。因此,当 lim 较小且 x 较大时,误差可能很大。

  3. **全局变量 num_sum**:
    虽然使用全局变量在这里可以工作,但它不是最佳实践。最好将 num_sum 作为函数的局部变量返回。

  4. 代码结构和可读性
    将阶乘函数和泰勒展开函数分开是正确的,但可以考虑使用 Python 的内置函数(如 math.factorial)来计算阶乘,以提高代码的可读性和效率。

  5. 改进后的代码
    下面是一个改进后的版本,包括了一些上述提到的改进点:

import math

def calculator_sine(θ, lim):
    total_sum = 0
    for i in range(lim):
        term = ((-1) ** i * θ ** (2 * i + 1)) / math.factorial(2 * i + 1)
        total_sum += term
    return total_sum

c = float(input('x='))
lim = int(input('limit='))
print('泰勒展开得:', calculator_sine(c, lim))
print('原值:', math.sin(c))

点赞1


评论