亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超7個贊

提示:

  • 向range(n)添加一個值。十次迭代將是一個好的開始。

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

  • 也許看一下文檔中的一個已解決的示例


查看完整回答
反對 回復 2022-07-12
  • 4 回答
  • 0 關注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號