【发布时间】:2021-08-13 23:39:28
【问题描述】:
我正在尝试使用泰勒级数而不使用阶乘来计算 sin(x)。
import math, time
import matplotlib.pyplot as plot
def sin3(x, i=30):
x %= 2 * math.pi
n = 0
dn = x**2 / 2
for c in range(4, 2 * i + 4, 2):
n += dn
dn *= -x**2 / ((c + 1) * (c + 2))
return x - n
def draw_graph(start = -800, end = 800):
y = [sin3(i/100) for i in range(start, end)]
x = [i/100 for i in range(start, end)]
y2 = [math.sin(i/100) for i in range(start, end)]
x2 = [i/100 for i in range(start, end)]
plot.fill_between(x, y, facecolor="none", edgecolor="red", lw=0.7)
plot.fill_between(x2, y2, facecolor="none", edgecolor="blue", lw=0.7)
plot.show()
当您运行draw_graph 函数时,它使用matplotlib 绘制图形,红线是我的sin3 函数的输出,蓝线是math.sin 方法的正确输出。
您可以看到曲线不太正确,它不够高或不够低(似乎在 0.5 处达到峰值),并且还具有奇怪的行为,它会在 0.25 附近产生一个小峰值,然后再次下降。如何调整我的函数以匹配 math.sin 的正确输出?
【问题讨论】:
-
现在是学习how to debug small programs 和to use a debugger 的好时机,逐步检查您的代码并观察每一行代码的作用。通过将这些中间结果与预期结果进行比较,确定您的程序与您的预期有何不同。从那里向后工作以缩小问题的原因。如果您仍然对代码的行为感到困惑,请提出一个特定 问题。转储代码并期望其他人为您调试它是不行的。
-
这个问题很具体,我在问如何在不使用阶乘的情况下使用泰勒级数生成罪孽。这不是一个具体的问题吗?
-
“我怎样才能完成这项任务”或“修复我的代码”不是具体问题。你做了什么调试?您是否写出了泰勒级数展开式并比较了您的
sin3()生成的术语?您是否尝试确定是哪个术语/哪一行代码导致了问题? -
我已经尝试更改 n 变量,以及在过去几个小时内多次循环开始和结束的位置,
range(4, 2 * i + 4, 2)似乎已经生成了迄今为止最准确的结果,但是它仍然来自正确的结果。 -
如果这是一个关于数学应该如何完成的问题,而不是如何实现的问题,你最好在 math.stackexchange 或类似网站上提问
标签: python trigonometry taylor-series