就像标题所说,我需要找到Taylor系列,并在不使用Python 3.5中的数学模块的情况下编写可分性测试。我在一张纸上做数学计算,但实际上我从未在学校里教过这些东西中的任何一个,所以我老老实实地完全不知道如何将它们写在纸上。我已经做了相当多的工作,但我需要一些帮助来完成它。我有一个朋友告诉我有关用于编程的算法,所以我现在对此有点了解。看到我遇到的主要编程问题的真正长评论。
对于泰勒级数:在计算 / sin x / cos x的值时,程序应继续添加幂级数的项,直到达到绝对值小于{{0}的项。 }倍以前术语总和的绝对值。
公式:
如果n是正整数: N! = n×(n-1)×(n-2)×...×3×2×1
对于Lewis Carrol的可分性测试:
只要该数字有多个数字,请删除单位数字并从结果数字中减去该数字来缩短数字。
当且仅当最终数字等于零时,原始数字才能被11整除
CODE:
#I don't know why, but for some reason n is automatically set to 5 once it is called in the recursion function for sin and cos x.
#This causes the answers to for sin and cos x to be drastically incorrect.
x = float(input("Please input a real number: "))
def factorial(n):
res = 1
for i in range(1, n+1):
res *= i
return res
def question1():
ex = 1 + x
for n in range(2,15):
ex += (x**n)/factorial(n)
print("e^{} = {}".format(x, ex))
question1()
def question2():
cosx = 0
for n in range(0, 15):
cosx += ((-1)**n)/factorial(2*n)*(x**(2*n+1))
print("cos {} = {}".format(x, cosx))
question2()
def question3():
sinx = 0
for n in range(0, 15):
sinx += ((-1)**n)/factorial(2*n+1)*(x**(2*n+1))
print("Sin {} = {}".format(x, sinx))
question3()
##def question4():
## while x > 9:
## unit = x % 10
## new_x = x // 10
## print(new_x)
## if new_x == 0:
## break
##question4()
示例输出:
Please input a real number: 10
e^10.0 = 20188.170595424563
cos 10.0 = -10962.271813947433
Sin 10.0 = -1083.6650211561773
1.0
1.0
1.0
1.0
...
答案 0 :(得分:0)
for
函数question3()
循环中的计算有很多错误。
(-1**n)
中,**
的优先级高于-
。正确的表达式是((-1)**n)
(x*(2*n)+1)
使用乘法而不是取幂。应该是:x**(...
,而不是x*(...
。*
(更正为**
)的优先级高于+1
。应该是:(x**(2*n+1))
。n -= 1
无效,因为n
会在循环的下一次迭代顶部立即反弹到新值。旧:
for n in range(2, 15): #n is defined as 2 here
sinx += (-1**n)/factorial((2*n+1))*(x*(2*n)+1)
n -= 1
更好:
for n in range(0, 15): #n is defined as 2 here
sinx += ((-1)**n)/factorial(2*n+1)*(x**(2*n+1))
您仍然有逻辑错误。分配要求您在单个术语小于前一个总和的10**-15
倍时终止循环。你根本没有实现它。
question2()
包含以下错误:
-1**n
应为(-1)**n
+1
。n -= 1
。试试这个:
def question2():
cosx = 0
for n in range(0, 15):
cosx += ((-1)**n)/factorial((2*n))*(x**(2*n))
print(cosx)