用python编写数学函数
这就是我必须编程的内容:用python编写数学函数,python,Python,这就是我必须编程的内容: sen(x) = (x/1!) - (x^3/3!) + (x^5/5!) - (x^7/7!) + ... 到目前为止,我有: def seno(x, n): for i in range(1, n+1, 2): result = (x**i/math.factorial(i)) result1 = (x**i/math.factorial(i)) result2 = (x**i/math.factorial(
sen(x) = (x/1!) - (x^3/3!) + (x^5/5!) - (x^7/7!) + ...
到目前为止,我有:
def seno(x, n):
for i in range(1, n+1, 2):
result = (x**i/math.factorial(i))
result1 = (x**i/math.factorial(i))
result2 = (x**i/math.factorial(i))
result3 = (x**i/math.factorial(i))
return math.sin(result-result1 + result2 - result3)
我不明白的是如何实际更改每个结果的I
值
另一件事是我不能使用任何非内置函数。因此,除了数学之外,没有其他输入
编辑:谢谢你的快速回复 您错误地使用了
for
循环。每次迭代将计算序列中的一项;您需要累积这些值,而不是试图一次设置4个结果
def seno(x, n):
sign = 1
result = 0
for i in range(1, n+1, 2):
term = x**i/math.factorial(i)
result += sign * term
sign *= -1 # Alternate the sign of the term
return result
看起来你正在做一件事 您可能不应该声明单独的
result1
、result2
等。相反,您可以在循环中计算每个值,并将其累积到单个result
变量中
def seno(x,n):
result = 0
sign = 1 # Sign starts out positive
for i in range(1, n+1, 2):
result += x**i/math.factorial(i)
sign *= -1 # use negative sign on odd terms
return result
请注意,您实际上并没有对结果调用math.sin
。使用泰勒级数近似的全部要点是在不实际调用该函数的情况下估计math.sin(x)
的值
您可以进一步优化这个循环。您可以通过累积答案,而不是在每次迭代中重新计算整个阶乘值,对math.factorial
进行一次计算。您还可以对x**i
项进行类似的强度缩减,并将符号切换逻辑滚动到exp
的更新逻辑中
def seno(x,n):
result = 0.0
fact = 1.0 # start with '1!'
exp = x # start with 'x¹'
xx = x*x # xx = x²
for i in range(1, n+1, 2):
result += exp / fact
exp *= -xx # update exponential term to 'xⁱ', and swap sign
fact *= (i+1) * (i+2) # update factorial term to '(i+2)!'
return result
您似乎试图手动使用泰勒展开计算正弦。那么,为什么要对结果使用
math.sin()
?您对变量result*
的赋值都有相同的右侧,因此它们最终都会得到相同的值。需要使用thinkmath.sin()
。您确实尝试过运行它吗?从代码来看,我希望函数总是返回0。我认为您首先需要清楚地了解您要实现的目标。根据您只能从数学
导入函数的要求,我推断这是您正在学习的某门课程的家庭作业(因为此要求在任何其他上下文中都没有意义)。其目的似乎是用泰勒级数近似正弦。函数math.sin()
已经为您完成了这项工作(或者实际要求您的计算机硬件完成)。如果你想编写泰勒近似的软件实现,你不应该调用math.sin()
@SvenMarnach:i
在这个循环中总是很奇怪,所以我认为你的建议行不通。