python - 泰勒级数 - 当 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,但是因为精度是 11,所以我想在只有 0 的字符串作为输出出现时停止它,即在计数器 07 处。== T1
解决方案
更改while T1 != T0:
为while abs(TDif) > .5*10**(-prec):
应该可以解决问题。这确保了在给定的小数精度下,差异将向下舍入为零。
推荐阅读
- php - 在 laravel 中生成 url
- c++ - 当我将两个矩阵相减时,C++ 中的重载运算符 (<<) cout 不起作用
- php - 如何在Php中减去多维数组中的所有列值?
- android - 如何使用 SetMaxVideoDuration 录制视频
- c# - 将 Dll 转换为 XSD 方案
- timeout - sapui5 网关超时定时器
- excel - Sumproduct 在一个范围内具有多个条件
- javascript - 失焦时的材料设计添加芯片
- function - Lambda 版本控制 - 不通过 SQS 触发特定版本
- django - Django Rest Browsable API 在不同的 url 可用