python - 在 python 中计算余弦而不导入数学

标签 python while-loop factorial trigonometry

我大致了解要做什么,但我的代码很困惑,并且在用 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/

相关文章:

loops - 如何在 Common Lisp 循环中正确编写此条件?

php - 循环获取议程和白天时间并填充数据库中的数据

ruby - 如何使用 assert_raise 来测试 Ruby 中的错误?

t-sql - 如何在sql中计算大组合量

java - 如果我们在句子中使用带有位置编号的单词,如何定义可能的组合

python - 如何将输出文件转换为数组

python - Panda 数据透视表边距仅在行上

python - 使用 Python 将某些属性从 xml 文件复制到另一个文件

python - 如何以 60fps+ 将所有屏幕像素读入 python numpy 数组

Ruby 'is_a?' 需要类或模块 (TypeError)