为了账号安全,请及时绑定邮箱和手机立即绑定

Python:定义一个函数来计算 sin(x)

Python:定义一个函数来计算 sin(x)

慕婉清6462132 2022-07-12 18:00:16
我必须定义一个计算 的函数sin(),程序将扩展系列,直到系列中下一项的绝对值小于1.0e-7使用此表达式:这是我到目前为止得到的,但我知道它的方式:number = input("\n\tEnter X: ")x_flt = float(number)x_int = int(x_flt)x_approx = 0for i in range(1, x_int+1):    factor = x_flt * idef approximate_sin(x):    '''Insert docstring here.'''    for a in range():        x_approx = (-1 ** a * x ** (2 * a + 1)) / factor    return x_approxprint("\n\tApproximation: {:.10f}".format(float(approximate_sin(x_flt))))
查看完整描述

4 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

请注意-1 ** n,它不会像您期望的那样被解析。 **比一元更紧密地绑定-(具有更高的优先级),所以这个表达式被解析为-(1 ** n). 类似于蓝牙解决方案,我会做类似的事情


from math import factorial, pow

from itertools import takewhile, count


large = lambda y: abs(y) > 1e-7


def sin_gen(x):

    for n in count():

        yield (pow(-1, n) * pow(x, (2 * n + 1))) / factorial(2 * n + 1)



def sin(x):

    return sum(takewhile(large, sin_gen(x)))


print(sin(5))  # -0.9589242932128198


查看完整回答
反对 回复 2022-07-12
?
桃花长相依

TA贡献1860条经验 获得超8个赞

这就是我的做法,它使用公式但不直接使用。

  • (-1) ** n是前一个值乘以-1

  • x ** (2n + 1)是前一个值乘以x * x

  • (2n + 1)!是前一个值乘以2n * (2n + 1)

这意味着您的循环不进行幂或阶乘计算,这样效率更高。这是在Python中:

def approx_sin(x, eps=1e-7):

    term = x

    two_n = 0

    total = 0


    while abs(term) >= eps:

        total += term

        two_n += 2

        term *= -x * x / (two_n * (two_n + 1))


    return total


查看完整回答
反对 回复 2022-07-12
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

鉴于这是一个无限系列,您可以创建一个生成器,给定x通过每次递增n来提供下一个评估。


from math import factorial, pow


def sin_gen(x):

    n = 0

    while True:

        result = (pow(-1, n) * pow(x, (2 * n + 1))) / factorial(2 * n + 1)

        yield result

        n += 1

现在您只需对每个评估求和,直到总数达到您想要的为止。


g = sin_gen(x)

total = 0


for val in g: 

    if abs(val) < 1.0e-7: 

        break 

    total += val


print(total)


查看完整回答
反对 回复 2022-07-12
?
LEATH

TA贡献1936条经验 获得超6个赞

提示:

  • 向range(n)添加一个值。十次迭代将是一个好的开始。

  • 对于x_approx使用+=而不是=.

  • 也许看一下文档中的一个已解决的示例


查看完整回答
反对 回复 2022-07-12
  • 4 回答
  • 0 关注
  • 229 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信