【问题标题】:Taylor Series - How do I stop the function when T1 == T0?泰勒级数 - 当 T1 == T0 时如何停止该功能?
【发布时间】:2020-04-21 14:09:00
【问题描述】:

我需要在 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,我想在只有 0 的字符串时停止它显示为输出,即计数器 07。

【问题讨论】:

    标签: python python-3.x function format taylor-series


    【解决方案1】:

    while T1 != T0: 更改为while abs(TDif) > .5*10**(-prec): 应该可以解决问题。这样可以确保差值在给定的小数精度下四舍五入为零。

    【讨论】:

    • 这似乎适用于 deg == 30 和大多数其他人,但由于某种原因不适用于 82 度以上,但这是迄今为止我得到的最接近的,谢谢! 82 度以上的输出似乎只加载一次:Please input the degree: 82 x termOld termNew tOld - TNew 01 ==> 0.02412376532 1.00000000000 1.02412376532 0.02412376532
    • @HaqeemWan 这很奇怪。它是否在旧的循环条件下以高角度给出了预期的输出?
    • @MarkSynder 是的,在旧的 while 循环条件下,原来的问题又出现了,就像现在答案是正确的,但它仍然比我想要的循环方式更多,重复只有 0 的字符串,这次是反击 97
    • @HaqeemWan 您是否在不知不觉中更改了prec 的值?这是我能想到的唯一解释。毕竟,prec 在没有我的循环条件的情况下不会在您的代码中执行任何操作。
    • @HaqeemWan 乐于助人。以下是如何得出公式:要精确到小数点 0(最接近 1 的位置),您需要在 0.5 以内,这样四舍五入才会正确。然后您只需扩展该规则:精确到小数点后 1,您的错误需要是大小的十分之一 - 在 0.05 以内。所以为了精确到小数点,你需要在 0.5 * 以内(10 的 -prec 次幂),在 python 中是 10**(-prec)。
    【解决方案2】:

    下午好,

    这里只是在黑暗中拍摄;如果你知道你的最终答案是什么,或者应该是什么,你可以添加一个终止条件,比如......

    如果 T1 == T0: 打破

    或使用数值代替变量比较。

    然后在这种情况下,如果您知道您的模型应该做什么,并且它确实做到了,那么您可以结束计算过程以到达那里。

    【讨论】:

    • 不幸的是,这不起作用。否则,我的 while 条件也会得到满足,它会中断。问题是尽管我已经将它格式化为只有 11 d.p,但 python 仍然会查看整个小数,但感谢您的回答
    猜你喜欢
    • 2021-04-04
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2011-11-04
    • 2017-12-02
    相关资源
    最近更新 更多