如何在不导入数学的情况下计算正弦和余弦?

时间:2014-02-04 00:53:48

标签: python

我不久前开始使用python进行编程,而且我遇到了程序的一部分问题。程序将要求用户输入,他可以输入:A,B,C,M或Q.我已完成A,M和Q部分,但我无法弄清楚如何为B做部件(计算你想要的数字的正弦)和C(计算正弦)。 我得到的所有信息都是:

  

X的正弦的幂级数近似可表示为:   正弦(X)= X - (X3 / 3!)+(X5 / 5!) - (X7 / 7!)+(X9 / 9!)....注意,   该幂级数中的个别项可表示为:( - 1)k *   X2k + 1 /(2k + 1)!其中k = 0,1,2,3 ......,

哦,和(但是对于这个while循环应该做对吗?): 当计算X的正弦或X的余弦时,程序将扩展幂级数 直到系列中下一个术语的绝对值小于1.0e-8(指定的epsilon)。 该术语不会包含在近似值中。

我不能使用导入数学。 谁能让我知道如何做到这一点?我真的不知道从哪里开始哈哈哈。

提前致谢!

***嘿伙计们,我在过去的3个小时里一直试图这样做。我对编程很陌生,你的一些答案使我对它更容易理解,但是我的程序没有用,我真的不知道怎么做。是的,我今天去找了一位导师,但他也不知道。所以,是的,我想我会等到我的老师给我的程序评分,然后我可以问他应该怎么做。谢谢你的所有答案,我很感激他们! :)

3 个答案:

答案 0 :(得分:2)

似乎你不应该导入math,因为你应该编写自己的函数来计算正弦。你应该使用幂级数逼近。

我建议你先写一个阶乘函数,然后编写一个使用这个阶乘函数计算幂级数的循环。

如果你仍然无法弄明白,我建议你和你的老师或老师的助手谈谈。

答案 1 :(得分:2)

由于你有条件完成循环last_term < 1.0e-8,你应该使用while

while last_term > 1.0e-8:

你需要一个计数器来保持k的数量(从0开始)和一个变量以保留最后一个术语:

k = 10 # some initial value
last_term = 0
while ...:
    last_term = ... # formula here

也是一个结果变量,让'说sin_x

while ...:
    ...
    sin_x += last_term

注意:在公式中您使用的是阶乘,因此需要定义一个计算数字阶乘的函数,并正确使用它。

答案 2 :(得分:2)

>>> e = 2.718281828459045
>>> X = 0.1
>>> (e**(X*1j)).imag   # sin(X)
0.09983341664682815
>>> (e**(X*1j)).real   # cos(X)
0.9950041652780258

验证

>>> from math import sin, cos
>>> sin(X)
0.09983341664682815
>>> cos(X)
0.9950041652780258

如果你通过

明确总结系列,你可能会得到更好的分数
result = 0
n = 1
while True:
    term = ...
    result += term
    if term <= epsilon:
        break
    n += 2