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

我必须定义一个计算 的函数sin(),程序将扩展系列,直到系列中下一项的绝对值小于1.0e-7使用此表达式:

http://img.mukewang.com/62cd46440001439b03170086.jpg

这是我到目前为止得到的,但我知道它的方式:


number = input("\n\tEnter X: ")

x_flt = float(number)

x_int = int(x_flt)

x_approx = 0

for i in range(1, x_int+1):

    factor = x_flt * i

def approximate_sin(x):

    '''Insert docstring here.'''

    for a in range():

        x_approx = (-1 ** a * x ** (2 * a + 1)) / factor

    return x_approx

print("\n\tApproximation: {:.10f}".format(float(approximate_sin(x_flt))))


慕婉清6462132
浏览 230回答 4
4回答

FFIVE

请注意-1 ** n,它不会像您期望的那样被解析。 **比一元更紧密地绑定-(具有更高的优先级),所以这个表达式被解析为-(1 ** n). 类似于蓝牙解决方案,我会做类似的事情from math import factorial, powfrom itertools import takewhile, countlarge = lambda y: abs(y) > 1e-7def 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

桃花长相依

这就是我的做法,它使用公式但不直接使用。(-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

慕桂英546537

鉴于这是一个无限系列,您可以创建一个生成器,给定x通过每次递增n来提供下一个评估。from math import factorial, powdef sin_gen(x):&nbsp; &nbsp; n = 0&nbsp; &nbsp; while True:&nbsp; &nbsp; &nbsp; &nbsp; result = (pow(-1, n) * pow(x, (2 * n + 1))) / factorial(2 * n + 1)&nbsp; &nbsp; &nbsp; &nbsp; yield result&nbsp; &nbsp; &nbsp; &nbsp; n += 1现在您只需对每个评估求和,直到总数达到您想要的为止。g = sin_gen(x)total = 0for val in g:&nbsp;&nbsp; &nbsp; if abs(val) < 1.0e-7:&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; break&nbsp;&nbsp; &nbsp; total += valprint(total)

LEATH

提示:向range(n)添加一个值。十次迭代将是一个好的开始。对于x_approx使用+=而不是=.也许看一下文档中的一个已解决的示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python