Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python编写数学函数_Python - Fatal编程技术网

用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*
的赋值都有相同的右侧,因此它们最终都会得到相同的值。需要使用think
math.sin()
。您确实尝试过运行它吗?从代码来看,我希望函数总是返回0。我认为您首先需要清楚地了解您要实现的目标。根据您只能从
数学
导入函数的要求,我推断这是您正在学习的某门课程的家庭作业(因为此要求在任何其他上下文中都没有意义)。其目的似乎是用泰勒级数近似正弦。函数
math.sin()
已经为您完成了这项工作(或者实际要求您的计算机硬件完成)。如果你想编写泰勒近似的软件实现,你不应该调用
math.sin()
@SvenMarnach:
i
在这个循环中总是很奇怪,所以我认为你的建议行不通。