泰勒级数 - 当 T1 == T0 时如何停止函数?
Taylor Series - How do I stop the function when T1 == T0?
我需要在 python 中制作泰勒级数而不使用 import math
或 等任何内置数学函数导入任何文件 round()
.
到目前为止,我的余弦函数代码如下:
x = abs(float(input("Please input the degree: ")))
rad = x * 3.14159265358979323846264338327950288419716 / 180
def cos():
f = 1
i = 0
c = 0
T0 = 1
T1 = 0
i = 0
Tp = 1
prec = 11
TDif = 1
print("{0:^45} {1:^13} {2:^47} {3:>12}".format("x", "termOld", "termNew", "tOld - TNew"))
while T1 != T0:
T0 = Tp
T1 = (-1 * T0 * rad * rad) / ((i + 1) * (i + 2))
Tp = T1
f += T1
c += 1
i += 2
TDif = abs(T0) - abs(T1)
print("{:02d} ==> {:^30.11f} {:^30.11f} {:^30.11f} {:^30.11f}".format(c, f, abs(T0), abs(T1), abs(TDif)))
cos()
这是输出:
Please input the degree: 30
x termOld termNew tOld - TNew
01 ==> 0.86292216110 1.00000000000 0.13707783890 0.86292216110
02 ==> 0.86605388342 0.13707783890 0.00313172232 0.13394611658
03 ==> 0.86602526410 0.00313172232 0.00002861932 0.00310310300
04 ==> 0.86602540421 0.00002861932 0.00000014011 0.00002847921
05 ==> 0.86602540378 0.00000014011 0.00000000043 0.00000013968
06 ==> 0.86602540378 0.00000000043 0.00000000000 0.00000000043
07 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
08 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
09 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
...
最后一个重复,直到计数器达到 80。
下面是我的问题。当 termOld
(T0
) == termNew
(T1
) 按照上面设置的精度设置时,如何停止函数?就像,我知道 T0
在计数器 9 不是真的 == T1
如果你看整个小数,但因为精度是 11,我想 stop当只有 0 的字符串作为输出出现时,即在计数器 07 处。
下午好,
这里只是在黑暗中拍摄;如果你知道你的最终答案是什么,或者它应该是什么,你可以添加一个终止条件,比如......
如果 T1 == T0:
休息
或者使用数值代替变量比较。
然后在那种情况下,如果您知道您的模型应该做什么,并且它确实做到了,您可以结束计算过程以到达那里。
将 while T1 != T0:
更改为 while abs(TDif) > .5*10**(-prec):
应该可以解决问题。这确保了在给定的小数精度下差异将向下舍入为零。
我需要在 python 中制作泰勒级数而不使用 import math
或 等任何内置数学函数导入任何文件 round()
.
到目前为止,我的余弦函数代码如下:
x = abs(float(input("Please input the degree: ")))
rad = x * 3.14159265358979323846264338327950288419716 / 180
def cos():
f = 1
i = 0
c = 0
T0 = 1
T1 = 0
i = 0
Tp = 1
prec = 11
TDif = 1
print("{0:^45} {1:^13} {2:^47} {3:>12}".format("x", "termOld", "termNew", "tOld - TNew"))
while T1 != T0:
T0 = Tp
T1 = (-1 * T0 * rad * rad) / ((i + 1) * (i + 2))
Tp = T1
f += T1
c += 1
i += 2
TDif = abs(T0) - abs(T1)
print("{:02d} ==> {:^30.11f} {:^30.11f} {:^30.11f} {:^30.11f}".format(c, f, abs(T0), abs(T1), abs(TDif)))
cos()
这是输出:
Please input the degree: 30
x termOld termNew tOld - TNew
01 ==> 0.86292216110 1.00000000000 0.13707783890 0.86292216110
02 ==> 0.86605388342 0.13707783890 0.00313172232 0.13394611658
03 ==> 0.86602526410 0.00313172232 0.00002861932 0.00310310300
04 ==> 0.86602540421 0.00002861932 0.00000014011 0.00002847921
05 ==> 0.86602540378 0.00000014011 0.00000000043 0.00000013968
06 ==> 0.86602540378 0.00000000043 0.00000000000 0.00000000043
07 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
08 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
09 ==> 0.86602540378 0.00000000000 0.00000000000 0.00000000000
...
最后一个重复,直到计数器达到 80。
下面是我的问题。当 termOld
(T0
) == termNew
(T1
) 按照上面设置的精度设置时,如何停止函数?就像,我知道 T0
在计数器 9 不是真的 == T1
如果你看整个小数,但因为精度是 11,我想 stop当只有 0 的字符串作为输出出现时,即在计数器 07 处。
下午好,
这里只是在黑暗中拍摄;如果你知道你的最终答案是什么,或者它应该是什么,你可以添加一个终止条件,比如......
如果 T1 == T0: 休息
或者使用数值代替变量比较。
然后在那种情况下,如果您知道您的模型应该做什么,并且它确实做到了,您可以结束计算过程以到达那里。
将 while T1 != T0:
更改为 while abs(TDif) > .5*10**(-prec):
应该可以解决问题。这确保了在给定的小数精度下差异将向下舍入为零。