所以,我试图找到cos(x)
的值,其中x=1.2
。我觉得我写的剧本应该没问题,但是,我得到的价值是不正确的。那是; cos(1.2)=0.6988057880877979
,对于25
条款,当我应该离开时:cos(1.2)=0.36235775
。
我创建了一个用于计算sin(1.2)
的类似程序,该程序运行正常。
计算sin(1.2)
:
import math as m
x=1.2
k=1
N=25
s=x
sign=1.0
while k<N:
sign=-sign
k=k+2
term=sign*x**k/m.factorial(k)
s=s+term
print('sin(%g) = %g (approximation with %d terms)' % (x,s,N))
现在尝试计算cos(1.2)
:
import math as m
x=1.2
k=1
N=25
s=x
sign=1.0
while k<N:
sign=-sign
k=k+1
term=sign*x**k/m.factorial(k)
s=s+term
print(s)
答案 0 :(得分:3)
您不应该将初始金额设置为MERGE [mssqltable].[Mytable] as s
USING THEORACLETABLE.BLA as t
ON t.[R_ID], 1)) - ASCII('A') + 1 = s.[R_ID]
WHEN MATCHED THEN UPDATE SET [Field1] = s.[Field1], ..., [Brokenfield] = s.[BrokenField]
WHEN NOT MATCHED BY TARGET THEN
... another big statement
,以及您对扩展的表示
有点偏离 - 我们需要考虑函数的均匀性,因此将Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false})
Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false)
增加2.另外,在不修改程序结构的情况下,您必须设置初始变量所以它们在第一个循环开始时被正确地放到它们的起始值。重新排序你的循环控制流程,我们有
1.2
给予
k
答案 1 :(得分:1)
我认为你使用错误的余弦系列,correct formula会(我强调与^
的重要区别):
sum_over_n [(-1)**n * x ** (2 * n) / (math.factorial(2 * n))]
# ^^^^ ^^^^
这意味着要添加n
- 您所拥有的术语:
def cosine_by_series(x, terms):
cos = 0
for n in range(terms):
cos += ((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n))
return cos
# or simply:
# return sum(((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n)) for n in range(terms)
给出:
>>> cosine_by_series(1.2, 30)
0.3623577544766735