我是python的新手,非常棒!但是我很难找到这个系列的结果:
1-x+(x^2)/2!-(x^3)/3!+(x^4)/4!-..............up to n terms
我写的是:
import math
a=input("ENter the no")
x=input("ENter value of x")
i=1
s=0
s1=0
s2=1
p=1
while(i<=a):
if(i%2!=0):
s=s-math.pow(x,i)/p*i
else:
s1=s1+math.pow(x,i)/p*i
i=i+1
else:
s2=s2+s1+s
print s2
请让我知道正确的程序和错误:) !!提前致谢。 不直接使用阶乘函数让我知道吗?
答案 0 :(得分:0)
import math #imported to use the factorial function
def exp(x,n):
ans = 1 #initializing it with 1 because the first term is a constant:1
for i in xrange(1,n+1): #starts looping from 1 to n terms
ans+=(-1**i*(float(x)**i)/math.factorial(i)) #changing the sign of 1, adding.
# -1**i equals to 1 if i is even and -1 if i is odd
# ** operator stands for the pow() function , (2**3 =8)
# float(x) returns a floating value if value of x entered is integer
# You can remove this is you are already entering floating values.
# math.factorial() returns factorial of a given argument,
return ans
如果您不想使用math.factorial(),那么您可以尝试:
def exp(x,n):
ans = 1
dummy_factorial = 1
for i in xrange(1,n+1):
dummy_factorial*=i
print dummy_factorial
ans+=(-1**i*(float(x)**i)/(dummy_factorial))
return ans
答案 1 :(得分:0)
这是Taylor exp(-x)
的系列开发。认识到这一点,您就有机会根据math.exp(-x)
检查结果。
你不需要&#39;否则&#39;过了一会儿。只需将循环后的代码添加到与while循环之前相同的缩进级别。
最重要的是,阶乘的计算根本就没有完成。写p*i
不会将p和i的乘积存储在p中。你需要这样做。
然后,运算符优先级存在问题。当你写pow(...)/p*i
时,Python理解( pow(...) / p ) * i
,这不是你的意思。
最后,系列中的大多数术语都会取消,但您在一方添加所有正面条款,在另一方添加所有负条款。这意味着你将增长两个非常大的值(如果你使用整数则冒险溢出),然后取它们之间的差异来得到结果。因为计算机上的双精度是有限的,所以这在精确方面是不好的做法。最好将所有项中的所有项保持为相同的数量级。
import math
a=input("Enter the no")
x=input("Enter value of x")
s=1
p=1
for i in range(1,a):
p=p*i
if(i%2!=0):
s=s-math.pow(x,i)/p
else:
s=s+math.pow(x,i)/p
print s
print math.exp(-x)
请注意使用for循环和较少的中间数总和会使它更容易阅读。
pow(-x,i)
是否定的,否则为正。因此-pow(x,i) if i%2 != 0 else pow(x,i)
可以重写pow(-x,i)
。为了提高性能,在内循环中删除if(几乎?)总是一件好事。所以简化版本是:
import math
a=input("Enter the no")
x=input("Enter value of x")
s=1
p=1
for i in range(1,a):
p=p*i
s=s+math.pow(-x,i)/p
print s
print math.exp(-x)
这也有利于缩短代码(因此更易读)。