需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列
Posted
技术标签:
【中文标题】需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列【英文标题】:need help to check sin result doesnt match, using taylor series in python 【发布时间】:2021-12-04 10:33:54 【问题描述】:这是我的代码:
def faktorial(z):
a=1
for x in range (1,z+1):
a=a*x
return a
def sin(x):
p=0
for k in range(0,1000):
a=((-1)**k)
b=((x**(2*k+1)))
c=(faktorial((2*k)+1))
p+=(a*b)/c #sin x
return p
x=45
print(sin(x))
但是当它运行时结果不匹配,sin(45) 应该是 0,850904 但我的程序得到 37.93452 作为结果.thxenter image description here
【问题讨论】:
sin(45) 不应该是 1/sqrt(2) 吗?假设 45 是度数,而不是弧度。 我认为这是某种溢出/舍入错误。尝试在您的范围内使用 10 而不是 1000,并使用较小的数字,而不是像 45 弧度这样的数字 顺便说一句,您可以使用*=
乘以并为变量赋值,即x = 5
后跟x *= 10
将得到x = 50
@Stefan aahhh 我明白了,我误解了泰勒系列,我认为它使用弧度而不是度数。我现在尝试更改范围及其工作。非常感谢。
【参考方案1】:
你得到一个错误的答案,因为你使用 degree 而不是 radian 。当您的 x 太接近 0 时,此近似值也是正确的。
【讨论】:
是的,我误解了泰勒系列,我认为它使用弧度而不是度数。抱歉,我发布了错误的假设,因为我还没有研究过这个系列。但我只得到了我的任务的公式,所以很抱歉我做出了错误的假设。【参考方案2】:泰勒级数是以弧度为单位计算角度的,要使用它,您必须将度数转换为弧度。
因此,您可以更改输入中的单位或将度数转换为度数。
从数学导入 pi
def sin(x):
# Either do this
x = x*pi/180
p=0
for k in range(0,1000):
a=((-1)**k)
b=((x**(2*k+1)))
c=(faktorial((2*k)+1))
p+=(a*b)/c #sin x
return p
# or this x=pi/4
x = 45
print(sin(x))
【讨论】:
【参考方案3】:通过使用更少的项和更少的弧度数来避免舍入误差:
def faktorial(z):
a=1
for x in range (1,z+1):
a=a*x
return a
def sin(x):
p=0
for k in range(0,10):
a=((-1)**k)
b=((x**(2*k+1)))
c=(faktorial((2*k)+1))
p+=(a*b)/c #sin x
return p
x=3.1415/4
print(sin(x))
【讨论】:
以上是关于需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列的主要内容,如果未能解决你的问题,请参考以下文章