我大致了解要做什么,但我的代码很困惑,并且在用 python 编写算法时遇到了一些麻烦
cos(x)=1-(x^2)/2!+(x^4)/4!-(x^6)/6!+...
其中x
以弧度为单位,使用while循环在20项后计算cos(x)
。到目前为止我写的是
x = float(input("Enter a value for x in degrees."))
x = (x*3.14159)/180
num_of_terms = 0
num = 1.0 ##numerator
y = 1.0
cosx = 1.0
while num_of_terms<1:
num_of_terms+=1
cosx = (num/y)
while num_of_terms>=1 and num_of_terms<=20:
num_of_terms+=1
num = num*(x*x)
y = y*num_of_terms*(num_of_terms-1)
if num_of_terms%2==0:
cosx = cosx+(-num/y)
else:
cosx = cosx+(num/y)
print(cosx)
我不知道我离正确还有多远(我知道至少在某些地方是错误的,所以我无法使用math.cos
正确检查),但主要问题是我have 是如何在每一项之间从正向->负向切换。作业指出我不能使用幂运算符,在我尝试执行类似的操作之前
x = float(input("Enter a value for x in degrees."))
x = (x*3.14)/180
num_of_terms = 0
y = 0
z = 1
cosx = ((-1)**(z-1))*((x**z)/(y))
这样符号就会在每隔一个术语时切换。现在我有了(如上所示)
if num_of_terms%2==0:
cosx = cosx+(-num/y)
else:
cosx = cosx+(num/y)
这是不正确的,或者至少我得到的输出是不正确的。
最佳答案
您可以非常简单地处理该标志:
sign = -1
while num_of_terms <= 20:
sign = -sign
...
cosx += sign * num/y
您的循环中还存在结构问题:第一个循环将在一次迭代后终止......除非您已正确阻止它返回那里。这是对循环的不当使用。
只需在循环之前初始化变量,然后按预期进行。由于您知道要迭代多少次,因此请使用 for 而不是 while。
cosx = (num/y)
for num_of_terms in range(1, 21):
...
您会在代码中发现其他计算问题。每次通过循环打印出值以帮助跟踪您的执行和计算。一开始,只需进行 3 或 4 次,而不是 20 次。
对于阶乘,保留一个正在运行的乘积:它就像一个正在运行的总和,只不过将其初始化为 1,并且每次循环时相乘。
<小时/>好的;坚持一段时间。现在,管理您的循环索引和计算索引。如果你正在做第 1 项,指数应该是多少? y 乘以什么数字?现在为术语 #2 和术语 #3 确定相同的值。
更直接地,插入打印语句来跟踪 num_of_terms、y 和 cosx。当你做第 3 项时,y 是什么?应该是4!或 6! (取决于您对条款的编号方式),但事实并非如此。你哪里出错了?
关于python - 在 python 中计算余弦而不导入数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494894/